xlsxwriter/python - 通过索引系列值创建具有 Python 的图表
xlsxwriter/python - Creating a chart with Python by indexing Series values
我写了一个 python 脚本来生成几个数据帧,然后将它们加在一起成为一个最终的数据帧。然后将最终数据帧 df
写入 Excel sheet(以及包含之前写入的数据帧的许多其他 sheet)在 Excel 工作簿中.最终的数据框是每个月给几个名字的值,像这样:
df =
Apr 18 May 18 Jun 18
Character
Sonic 75.0 23.0 23.0
Shadow 100.0 38.0 38.0
Amy 100.0 40.0 40.0
Tails 100.0 40.0 40.0
Knuckles 91.0 36.0 37.0
# where {$A1: 'Character', $B: 'Apr 18', ...} and so on...
我对 xlsxwriter 的工作方式也很陌生。我认为我的问题是我无法正确地将我假设的系列值参数分配给图表。
我用来某种 绘制April/test 作为可能for
循环的基础的基本代码在这里:
workbook = writer.book
worksheet = writer.sheets['FINAL VALUES']
chart = workbook.add_chart({'type': 'line'})
chart.add_series({
'name': '=FINAL VALUES!$B',
'categories': '=FINAL VALUES!$A:$A',
'values': '=FINAL VALUES!$B:$B',})
chart.set_title ({'name': 'Line Plot Test'})
chart.set_x_axis({'name': 'Month'})
chart.set_y_axis({'name': 'Value'})
worksheet.insert_chart('D2', chart)
如何将我的系列索引到先前创建的 excel sheet 的带有 for 循环的单元格中,以创建一个包含 5 条线且每条线有 3 个点的线图?
我想要这样的东西,我在这个例子中只展示了 Sonic 和 Shadow(请原谅我可怕的 Paint Skills)。
您在 post 中提到了以下内容:
into a previously created excel sheet's cells
xlsxwriter 文档状态:"XlsxWriter is a Python module for writing files in the Excel 2007+ XLSX file format. ..... It cannot read or modify existing Excel XLSX files." (Link Here)。因此您不能使用 xlsxwriter 修改现有的 .xlsx 文件。
如果您可以创建原始 .xlsx 文件,那么使用 xlsxwriter 可以相对简单地创建您要查找的图表类型。我在下面提供了一个完全可重现的示例。
import pandas as pd
df = pd.DataFrame({'Character': ['Sonic','Shadow','Amy','Tails','Knuckles'],
'Apr 18': [75,90,80,75,60],
'May 18': [23,30,60,50,37],
'Jun 18': [23,20,26,40,35]})
df = df[['Character','Apr 18','May 18','Jun 18']]
writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='FINAL VALUES', index=False)
workbook = writer.book
worksheet = writer.sheets['FINAL VALUES']
chart = workbook.add_chart({'type': 'line'})
for i in range(2, len(df) + 2):
chart.add_series({
'categories': "='FINAL VALUES'!$B:$D",
'name': "='FINAL VALUES'!$A$%d" % (i),
'values': "='FINAL VALUES'!$B$%d:$D$%d" % (i, i),
'line': {
'width': 1.75,
},
'marker': {'type': 'circle'},
'data_labels': {'value': True},
})
chart.set_title ({'name': 'Line Plot Test'})
chart.set_x_axis({'name': 'Month'})
chart.set_y_axis({'name': 'Value'})
worksheet.insert_chart('D7', chart)
writer.save()
预期输出:
我写了一个 python 脚本来生成几个数据帧,然后将它们加在一起成为一个最终的数据帧。然后将最终数据帧 df
写入 Excel sheet(以及包含之前写入的数据帧的许多其他 sheet)在 Excel 工作簿中.最终的数据框是每个月给几个名字的值,像这样:
df =
Apr 18 May 18 Jun 18
Character
Sonic 75.0 23.0 23.0
Shadow 100.0 38.0 38.0
Amy 100.0 40.0 40.0
Tails 100.0 40.0 40.0
Knuckles 91.0 36.0 37.0
# where {$A1: 'Character', $B: 'Apr 18', ...} and so on...
我对 xlsxwriter 的工作方式也很陌生。我认为我的问题是我无法正确地将我假设的系列值参数分配给图表。
我用来某种 绘制April/test 作为可能for
循环的基础的基本代码在这里:
workbook = writer.book
worksheet = writer.sheets['FINAL VALUES']
chart = workbook.add_chart({'type': 'line'})
chart.add_series({
'name': '=FINAL VALUES!$B',
'categories': '=FINAL VALUES!$A:$A',
'values': '=FINAL VALUES!$B:$B',})
chart.set_title ({'name': 'Line Plot Test'})
chart.set_x_axis({'name': 'Month'})
chart.set_y_axis({'name': 'Value'})
worksheet.insert_chart('D2', chart)
如何将我的系列索引到先前创建的 excel sheet 的带有 for 循环的单元格中,以创建一个包含 5 条线且每条线有 3 个点的线图?
我想要这样的东西,我在这个例子中只展示了 Sonic 和 Shadow(请原谅我可怕的 Paint Skills)。
您在 post 中提到了以下内容:
into a previously created excel sheet's cells
xlsxwriter 文档状态:"XlsxWriter is a Python module for writing files in the Excel 2007+ XLSX file format. ..... It cannot read or modify existing Excel XLSX files." (Link Here)。因此您不能使用 xlsxwriter 修改现有的 .xlsx 文件。
如果您可以创建原始 .xlsx 文件,那么使用 xlsxwriter 可以相对简单地创建您要查找的图表类型。我在下面提供了一个完全可重现的示例。
import pandas as pd
df = pd.DataFrame({'Character': ['Sonic','Shadow','Amy','Tails','Knuckles'],
'Apr 18': [75,90,80,75,60],
'May 18': [23,30,60,50,37],
'Jun 18': [23,20,26,40,35]})
df = df[['Character','Apr 18','May 18','Jun 18']]
writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='FINAL VALUES', index=False)
workbook = writer.book
worksheet = writer.sheets['FINAL VALUES']
chart = workbook.add_chart({'type': 'line'})
for i in range(2, len(df) + 2):
chart.add_series({
'categories': "='FINAL VALUES'!$B:$D",
'name': "='FINAL VALUES'!$A$%d" % (i),
'values': "='FINAL VALUES'!$B$%d:$D$%d" % (i, i),
'line': {
'width': 1.75,
},
'marker': {'type': 'circle'},
'data_labels': {'value': True},
})
chart.set_title ({'name': 'Line Plot Test'})
chart.set_x_axis({'name': 'Month'})
chart.set_y_axis({'name': 'Value'})
worksheet.insert_chart('D7', chart)
writer.save()
预期输出: