Самый простой способ скрыть каждую метку nth в цветовой панели matplotlib?

Метки на моей горизонтальной цветовой панели расположены слишком близко друг к другу, и я не хочу уменьшать размер текста дальше:

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))

но я не нашел волшебную комбинацию.

Я знаю, что должен быть чистый способ сделать это, используя объект локатора.

5 ответов

Решение

За кругом щёлкни, и позвони set_visible():

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

Один вкладыш для тех, кто в это!

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

Просто наткнулся на эту ветку, хорошие ответы. Я искал способ скрыть каждый тик между n-ными тиками. И нашел функцию перечисления. Так что, если кто-то ищет что-то подобное, вы можете сделать это следующим образом.

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

Я использую следующее, чтобы показать каждую 7-ю метку:

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. Надеюсь, это поможет.

Для некоторых (в основном новичков), которые не знакомы или не знакомы с объектно-ориентированным подходом для matplotlib, вот способ скрыть каждую вторую метку без использования топора:

              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)
        
Другие вопросы по тегам