python - xlsxwriter/python - 通过索引系列值使用 Python 创建图表

标签 python excel for-loop series xlsxwriter

我编写了一个 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 的工作原理也很陌生。我认为我的问题是我无法将我的系列的假设值参数正确分配给图表。

我用来有点绘制 April/test 作为可能的 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)

如何使用 for 循环将我的系列索引到先前创建的 Excel 工作表的单元格中,以创建 5 条线(每条线 3 个点)的线图?

我想要这样的东西,在这个例子中我只展示了索尼克和阴影(请原谅我可怕的绘画技巧)。

enter image description here

最佳答案

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

into a previously created excel sheet's cells

xlsxwriter 文档声明:“XlsxWriter 是一个 Python 模块,用于以 Excel 2007+ XLSX 文件格式写入文件。......它无法读取或修改现有的 Excel XLSX 文件。” (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$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()

预期输出: Expected Output

关于python - xlsxwriter/python - 通过索引系列值使用 Python 创建图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51525385/

相关文章:

python - 在 Ray 中的远程函数之间存储对象

excel - 在 Excel VBA 中将一个变体分配给另一个变体

Excel VBA : I record macro with scatter plot that executes x, f(x),但是当我运行宏时,总是将 X 和 F(x) 绘制为单独的函数

Javascript:按键求和多个数组的最有效方法

python - 我无法在 EC2 Windows 实例上安装的 python 上加载数据集

python - 系统退出 : 2 error when calling parse_args() in iPython Notebook

python - Anaconda/Spyder突然崩溃并启动错误: Socket issue and/or ImportError

xml - XLSX 对变更的取证分析

唯一值上的 R ifelse 循环总是解析为 FALSE

javascript - 编写一长串 if-else-if 的简短方法?