是否可以从数据帧在 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, :]))
我想知道是否可以获取您在 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, :]))