我在等值线图旁边放置了一个颜色条。因为要绘制的数据是离散值而不是连续值,所以我使用了 LinearSegmentedColormap(使用scipy cookbook 中的配方),我用我的最大计数值 + 1 对其进行了初始化,以便显示颜色为 0。但是,我现在有两个问题:
刻度标签的间距不正确(5 个或多或少除外)——它们应该位于它们识别的颜色的中间;即 0 - 4 应该上移,6 - 10 应该下移。
如果我用 初始化颜色条
drawedges=True
,以便我可以设置其dividers
属性的样式,我会得到:
我正在创建我的颜色图和颜色条,如下所示:
cbmin, cbmax = min(counts), max(counts)
# this normalises the counts to a 0,1 interval
counts /= np.max(np.abs(counts), axis=0)
# density is a discrete number, so we have to use a discrete color ramp/bar
cm = cmap_discretize(plt.get_cmap('YlGnBu'), int(cbmax) + 1)
mappable = plt.cm.ScalarMappable(cmap=cm)
mappable.set_array(counts)
# set min and max values for the colour bar ticks
mappable.set_clim(cbmin, cbmax)
pc = PatchCollection(patches, match_original=True)
# impose our colour map onto the patch collection
pc.set_facecolor(cm(counts))
ax.add_collection(pc,)
cb = plt.colorbar(mappable, drawedges=True)
所以我想知道我将计数转换为 0,1 间隔是否是问题之一。
更新 :
尝试了 Hooked 的建议后,0 值是正确的,但随后的值会逐渐设置得更高,达到 9 应该是 10 的点:
这是我使用的代码:
cb = plt.colorbar(mappable)
labels = np.arange(0, int(cbmax) + 1, 1)
loc = labels + .5
cb.set_ticks(loc)
cb.set_ticklabels(labels)
只是为了确认,labels
肯定有正确的值:
In [3]: np.arange(0, int(cbmax) + 1, 1)
Out[3]: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])