我使用以下代码段创建自定义颜色栏:
import pylab as pl
import numpy as np
a = np.array([[0,10000,100000,400000,500000]])
pl.figure(figsize=(9, 1.5))
mycmap = colors.ListedColormap(['yellow','orange','red','darkred'])
img = pl.imshow(a, cmap=mycmap)
pl.gca().set_visible(False)
cax = pl.axes([0.1, 0.2, 0.8, 0.6])
cbar=pl.colorbar(orientation='horizontal', cax=cax,spacing='proportional');
cbar.set_ticks([0,10000,100000,400000,500000])
cbar.set_ticklabels(['0','10000','100000','400000','500000'])
这给了我一个定期间隔的颜色栏,虽然我指定了spacing='proportional'
:
预期的结果是:
0-10000: yellow
10001-100000: orange
100001-400000: red
400001-500000: dark red
我做错了什么?
答案 0 :(得分:1)
可以看出,当不将轴转动为不可见时,颜色条正确表示图像中数据的颜色。
如果这不是您想要的,您应首先确定数据在图像中的表示方式。将数据标准化引入色彩映射范围通常是实现此目的的方式。这里BoundaryNorm
是有意义的。
import matplotlib.pyplot as plt
import matplotlib.colors
import numpy as np
a = np.array([[0,10000,100000,400000,500000]])
plt.figure(figsize=(4, 2.5))
mycmap = matplotlib.colors.ListedColormap(['yellow','orange','red','darkred'])
norm = matplotlib.colors.BoundaryNorm(a[0], len(a[0])-1)
img = plt.imshow(a, cmap=mycmap, norm=norm)
cax = plt.axes([0.1, 0.1, 0.8, 0.1])
cbar=plt.colorbar(orientation='horizontal', cax=cax,spacing='proportional');
plt.show()
这现在提供了一个有意义的表示,在颜色范围的边缘有刻度。