3

对于由 python-pptx 生成的条形图,我使用以下代码为条形提供特定颜色。

chart.series[0].format.fill.solid()
chart.series[0].format.fill.fore_color.rgb = RGBColor(160,190,230)

大多数时候这看起来不错。但是,然后条形图有负值,条形图会出现几个问题。

  • 负条没有颜色并且是透明的
  • 条形与类别名称重叠

示例图像

我尝试了以下两个选项都没有效果。

chart.series[0].invert_if_negative = True
chart.series[0].invert_if_negative = False

有没有办法使图表正确呈现,颜色不与类别名称重叠?

4

3 回答 3

3

嗯,这是两个问题。但就类别名称重叠而言,您可以通过将刻度标签位置设置为 LOW 来解决此问题:

from pptx.enum.chart import XL_TICK_LABEL_POSITION

category_axis = chart.category_axis
category_axis.tick_label_position = XL_TICK_LABEL_POSITION.LOW

在透明(或者可能是白色)的彩色条上,我怀疑您可能会看到 PowerPoint 版本相关的不符合其他地方出现的规范的问题。我会在 PowerPoint 中打开它,看看您可以在属性对话框中看到什么,如果否定选项反转选项是否以您设置的方式出现,以及当您使用 PowerPoint UI 手动设置它时它是否运行。

如果在“数据系列”>“填充(格式)”对话框中未选中“如果为负则反转”复选框,当您使用并单击该复选框将其设置为 True 以解决显示问题时,您可以在GitHub 问题列表python-pptx中打开一个案例python-pptx我们将在下一个版本中修复。

基本上,某些版本的 PowerPoint 会根据元素 ( <c:invertIfNegative> in this case) 不一致地解释诸如此类的布尔元素类型,因此虽然它通过了测试,但它在所有 PowerPoint 版本中的行为并不符合预期。这可能就是你所看到的。

于 2017-05-28T09:30:49.827 回答
1

尝试深入研究 xml:

    ccaxis = chart.category_axis
    ticklblPos = ccaxis._element.find('{http://schemas.openxmlformats.org/drawingml/2006/chart}tickLblPos')
    ticklblPos.set('val','low')
于 2017-07-13T09:06:07.700 回答
0

替换fill.solid()fill.patterned()为我工作:

color_red = RGBColor(254, 98, 94)
color_green = RGBColor(1, 194, 170)

for idx, point in enumerate(series.points):
    fill = point.format.fill
    fill.patterned()
    if data[idx]<0 :
        fill.fore_color.rgb = color_red   
    else:
        fill.back_color.rgb = color_green
于 2018-09-20T09:27:22.033 回答