如何在matplotlib 3.1.2中设置保存图表的axes背景色(保持fig白色)
在Matplotlib 3.1.2中单独设置Axes背景色、保留Figure白色背景的正确姿势
问题根源
在Matplotlib 3.1.2里,Figure(画布)和Axes(绘图区域)的背景色是分开控制的,而且保存图片时的参数很容易被忽略——这就是你三种方法都没达到预期的核心原因。
你踩的坑逐一拆解
方法1:同时改了画布和绘图区背景
你说方法1把两者都改成天蓝色,大概率是代码里同时给Figure和Axes设了同一种颜色,比如:
plt.figure(facecolor='skyblue') # 这里改了画布背景 plt.gca().set_facecolor('skyblue') # 又改了绘图区
或者用了带全局背景色的样式(比如seaborn-darkgrid),直接覆盖了局部设置。
方法2、3没效果的常见原因
只改了Axes背景,但保存时没保留
Matplotlib 3.1.2默认保存图片时会忽略背景色设置,如果你只写了ax.set_facecolor('skyblue'),然后直接plt.savefig(),保存后的图片会自动把背景设回白色,等于白改。改错了对象
比如误把fig.patch.set_facecolor()当成了Axes的设置,或者反过来——改了画布背景但没碰绘图区,自然看不到变化。
适配3.1.2的正确代码
直接用下面的代码就能实现需求:
import matplotlib.pyplot as plt # 创建画布时显式设为白色 fig, ax = plt.subplots(figsize=(8, 5), facecolor='white') # 单独设置绘图区背景为天蓝色 ax.set_facecolor('skyblue') # 随便画点示例内容 ax.plot([1,2,3], [4,5,1]) ax.set_title('绘图区蓝,画布白') # 重点:保存时必须传入facecolor参数,不然背景色会被覆盖 plt.savefig('final_plot.png', facecolor=fig.get_facecolor(), edgecolor='none') plt.close()
关键提醒
- 别搞混对象:
fig管画布,ax管绘图区,各自的set_facecolor()要分开用。 - 保存参数不能省:
plt.savefig()里的facecolor=fig.get_facecolor()是3.1.2版本里必须加的,不然之前的背景设置全白费。 - 别乱加全局样式:如果用了
plt.style.use(),先确认样式里有没有覆盖背景色的设置,有的话要显式用局部设置覆盖。
内容的提问来源于stack exchange,提问作者rdv
相关产品推荐
相关产品推荐

