在 python-pptx 的单个图表中组合线图和条形图

Combining line plots and bar plots in a single chart in python-pptx

我需要使用 python-pptx 生成包含折线图和条形图的图表。根据文档,据说

"Most charts only have a single plot and python-pptx doesn’t yet support creating multi-plot charts, but you can access multiple plots on a chart that already has them."

http://python-pptx.readthedocs.io/en/latest/user/charts.html

它仍然适用吗? 有解决方法吗? 我更喜欢使用模板中的图表占位符自动创建图表,而不是在模板中预先创建图表,然后才更新值。第一种方法与我目前拥有的所有其他 PowerPoint 自动化更加一致。

API 级别尚不支持在 python-pptx 中创建所谓的 "multi-plot" 图表。所以如果你想这样做,你将不得不为那部分编写你自己的代码。

但是 python-pptx 的内部结构可以提供很多支持,包括在您添加额外的情节后提供完全访问权限。

完整的秘诀将超​​出这种问答形式,但这里是一般要点。

  • PowerPoint 演示文稿本质上是一个很大的 XML 层次结构。一般策略是找到正确的父元素,然后使用可用的最佳方法将正确的子 XML 层次结构(表示新图)添加到该父元素。

  • 因此,您想首先了解感兴趣社区中的多地块 XML 层次结构。 opc-diag 对此很有帮助。创建一个包含两个图的图表的单张幻灯片演示文稿,可能是折线图和条形图。使用 opc-diag 转储 chart1.xml 部分并搜索 lineChartbarChart 元素。如果您从折线图开始,您的工作就是添加在那里找到的 barChart 元素。所以现在你可以清楚地看到你的objective。

  • 您使用 python-pptx 获取该父元素。在这种情况下,我相信它是 c:plotArea 元素。您可以在 chart.plots._plotArea 获得它。这将是 BaseOxmlElement 的子类,它本身是 lxml 中 _Element 的子类。因此,所有这些操作都由您支配。如果您在 'python-pptx workaround function' 上四处搜索,您会找到一些示例。这里只是一个快速方便的提示,您可以使用 .xml 属性 转储任何元素对象的 XML。当您学习 XML 操作调用时,这对于跟踪您的进度非常有帮助。

  • 然后构建新的子元素并将其添加到父元素的正确位置,可能使用 .append(),可能使用 .insert()。另一种方法可能是添加一个虚拟条形图,找到它的 c:barChart 元素,执行 deepcopy() 并附加它。如果可行的话,内部结构的工作量会少很多。

无论如何,希望能给你一个想法。您可能会说这不适合胆小的人,但是很多拥有 Python 印章的人已经能够通过这种方法获得他们需要的东西。