【问题标题】:Matplotlib colorbar: how to manually set the intervals?Matplotlib colorbar:如何手动设置间隔?
【发布时间】:2017-12-12 14:24:54
【问题描述】:

我正在使用以下 sn-p 来创建自定义颜色条:

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

我做错了什么?

【问题讨论】:

  • 你想在有色的地方设置刻度标签还是让颜色代表给定的值?

标签: python matplotlib colorbar


【解决方案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()

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

【讨论】:

    猜你喜欢
    • 2020-06-04
    • 1970-01-01
    • 2016-05-04
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多