如何用openpyxl设置Chart_area图形属性:改背景色与去边框
解决openpyxl中图表绘图区背景色设置与边框移除问题
我完全懂你现在的困扰——用openpyxl设置BarChart、AreaChart这些图表的绘图区背景色,还有移除边框,试了网上的方案、换了2.4.7和2.4.9版本都没效果,还要改库文件的话也太麻烦了。下面给你几个不用改库就能实现的可行方法:
1. 正确设置绘图区背景色
你之前尝试的chart.plot_area.graphicalProperties = props方向是对的,但在openpyxl 2.4.x版本中,需要确保样式设置的时机和层级正确。试试把背景色设置放在添加数据之后、将图表插入工作表之前,并且明确指定绘图区的属性:
# 导入需要的类 from openpyxl.chart import LineChart, Reference from openpyxl.chart.graphical import GraphicalProperties, LineProperties # 初始化图表 chart = LineChart() # 添加数据和分类(你的原有代码) list_names = ['Fund', 'Market', 'Benchmark'] data = Reference(ws2, min_col=2, min_row=1, max_col=n + 1, max_row=p + 1) chart.x_axis.number_format = 'mmm yy' chart.x_axis.majorTimeUnit = "months" chart.add_data(data, titles_from_data=True) dates = Reference(ws2, min_col=1, min_row=2, max_col=1, max_row=1 + p) chart.set_categories(dates) # 设置系列线条颜色(你的原有代码) chart.series[0].graphicalProperties.line.solidFill = "7E3F00" chart.series[1].graphicalProperties.line.solidFill = "45788C" chart.series[2].graphicalProperties.line.solidFill = "8BADD9" # 设置绘图区背景色(关键修改) plot_props = GraphicalProperties(solidFill="f2f2f2") chart.plot_area.graphical_properties = plot_props
2. 移除图表边框(整体+绘图区)
你之前只设置了图表整体的graphical_properties,但在旧版本中,绘图区的边框是独立的,需要单独设置。同时确保边框的noFill属性正确生效:
# 移除图表整体边框 chart.graphical_properties = GraphicalProperties(ln=LineProperties(noFill=True)) # 移除绘图区边框 chart.plot_area.graphical_properties.ln = LineProperties(noFill=True)
额外建议:升级openpyxl版本
openpyxl 2.4.x是比较老旧的版本,对图表样式的支持有不少局限性。如果可以的话,升级到3.x版本(比如3.1.2),新版本对图表样式的API做了很多优化,很多旧版本的问题都会自动解决,代码也会更简洁。
最后把图表插入工作表:
ws1.add_chart(chart, "B14")
内容的提问来源于stack exchange,提问作者Gilles Criton




