如何使用python-pptx
创建一个由多个数据系列填充的新图表,但只能在图表上显示这些系列中的一些数据?其他系列应在图表的背景数据中,但在显示幻灯片时不可见(有关说明,请参见图1)。
Image 1: Selection of columns that are to be shown initially
我的目的是针对同一张幻灯片进行多种类型的测量(百分比,绝对值,索引)。首先,我只想在图表上显示百分比值。如果图表看起来不太好,我希望能够右键单击图表并选择要显示其他度量的其他列(参见图2)。
Image 2: Newly selected columns that were previously hidden
一种解决方法是为每个其他度量创建隐藏的幻灯片,然后根据需要激活它们。但这对我的情况不起作用-数据必须像示例中一样全部放在一张幻灯片中。
期待阅读您的答案! :)
当前测试代码:
prs = Presentation("MyPPTX.pptx")
chart_layout = prs.slide_layouts[11]
chart_placeholder = prs.slides.add_slide(chart_layout).placeholders[15]
# define chart data ---------------------
chart_data_prz = ChartData()
chart_data_prz.categories = ['Male', 'Female']
chart_data_prz.add_series('Age_18-34_in_%', (51,49))
chart_data_prz.add_series('Video-Streaming_in_%', (58, 42))
chart_data_prz.add_series('Age_18-34_in_Mio', (105, 96))
chart_data_prz.add_series('Video-Streaming_in_Mio', (118, 83))
prz_chart = chart_placeholder.insert_chart(XL_CHART_TYPE.BAR_CLUSTERED,chart_data_prz)
答案 0 :(得分:0)
当前的python-pptx
版本(v0.6.17)中没有对此的API支持。
提供图表数据的嵌入式Excel工作簿是从与图表相同的ChartData
对象派生的;也就是说,使用python-pptx
将数据添加到图表的Excel工作簿中的唯一方法是将其放入用于创建图表的ChartData
对象中,然后python-pptx
将所有这些系列添加到图表(使它们可见)。
答案 1 :(得分:0)
我的解决方案:
from pptx.oxml.xmlchemy import OxmlElement
def SubElement(parent, tagname, **kwargs):
element = OxmlElement(tagname)
element.attrib.update(kwargs)
parent.append(element)
return element
def hideSeriesAndRemoveFromLegend(chart,
seriesIndex):
"""Data labels (if they exist) are not hidden"""
## Set series to no fill
chart.chart.series[seriesIndex].format._element.get_or_add_spPr().get_or_change_to_noFill()
## # Remove entry from legend
## Get legend
legend = chart.chart.legend._element
## Add legendEntry
lE = SubElement(legend, "c:legendEntry")
## Add idx of the series, index order is reversed
seriesCount = len(chart.chart.series)
seriesIndexToDelete = seriesCount - 1 - seriesIndex
_ = SubElement(lE, "c:idx", val=str(seriesIndexToDelete))
## Add delete
_ = SubElement(lE, "c:delete", val="1")