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



我正试图使用xlsxwriter绘制条形图,但我有一个数据帧列表,并希望使用循环为每个数据帧绘制条形图。所以我需要add_seriesvaluescategories和每个数据帧,它们有不同的大小,我如何读取每个数据帧并为每个数据帧的最大和最小列编制索引?

# 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()

谢谢!

大多数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],
})

另请参阅XlsxWriter文档中的Pandas图表示例。

相关内容

最新更新