xlsxwriter / python - 通过索引Series值创建Python图表

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (232)

我编写了一个生成多个数据帧的python脚本,然后将它们合并为一个最终的数据帧。然后将最终的数据df框写入Excel工作簿中的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$1: 'Apr 18', ...} and so on...

我对xlsxwriter的工作原理也很陌生。我认为我的问题是我无法正确地将我假设系列的值参数分配给图表。

我用来排序四月/测试作为可能for循环的基础的基本代码在这里:

workbook = writer.book
worksheet = writer.sheets['FINAL VALUES']

chart = workbook.add_chart({'type': 'line'})
chart.add_series({
    'name':       '=FINAL VALUES!$B$1',
    'categories': '=FINAL VALUES!$A$2:$A$5',
    'values':     '=FINAL VALUES!$B$2:$B$5',})

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工作表的单元格中,使用for循环创建5行的线图,每行3个点?

我想要这样的东西,我只是在这个例子中展示Sonic和Shadow(借口我可怕的Paint Skills)。

提问于
用户回答回答于

你在帖子中提到了以下内容:

进入以前创建的Excel工作表单元格

xlsxwriter docs声明:“XlsxWriter是一个用于以Excel 2007+ XLSX文件格式编写文件的Python模块。它无法读取或修改现有的Excel XLSX文件。” (链接在这里)。因此,您无法使用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$1:$D$1",
    '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()

预期产出:

扫码关注云+社区

领取腾讯云代金券