Самый простой способ скрыть каждую метку 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)