m=10
n=40
z=np.random.uniform(0,1,(m,n))
plt.imshow(z,cmap='Greys')
plt.colorbar()
我希望每隔一列都为红色,其他列为蓝色,我该怎么做?
我已经尝试过,但是给出了错误
for i in range(n):
if (np.mod(i,2)==1):
plt.imshow(z[:,i],cmap='Blues')
else :
plt.imshow(z[:,i],cmap='Reds')
ERROR: Invalid shape (10,) for image data
但是,向图中添加颜色条并不完全有意义,但是...
我们绘制数组的两倍,每次用np.nan
替换某些列,这行得通,因为Matplotlib在遇到NaN时通常不会在图表上放墨水。
In [40]: m=8
...: n=16
...: z=np.random.uniform(0,1,(m,n))
...: for i, cm in zip((0, 1), ('Blues', 'Reds')):
...: x = np.copy(z)
...: x[:,range(i, n, 2)] = np.nan
...: plt.imshow(x, cmap=cm)
...: plt.colorbar()
上面可以概括为n_cm
不同的颜色图
def multi_imshow(image, cm_list, ax=None, **kwd):
nrows, ncols = image.shape
n_cm = len(cm_list)
for i, cm in enumerate(cm_list):
cols = range(i, ncols, n_cm)
x = np.full(image.shape, np.nan)
x[:,cols] = image[:,cols]
if ax:
ax.imshow( x, cmap=cm, **kwd)
else:
plt.imshow(x, cmap=cm, **kwd)
image = np.arange(16*21, dtype=float).reshape(16,21)
multi_imshow(image, ('Reds_r', 'Blues_r', 'Blues'))