You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

matplotlib中如何设置保存图片时绘图面背景为非透明

问题描述

绘图示例
使用matplotlib绘图时,保存输出的图片中x轴、y轴标签后方的绘图面存在透明效果,未找到对应的正确设置方法。
当前使用的代码如下:

plt.rcParams.update({'font.size': 40})
plt.plot(f_hours_BEST,BEST_data, marker = hurricane_svg, markersize=50, color = 'r', label='BEST')
plt.plot(f_hours_OFCL,OFCL_data, marker = hurricane_svg, markersize=50, label = 'OFCL')
plt.boxplot(Vlist, widths=5, positions = f_hours_EPS)
plt.title("EPS Ensemble Intensity vs BEST and OFCL forecast AL31 2020-11-14 12z")
plt.xlabel("Forecast Hour")
plt.ylabel("Intensity (kts)")
plt.legend()

plt.savefig('EPS.png')
解决方案

透明问题由两类配置缺失导致:一是没有显式指定坐标轴绘图区的背景色,部分渲染后端下会默认带alpha通道;二是保存图片时未显式关闭透明参数,输出时会保留透明区域。
直接做两处修改即可解决:

  • 显式设置当前坐标轴的绘图面为不透明实色
  • 保存图片时显式关闭透明通道,指定画布背景色

修改后的完整可运行代码:

plt.rcParams.update({'font.size': 40})
plt.plot(f_hours_BEST,BEST_data, marker = hurricane_svg, markersize=50, color = 'r', label='BEST')
plt.plot(f_hours_OFCL,OFCL_data, marker = hurricane_svg, markersize=50, label = 'OFCL')
plt.boxplot(Vlist, widths=5, positions = f_hours_EPS)
plt.title("EPS Ensemble Intensity vs BEST and OFCL forecast AL31 2020-11-14 12z")
plt.xlabel("Forecast Hour")
plt.ylabel("Intensity (kts)")
plt.legend()

# 设置坐标轴绘图区域为不透明白色
plt.gca().set_facecolor('white')
# 修改保存参数,显式关闭透明,指定画布背景为白色
plt.savefig('EPS.png', transparent=False, facecolor='white')

如果需要全局生效,无需每次绘图都重复添加设置,可以直接把相关配置写入rcParams初始化部分:

plt.rcParams.update({
    'font.size': 40,
    'axes.facecolor': 'white',
    'savefig.transparent': False,
    'savefig.facecolor': 'white'
})

若需要使用其他颜色作为背景,将上述代码中的white替换为目标颜色值即可,支持matplotlib内置颜色名、十六进制色值、RGB元组三种格式,不会影响折线、箱线图、标注等其他元素的显示效果。

内容的提问来源于stack exchange,提问作者SlushP22

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 09:57:17