我尝试在matplotlib中使用imshow将数据绘制为热图,但有些值是NaN。我希望NaN被渲染为在色彩图中找不到的特殊颜色。
举例说明:
import numpy as np
import matplotlib.pyplot as plt
f = plt.figure()
ax = f.add_subplot(111)
a = np.arange(25).reshape((5,5)).astype(float)
a[3,:] = np.nan
ax.imshow(a, interpolation='nearest')
f.canvas.draw()
生成的图像出乎意料地全是蓝色(jet颜色图中最低的颜色)。然而,如果我这样绘制:
ax.imshow(a, interpolation='nearest', vmin=0, vmax=24)
--然后我得到了更好的东西,但是NaN值被绘制成与vmin相同的颜色.有没有一种优雅的方法可以让我将NaN设置为使用特殊颜色(例如:灰色或透明)绘制?
2条答案
按热度按时间z8dt9xmd1#
Hrm,看起来我可以使用一个掩码数组来做到这一点:
这应该足够了,虽然我仍然开放的建议。:)
z0qdvdin2#
在Matplotlib的新版本中,不再需要使用掩码数组。
例如,让我们生成一个数组,其中每个第7个值都是NaN:
在
matplotlib v3.7.0
中,.cm.get_cmap()
被.colormaps.get_cmap('viridis')
替换用
.set_bad
设置颜色。.cm.get_cmap()
已弃用我们可以修改当前的颜色Map表,并使用以下行绘制数组: