如何在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
相关产品推荐
相关产品推荐

