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

如何在Matplotlib的contourplot中仅修改NaN值对应区域的颜色

修改contourplot中NaN值对应区域的颜色

我正基于pandas DataFrame(示例中记为df)绘制等高线图,图中部分区域为无需展示的数值,对应DataFrame中的NaN值。当前NaN值对应的区域默认显示为白色,我希望将该区域修改为其他颜色(例如黑色),请问该如何实现?
我的原始实现代码如下:

plt.figure(1, figsize=(12, 12), dpi=600)
# 绘制等高线
contours = plt.contour(df.columns,df.index, df, 8, colors = 'black')                                          
# 为等高线添加标签
contours.collections[0].set_label(parameter[choice]+ ' [%]')                                
plt.clabel(contours, inline=True, fmt='%1.1f' , fontsize=fontsize1)                                           
# 绘制色图
colormap = plt.contourf(df.columns,df.index, df, 800, cmap='RdYlGn', alpha=0.5)
# 绘制蓝色工作点
plt.plot(FU, V, 'bo', markersize=markersize, label='Nominal operation')     

# 其他图表布局配置
min_tick = df.to_numpy().min()
max_tick = df.to_numpy().max()
ticks = [np.linspace(min_tick, max_tick,3)]
cb = plt.colorbar(ticks = ticks)
cb.ax.tick_params(labelsize = fontsize1)
plt.xlabel('FU [-]', fontsize = fontsize2)
plt.ylabel('V [V]', fontsize = fontsize2)
plt.tick_params(axis='both', which='major', labelsize=fontsize1)
plt.grid(color = 'gray', linestyle=(0, (5, 10)), linewidth=1)
plt.legend(fontsize=fontsize2, loc = 'upper center')
plt.show
plt.savefig("contourplot " + parameter[choice] + " (V and FU)" +".png")

我之前查到的简易方案是修改画布背景色,让等高线图绘制在背景层之上,但由于我使用的色图带透明度,该方案无法达到预期效果。请问是否有方法可以仅为NaN值对应的区域设置颜色?我也可以接受将NaN值替换为字符串等类型,再对DataFrame中对应值的等高线区域单独染色的方案。


最终可行实现

经过测试,以下代码可以完美实现需求:

# 先绘制一层全白的等高线填充,覆盖所有有效数值区域
plt.contourf(df.columns,df.index, df, 800, colors = 'white')  
# 将坐标轴背景色设置为NaN区域想要的颜色(此处为黑色)
plt.gca().set_facecolor("black")  
# 再绘制带透明度的目标色图
colormap = plt.contourf(df.columns,df.index, df, 800, cmap='RdYlGn', alpha=0.5)

该方案的逻辑是先用纯白色填充所有有效数值的区域,再把背景色设置为NaN区域想要的颜色,最后绘制带透明度的色图时,有效区域的底色是白色,不会和背景色混合,仅NaN区域会露出设置的背景色,完美避开了透明色和背景色混合的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:45:03