通过索引add_series中的列最大值和最小值来循环绘制

问题描述 投票:0回答:1

我正在尝试使用xlsxwriter绘制条形图,但是我有一个数据框列表,并希望使用循环为每个数据框绘制条形图。因此,我需要将add_seriesvaluescategories与每个具有不同大小的数据帧一起使用,如何读取每个数据帧并为每个数据帧的max和min列建立索引?

# open an excel
writer = pd.ExcelWriter('pandas_charts.xlsx', engine='xlsxwriter')

for i in list(df_list):
    df = df_list[i]
    df.to_excel(writer, sheet_name=i, index=False)

    workbook = writer.book
    worksheet = writer.sheets[i]

    ## add bar chart in each sheet
    chart = workbook.add_chart({'type':'bar'})

    ## what should I replace '!B$2:$B$8' and '!A$2:$A$8'?
    chart.add_series({'values':'=' + i + '!B$2:$B$8',
                      'categories':'=' + i + '!A$2:$A$8'
                     })
    worksheet.insert_chart('D1', chart)

writer.save()

谢谢!

python pandas loops xlsxwriter
1个回答
0
投票

大多数XlsxWriter API支持A1样式范围或(row, col)样式值集。这也适用于chart.add_series()


chart.add_series({
    'categories': '=Sheet1!$A$1:$A$5',
    'values':     '=Sheet1!$B$1:$B$5',
})

# Or using a list of values instead of category/value formulas:
#     [sheetname, first_row, first_col, last_row, last_col]
chart.add_series({
    'categories': ['Sheet1', 0, 0, 4, 0],
    'values':     ['Sheet1', 0, 1, 4, 1],
})

因此,在您的示例中,您可以执行以下操作:

sheet_name = i  # Or str(i)

row_min = 1
row_max = len(df) + 1
col_min = 0
col_max = 1

chart.add_series({
    'categories': [sheet_name, row_min, col_min, row_max, col_min],
    'values':     [sheet_name, row_min, col_max, row_max, col_max],
})
© www.soinside.com 2019 - 2024. All rights reserved.