如何在python-pptx的XL_CHART_TYPE.LINE_MARKERS中修改标记边框颜色
问题:修改PPT折线图标记的边框颜色
我想要创建带有标记的折线图,其中每条折线都有自定义标记。我可以修改线条颜色和标记样式,但尝试更新标记颜色时,只能修改内部填充色,无法修改边框。我找不到任何关于标记边框的相关资料,请问是我遗漏了什么方法还是这是一个bug?
最小示例代码:
from pptx import Presentation from pptx.util import Cm, Pt from pptx.enum.chart import XL_CHART_TYPE, XL_MARKER_STYLE from pptx.dml.color import RGBColor from pptx.chart.data import ChartData root = Presentation() # 创建幻灯片布局 first_slide_layout = root.slide_layouts[0] slide = root.slides.add_slide(first_slide_layout) # 创建图表数据 chart_data = ChartData() # X轴标签 chart_data.categories = ['2023','24','25','2026'] series = {'Planned':[0,10,20,30], 'Forecasted':[10,50,5,20]} # 循环添加数据系列 for s in series: chart_data.add_series(s, series[s]) # 添加图表到幻灯片 chart = slide.shapes.add_chart(XL_CHART_TYPE.LINE_MARKERS, Cm(5), Cm(5), Cm(20), Cm(10), chart_data).chart # 格式化线条和标记 plot = chart.plots[0] for i,s in enumerate(plot.series): line = s.format.line if i == 0: # 设置折线颜色 line.color.rgb = RGBColor(0,0,0) # 设置标记样式和填充色 s.marker.style = XL_MARKER_STYLE.CIRCLE fill = s.marker.format.fill fill.solid() fill.fore_color.rgb = RGBColor(0,0,0) if i == 1: # 设置折线颜色 line.color.rgb = RGBColor(125,125,125) # 设置标记样式、大小和填充色 s.marker.style = XL_MARKER_STYLE.DIAMOND s.marker.size = 12 fill = s.marker.format.fill fill.solid() fill.fore_color.rgb = RGBColor(125,125,125) root.save(r'C:\Users\XX\Desktop\PPTX_example.pptx')
解决方案
在python-pptx中,标记的边框样式(包括颜色)是通过marker.format.line属性控制的,和设置折线本身的线条颜色逻辑一致。你之前仅配置了标记的填充色,未对边框线条做设置,因此无法修改边框颜色。
修改后的代码示例(关键改动已标注):
from pptx import Presentation from pptx.util import Cm, Pt from pptx.enum.chart import XL_CHART_TYPE, XL_MARKER_STYLE from pptx.dml.color import RGBColor from pptx.chart.data import ChartData root = Presentation() first_slide_layout = root.slide_layouts[0] slide = root.slides.add_slide(first_slide_layout) chart_data = ChartData() chart_data.categories = ['2023','24','25','2026'] series = {'Planned':[0,10,20,30], 'Forecasted':[10,50,5,20]} for s in series: chart_data.add_series(s, series[s]) chart = slide.shapes.add_chart(XL_CHART_TYPE.LINE_MARKERS, Cm(5), Cm(5), Cm(20), Cm(10), chart_data).chart plot = chart.plots[0] for i,s in enumerate(plot.series): line = s.format.line if i == 0: line.color.rgb = RGBColor(0,0,0) s.marker.style = XL_MARKER_STYLE.CIRCLE # 设置标记填充色 fill = s.marker.format.fill fill.solid() fill.fore_color.rgb = RGBColor(0,0,0) # --- 新增:设置标记边框颜色 --- marker_line = s.marker.format.line marker_line.color.rgb = RGBColor(0,0,0) if i == 1: line.color.rgb = RGBColor(125,125,125) s.marker.style = XL_MARKER_STYLE.DIAMOND s.marker.size = 12 # 设置标记填充色 fill = s.marker.format.fill fill.solid() fill.fore_color.rgb = RGBColor(125,125,125) # --- 新增:设置标记边框颜色 --- marker_line = s.marker.format.line marker_line.color.rgb = RGBColor(125,125,125) root.save(r'C:\Users\XX\Desktop\PPTX_example.pptx')
如果需要调整边框粗细,可额外添加marker_line.width = Pt(2)(数值为磅值)来设置。
内容的提问来源于stack exchange,提问作者Daniel van den Corput
相关产品推荐
相关产品推荐

