在matplotlib colorbar中隐藏每个第n个刻度标签最干净的方法?

时间:2013-12-02 20:57:03

标签: python matplotlib

我的水平颜色条上的标签太靠近了,我不想进一步减小文字大小:

cbar = plt.colorbar(shrink=0.8, orientation='horizontal', extend='both', pad=0.02)
cbar.ax.tick_params(labelsize=8)

horizontal colorbar with bad labels

我想保留所有刻度,但删除所有其他标签。

我发现的大多数示例都会将用户指定的字符串列表传递给cbar.set_ticklabels()。我正在寻找一般的解决方案。

我玩了各种各样的

cbar.set_ticklabels(cbar.get_ticklabels()[::2])

cbar.ax.xaxis.set_major_locator(matplotlib.ticker.MaxNLocator(nbins=4))

但我还没有找到神奇的组合。

我知道必须有一个干净的方法来使用定位器对象。

4 个答案:

答案 0 :(得分:41)

循环勾选标签,然后拨打set_visible()

for label in cbar.ax.xaxis.get_ticklabels()[::2]:
    label.set_visible(False)

答案 1 :(得分:6)

对于那些参与其中的人来说是单行的!

n = 7  # Keeps every 7th label
[l.set_visible(False) for (i,l) in enumerate(ax.xaxis.get_ticklabels()) if i % n != 0]

答案 2 :(得分:5)

刚刚遇到这个帖子,很好的答案。 我正在寻找一种方法来隐藏第n个刻度之间的每个刻度。并找到了枚举函数。因此,如果其他人正在寻找类似的东西,你可以这样做。

SogetistDetailsViewModel

答案 3 :(得分:0)

我使用以下代码显示每个第7个x标签:

plt.scatter(x, y)
ax = plt.gca()
temp = ax.xaxis.get_ticklabels()
temp = list(set(temp) - set(temp[::7]))
for label in temp:
    label.set_visible(False)
plt.show()

它非常灵活,因为您可以执行任何所需的操作,而不是plt.scatter。希望对您有所帮助。