Подтвердить что ты не робот

Самый чистый способ скрыть каждую метку n-го тика в matplotlib colorbar?

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

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

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

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

4b9b3361

Ответ 1

Зациклируйте метки метки и вызовите set_visible():

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

Ответ 2

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

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

Ответ 3

Однострочный для тех, кто в это!

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

Ответ 4

Я использую следующее, чтобы показать каждый 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()