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

Dav*_*ean 35 python matplotlib

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

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

带有坏标签的水平颜色条

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

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

我玩弄各种变化

cbar.set_ticklabels(cbar.get_ticklabels()[::2])
Run Code Online (Sandbox Code Playgroud)

和

cbar.ax.xaxis.set_major_locator(matplotlib.ticker.MaxNLocator(nbins=4))
Run Code Online (Sandbox Code Playgroud)

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

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

HYR*_*YRY 47

对于循环标记,并调用set_visible():

for label in cbar.ax.xaxis.get_ticklabels()[::2]:
    label.set_visible(False)
Run Code Online (Sandbox Code Playgroud)

  • 就像执行完全相同的事情的另一种方式:你可以做`plt.setp(cbar.ax.get_xticklabels()[:: 2],visible = False)`.当然,这是相同的,但至少知道`setp`是很方便的.然后,for循环更清晰,立即可读,而`setp`不清楚,除非你熟悉matplotlib. (4认同)
  • 如果您的颜色栏垂直定向,则需要使用`cbar.ax.yaxis.get_ticklabels()`代替 (3认同)
  • 另外,您当然可以使用`get_xticklabels()[1 :: 2]`隐藏其他标签。如果轴的起点与刻度线不一致,但是您仍然希望保持第一个(可见)刻度线可见,则通常这是必需的。 (2认同)

mal*_*lla 6

对于那些进入那个人的单线程!

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

  • 极好的!这比评分更高的答案更好,因为它更灵活。超过每一个标签都可以被隐藏。 (2认同)

小智 5

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

for index, label in enumerate(ax.xaxis.get_ticklabels()):
    if index % n != 0:
        label.set_visible(False)
Run Code Online (Sandbox Code Playgroud)


小智 5

我使用以下内容显示每 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()
Run Code Online (Sandbox Code Playgroud)

它非常灵活,因为你可以做任何你想做的事情,而不是 plt.scatter。希望能帮助到你。