python-3.x - 如何使用 python-pptx 更新 X 轴上的日期范围
问题描述
我有一个多折线图,我正在尝试为其更新数据。在我的情况下,我可以使用数据框更改data series
(1 到 5) 的数据;我无法弄清楚如何更改类别轴的范围。在当前情况下,我的日期范围从 2010 年开始;我不知道如何根据输入数据动态更新
我的代码如下:
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']
解决方案
您只需将旧图表的类别复制到新图表中:
chart_data.categories = [c.label for c in plot.categories]
如果您希望它们发生变化,则必须从数据框中绘制类别标签。
推荐阅读
- html - 如何在滚动和调整大小时保持分层的绝对 div 对齐和调整大小?
- java - 如果我可以在没有异常的情况下解决问题,我是否应该在 java 中使用异常?
- javascript - 是否可以在不提示“离开此页面”或“留在此页面”选项的情况下防止刷新浏览器?
- java - Jav8:计算时间戳的经过时间
- c# - Asp.net core 2.1 基于角色的授权不适用于 JWT
- java - JAVA 如何获得接受父类及其所有扩展类的方法?
- windows - 如何在 Powershell 中进行 LM 哈希
- assembly - 使用 PIC16F18326 进行背靠背 UART 传输 - 跳过字节
- couchdb - 元素数组中字符串上的 CouchDB 查询选择器
- node.js - 命令 json-server --watch db.json 不起作用 - 它返回“'json-server' command not found”