Colorbar ticklabels与刻度位置不匹配

时间:2015-01-15 13:01:37

标签: python matplotlib colorbar

我正在使用pyplot.pcolormesh绘制网格网格,我想自定义颜色条上的勾选标签。我设置了一个蜱位置列表,并提供了一个蜱标签列表,它应该与蜱位置相匹配,但我不知道提前实际包含哪个蜱,因为我不知道最大值和最小值。数据。问题是我提供的第一个ticklabel始终用于第一个可见的滴答,无论这是否是我列表中的第一个滴答。

工作示例:

import matplotlib.pyplot as plt  
import numpy as np

a = np.arange(1,10).reshape(3,3)
m = plt.pcolormesh(a)
c = plt.colorbar(m)
c.set_ticks(np.arange(11))
c.set_ticklabels(np.arange(11))
plt.savefig('mesh.png')

此代码生成下面的图像,这里的问题是最暗的蓝色标记为0,而该单元格中的值实际为1,同样所有其他标签都移动了1。

这是一个错误还是一个功能,如果它是一个功能,我怎样才能确保标签以优雅的方式匹配?我想我会对数据进行一些测试并试图弄清楚哪个刻度将是第一个可见的等等,但这似乎不是非常pythonic。

mesh

1 个答案:

答案 0 :(得分:3)

这是一项功能,因为您自己设置了ticklabels(标签错误)。最好总是尽量避免手动设置ticklabels,除非没有别的办法。

如果删除此行,标签将正确显示:

c.set_ticklabels(np.arange(11))

enter image description here

为了提高可读性,您还可以考虑对颜色进行标准化,使它们变得离散并匹配特定的整数值。但是,只有在颜色总量有限的情况下,这才有效,如本例所示。

fig, ax = plt.subplots()

cmap = plt.cm.jet

bounds = np.arange(0.5,10.5,1)
norm = mpl.colors.BoundaryNorm(bounds, cmap.N)

m = ax.pcolormesh(a, cmap=cmap, norm=norm)
c = plt.colorbar(m, ticks=bounds-0.5)

enter image description here