小能豆

Python PPTX 抑制堆积条形图中的零值

py

是否有可能像下面这样抑制堆积条形图中的零值。

1.png

手动操作至少可以删除 Excel 工作簿中的零值,同时保持顺序(差、中、好)。我尝试用 NaN 替换 numpy 数组中的零,然后使用 add_series 添加它。当我想替换数据时,我收到以下错误:

{TypeError} 如果没有 ‘nan_inf_to_errors’ Workbook() 选项,write_number() 不支持 NAN/INF

我的代码片段如下:

chart_data = ChartData()
chart_data.categories = labels
chart = graphic_frame.chart

for index, row in df.iterrows():
    values = row.values
    values[values == 0] = np.nan
    chart_data.add_series(index, (values))

chart.replace_data(chart_data)

或者是否有其他方法可以更深入地深入 xml 代码来隐藏特定的零标签?


阅读 11

收藏
2025-01-11

共1个答案

小能豆

这对于聚集的条形图很有效。

您需要point在系列中查找值为 的特定点0,并将该点的data_label属性设置has_text_frameTrue

True将其设置为而不是似乎违反直觉False。事实是,此属性已设置为False,并且使用数据集中的值呈现数字的是 PowerPoint。通过将其设置为 True 并且不提供任何文本,它将保留为空。

接下来,您需要为每个系列设置show_valuesTrue这将告诉 PowerPoint 显示 的数值datapoint。您必须逐个系列地执行此操作。

最后一件事是为标签设置格式。由于在设置时标签已被移除并渲染show_values = True,因此格式会被重置,因此您需要重新设置。

以下是示例代码:

for series in chart.plots[0].series:
    for i, val in enumerate(series.values):
        if val == 0:
            series.points[i].data_label.has_text_frame = True
    series.data_labels.show_value = True
    series.data_labels.font.size = YOUR_FONT_SIZE
    series.data_labels.font.name = YOUR_FONT
    series.data_labels.font.color.rgb = YOUR_COLOR
    series.data_labels.number_format = YOUR_NUMBER_FORMAT

这是之前和之后的示例

这对于聚集的条形图很有效。

您需要point在系列中查找值为 的特定点0,并将该点的data_label属性设置has_text_frameTrue

True将其设置为而不是似乎违反直觉False。事实是,此属性已设置为False,并且使用数据集中的值呈现数字的是 PowerPoint。通过将其设置为 True 并且不提供任何文本,它将保留为空。

接下来,您需要为每个系列设置show_valuesTrue这将告诉 PowerPoint 显示 的数值datapoint。您必须逐个系列地执行此操作。

最后一件事是为标签设置格式。由于在设置时标签已被移除并渲染show_values = True,因此格式会被重置,因此您需要重新设置。

以下是示例代码:

for series in chart.plots[0].series:
    for i, val in enumerate(series.values):
        if val == 0:
            series.points[i].data_label.has_text_frame = True
    series.data_labels.show_value = True
    series.data_labels.font.size = YOUR_FONT_SIZE
    series.data_labels.font.name = YOUR_FONT
    series.data_labels.font.color.rgb = YOUR_COLOR
    series.data_labels.number_format = YOUR_NUMBER_FORMAT

这是之前和之后的示例

1.png

2.png

2025-01-11