在python-pptx中将线图和条形图组合在一个图表中

时间:2016-08-17 16:21:42

标签: python-pptx

我需要使用python-pptx生成一个包含线图和条形图的图表。根据文件,有人说

  

“大多数图表只有一个图表,python-pptx还没有   支持创建多绘图图表,但您可以访问多个绘图   在已有它们的图表上。“

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

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

1 个答案:

答案 0 :(得分:1)

API级别尚不支持在python-pptx中创建所谓的“多图”图表。因此,如果您想这样做,则必须为该部分编写自己的代码。

然而,python-pptx的内部结构可以提供很多支持,包括在添加额外的绘图后提供完全访问权限。

完整的配方将超出此Q& A格式,但这是一般要点。

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

  • 所以你想首先发现一个多图XML层次结构在感兴趣的邻域中的样子。 opc-diag对此很有帮助。使用带有两个图表(可能是直线和条形图)的图表创建单个幻灯片演示文稿。使用opc-diag转储right to left部分并搜索chart1.xmllineChart元素。如果您从折线图开始,那么您的工作就是添加您在那里找到的barChart元素。所以现在你可以清楚地看到你的目标了。

  • 使用python-pptx获取父元素。在这种情况下,我相信它是barChart元素。你可以在c:plotArea得到它。这将是chart.plots._plotArea的子类,它本身是来自lxml的BaseOxmlElement的子类。因此,所有这些操作都可供您使用。如果你搜索'python-pptx workaround函数',你会发现一些例子。这里只是一个简单易用的提示,您可以使用其_Element属性为任何元素对象转储XML。这对于在学习XML操作调用时跟踪进度非常有用。

  • 然后构建新的子元素并将其添加到正确位置的父元素中,可能使用.append(),可能的.insert()。另一种方法可能是添加虚拟条形图,找到它的.xml元素,执行deepcopy()并追加它。如果有效,那对内部构件的工作就会少得多。

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