python-pptx – 如何在图表中单独 hide/show 数据标签

python-pptx – How to individually hide/show data labels in graph

我希望能够在堆叠条形图中灵活地显示或隐藏数据标签。

我认为这可以通过访问单个数据标签来实现: plot.series[0].points[1].data_label,然后将其 has_text_frame 属性分配给 TrueFalse,但这不起作用。

我的用例比下面的更复杂,但我试图通过一个简单的例子让它工作。如果可能的话,请告诉我如何使用下面附加的代码片段来完成它。

from pptx import Presentation
from pptx.chart.data import ChartData
from pptx.enum.chart import XL_CHART_TYPE
from pptx.util import Cm

prs = Presentation()
slide = prs.slides.add_slide(prs.slide_layouts[5])
x = ['one','two','three', 'four']
y = [7.0, 5.0, 4.0, 2.0]
specs = {
    'height': Cm(7.82),
    'width': Cm(14.8),
    'left': Cm(2.53),
    'top': Cm(5.72)}

data = ChartData()
data.categories = x
label_values = tuple(y)
data.add_series('Series 1', label_values)
frame = slide.shapes.add_chart(XL_CHART_TYPE.BAR_CLUSTERED, specs['left'],
                               specs['top'], specs['width'],
                               specs['height'], data)
chart = frame.chart
plot = chart.plots[0]

# Attempt at showing all labels except for one
plot.has_data_labels = True
plot.series[0].points[1].data_label.has_text_frame =False

prs.save('chart-01.pptx')

我认为您想要的方法是单独开启,而不是单独关闭。我相信 PowerPoint 支持这两种方法,但 python-pptx 将只支持 "add" 方法,如果它支持的话。

尝试这样的事情:

plot = chart.plots[0]
# ---best if data-labels don't appear by default
# ---turn them off, but only if they already show
# ---since it might disrupt what comes next
# plot.has_data_labels = False
plot.series[0].points[0].data_label.text_frame.text = "Foo"