在matplotlib颜色条中隐藏每个第n个刻度标签的最干净的方法是什么?

chy5wohz  于 2022-11-30  发布在  其他
关注(0)|答案(5)|浏览(127)

水平颜色条上的标签靠得太近,我不想进一步缩小文本大小:

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

我想保留所有刻度,但删除其他所有标签。
我发现的大多数示例都将用户指定的字符串列表传递给cbar.set_ticklabels()。
我用了一些

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

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

但我还没找到那个神奇的组合。
我知道一定有一个干净的方法来做到这一点使用定位器对象。

bkhjykvo

bkhjykvo1#

For循环ticklabel,并调用set_visible()

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

wyyhbhjk2#

一句俏皮话给那些喜欢的人!

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

anauzrmj3#

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

for index, label in enumerate(ax.xaxis.get_ticklabels()):
    if index % n != 0:
        label.set_visible(False)
f1tvaqid

f1tvaqid4#

我用下面的方法来显示每隔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。希望它能有所帮助。

nkhmeac6

nkhmeac65#

对于一些不熟悉matplotlib面向对象方法的人(大多数是初学者),这里有一种方法可以隐藏每两个标签,而不需要使用ax:

plt.plot(Allx,y)
   
        labels = []
        for i in range(len(Allx)): 
            if i % 2 == 0: 
                labels.append(Allx[i])
            else: 
                labels.append("")

         plt.xticks(ticks=Allx,labels=labels)

相关问题