Matplotlib colorbar:如何手动设置间隔?

时间:2017-12-12 14:24:54

标签: python matplotlib colorbar

我使用以下代码段创建自定义颜色栏:

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'enter image description here

预期的结果是:

0-10000: yellow
10001-100000: orange
100001-400000: red
400001-500000: dark red

我做错了什么?

1 个答案:

答案 0 :(得分:1)

可以看出,当不将轴转动为不可见时,颜色条正确表示图像中数据的颜色。

enter image description here

如果这不是您想要的,您应首先确定数据在图像中的表示方式。将数据标准化引入色彩映射范围通常是实现此目的的方式。这里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()

这现在提供了一个有意义的表示,在颜色范围的边缘有刻度。

enter image description here