是否可以从数据帧在 pptx-python 中创建折线图?

Is it possible to create a line graph in pptx-python from a dataframe?

我想知道是否可以获取您在 python 中创建的数据框,并使用 pptx-python 包将值自动填充到 PowerPoint 折线图中?我查看了我能找到的所有示例,看来您必须手动输入所需的值(请参见下面的代码)。

chart_data = ChartData()
chart_data.categories = ['Q1 Sales', 'Q2 Sales', 'Q3 Sales']
chart_data.add_series('West',    (32.2, 28.4, 34.7))
chart_data.add_series('East',    (24.3, 30.6, 20.2))
chart_data.add_series('Midwest', (20.4, 18.3, 26.2))

x, y, cx, cy = Inches(2), Inches(2), Inches(6), Inches(4.5)
chart = slide.shapes.add_chart(
    XL_CHART_TYPE.LINE, x, y, cx, cy, chart_data
).chart

chart.has_legend = True
chart.legend.include_in_layout = False
chart.series[0].smooth = True

是否可以将我的数据框中的内容自动传输到 chart_data.categories 和 chart_data.add_series() 部分,这样我就不必全部输入了?还是总是手动输入?

当然有可能。看看你是如何将 chart_data.categories 设置为 list 的?这可以是你想要的任何列表,所以你需要做的就是弄清楚如何从你的数据框中获取该列表。同样对于每个系列及其数据——如何从数据框中获取系列名称和其中的数据?我们无法判断,因为您忘记在问题中包含数据框。

假设您的数据框如下所示:

         Q1 Sales  Q2 Sales  Q3 Sales
West         32.2      28.4      34.7
East         24.3      30.6      20.2
Midwest      20.4      18.3      26.2

您可以使用

获取列名列表
>>> df.columns.to_list()
['Q1 Sales', 'Q2 Sales', 'Q3 Sales']

您可以使用

获取行名称
>>> df.index.to_list()
['West', 'East', 'Midwest']

对于数据框中给定的 index,您可以通过以下方式获取所有列的值:

>>> index = "West"
>>> df.loc[index, :].to_list()
[32.2, 28.4, 34.7]

所以,你可以这样做:

chart_data.categories = df.columns.to_list()
for serie in df.index: # Didn't need to convert to list here because a for loop iterates over any iterable
    chart_data.add_series(serie, df.loc[serie, :].to_list())

如果 add_series 需要它的第二个参数是 tuple,您可以将行转换为元组而不是列表:

for serie in df.index: 
    chart_data.add_series(serie, tuple(df.loc[serie, :]))