首页 > 解决方案 > 如何使用 python-pptx 更新 X 轴上的日期范围

问题描述

我有一个多折线图,我正在尝试为其更新数据。在我的情况下,我可以使用数据框更改data series(1 到 5) 的数据;我无法弄清楚如何更改类别轴的范围。在当前情况下,我的日期范围从 2010 年开始;我不知道如何根据输入数据动态更新

我的图表如下图所示: 简报图表

我的图表数据如下: PowerPoint图表数据

我的代码如下:

import pandas as pd
from pptx import Presentation
from pptx.chart.data import CategoryChartData, ChartData

df = pd.DataFrame({
    'Date':['2010-01-01','2010-02-01','2010-03-01','2010-04-01','2010-05-01'],
    'Series 1': [0.262918, 0.259484,0.263314,0.262108,0.252113],
    'Series 2': [0.372340,0.368741,0.375740,0.386040,0.388732],
    'Series 3': [0.109422,0.109256,0.112426,0.123932,0.136620],
    'Series 4': [0.109422,0.109256,0.112426,0.123932,0.136620], # copy of series 3 for easy testing
    'Series 5': [0.109422,0.109256,0.112426,0.123932,0.136620], # copy of series 3 for easy testing
})
prs = Presentation(presentation_path)    
   
def update_multiline(chart,df):
    plot = chart.plots[0]
    category_labels = [c.label for c in plot.categories]
    # series = plot.series[0]
    chart_data = CategoryChartData()
    chart_data.categories = [c.label for c in plot.categories]


    category_axis = chart.category_axis
    category_axis.minimum_scale = 1 # this should be a date
    category_axis.minimum_scale = 100 # this should be a date
    tick_labels = category_axis.tick_labels
    df = df.drop(columns=['Date'])

    for index in range(df.shape[1]):
        columnSeriesObj = df.iloc[:, index]
        chart_data.add_series(plot.series[index].name, columnSeriesObj)
    chart.replace_data(chart_data)

# ================================ slide index 3 =============================================

slide_3 = prs.slides[3]
slide_3_title = slide_3.shapes.title # assigning a title

graphic_frame = slide_3.shapes
# slide has only one chart and that's the 3rd shape, hence graphic_frame[2]
slide_3_chart = graphic_frame[2].chart
update_multiline(slide_3_chart, df)

prs.save(output_path)

如果我在数据框中的日期从 2015 年即“日期”开始,如何更新日期范围:[“2015-01-01”、“2015-02-01”、“2015-03-01”、“2015-04” -01','2015-05-01']

标签: python-3.xpython-pptx

解决方案


您只需将旧图表的类别复制到新图表中:

chart_data.categories = [c.label for c in plot.categories]

如果您希望它们发生变化,则必须从数据框中绘制类别标签。


推荐阅读