我正在尝试使用xlsxwriter
绘制条形图,但是我有一个数据框列表,并希望使用循环为每个数据框绘制条形图。因此,我需要将add_series
与values
和categories
与每个具有不同大小的数据帧一起使用,如何读取每个数据帧并为每个数据帧的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()
谢谢!
大多数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],
})