在Matplotlib中,颜色条是一个独立的坐标轴,可以指明图形中的颜色的含义。
我们在前面已经使用过颜色条,这里再专门介绍一下:
%matplotlib notebook import numpy as np import matplotlib.pyplot as plt x = np.linspace(0,10,1000) I = np.sin(x)* np.cos(x[:,np.newaxis]) I.shape plt.imshow(I) plt.colorbar()
我们得到了一个默认的蓝绿配色的图形。
实际上在plt.cm中有大量可选的颜色配置方案。具体使用哪种方案,要根据你的需求和你对美术的修养。一般情况下,你只需要关注三种类型的配色方案:
这些配色方案的名字很多都是缩写组合,一定要注意字母大小写。
jet是Matplotlib2.0之前的默认配色方案,已经比较老旧了。viridis是目前的默认配色方案。下面我们看看'RdBu'的配色:
plt.imshow(I, cmap='RdBu') plt.colorbar()
colorbar可以看作是plt.Axes的一个实例,因此前面关于坐标轴的格式配置技巧都可以使用,下面我们看一个噪点图像,注意其中的clim方法:
speckles = np.random.random(I.shape) < 0.01 # 制造bool噪点 I[speckles] = np.random.normal(0,3,np.count_nonzero(speckles)) # 生成噪点 plt.figure(figsize=(10,3.5)) plt.subplot(1,2,1) # 多子图模式 plt.imshow(I, cmap='RdBu') plt.colorbar() plt.subplot(1,2,2) plt.imshow(I, cmap='RdBu') plt.colorbar(extend='both') # 颜色条变成两端尖 plt.clim(-1,1) # 限制颜色显示范围
颜色条默认都是连续的,但有时候你可能也需要使用离散的颜色数据,最简单的方法就是使用plt.cm.get_cmap()
方法,将适当的颜色方案和需要的区间数量作为参数传递进去即可:
plt.imshow(I, cmap=plt.cm.get_cmap('Blues',6)) plt.colorbar() plt.clim(-1,1)