【问题标题】:Combining line plots and bar plots in a single chart in python-pptx在 python-pptx 的单个图表中组合折线图和条形图
【发布时间】:2016-08-17 16:21:41
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: python-pptx


    【解决方案1】:

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

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

    完整的食谱会超出这种问答形式,但这里是一般要点。

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

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

    • 您使用 python-pptx 来获取该父元素。在这种情况下,我相信它是 c:plotArea 元素。您可以通过chart.plots._plotArea 获得。这将是BaseOxmlElement 的子类,它本身就是来自lxml 的_Element 的子类。因此,所有这些操作都由您支配。如果您搜索“python-pptx 变通方法”,您会发现一些示例。这里只是一个方便的提示,您可以使用其.xml 属性为任何元素对象转储 XML。这对于在您学习 XML 操作调用时跟踪您的进度非常有帮助。

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

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

    【讨论】:

    • 谢谢。听起来并不容易,但我会花时间学习这个:)
    猜你喜欢
    • 2013-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-16
    • 2017-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多