#python #matplotlib #plot
#python #matplotlib #график
Вопрос:
Я пытаюсь построить хороший график подзаголовка, но я не могу решить проблему с неравным количеством y-тиков. На изображении ниже, например, график «VVIX Beta» имеет только 3 тика, в то время как другие имеют от четырех до пяти. В идеале я хотел бы иметь пять y-тиков для каждого графика. Подобные вопросы уже задавались и предлагались:
ax1.locator_params(axis='y', nbins=5)
где ax1 — ax7 — это семь подзаголовков. Однако это не сработало, вывод, казалось, игнорировал команду. Кто-нибудь знает альтернативный подход? Любая помощь высоко ценится и заранее благодарна
Комментарии:
1. Почему вы не используете
plt.ylim()
? установить y-лимиты для каждого участка2. Я думаю, что это не помогло бы мне ограничить количество y-тиков, только установить ограничение для самого тика. Кроме того, я не вижу причин для ограничения оси, учитывая, что matplotlib довольно хорошо выбирает ограничения
Ответ №1:
Один из возможных вариантов — использовать MaxNLocator, передавая:
- nbins как количество тиков,
- min_n_ticks меньше на единицу из nbins.
Посмотрите на следующий пример:
import matplotlib.ticker as ticker
def draw(ax, nBins):
ax.plot(x, y, 'g', label='line one', linewidth=3)
ax.plot(x2, y2,'c', label='line two', linewidth=3)
ax.set_title('Epic Info')
ax.set_ylabel('Y axis')
ax.set_xlabel('X axis')
if nBins > 0:
ax.yaxis.set_major_locator(ticker.MaxNLocator(nbins=nBins, min_n_ticks=nBins-1))
else:
ax.yaxis.set_major_locator(ticker.MaxNLocator(nbins='auto'))
ax.legend()
ax.grid(True, color='k')
x = [ 5, 8,10]; y = [12.1,15.2, 6.3]
x2 = [ 6, 9,11]; y2 = [ 5.4,15.5, 7.6]
fig, axs = plt.subplots(2, 2, figsize=(10,7), constrained_layout=True)
fig.suptitle('Global title')
draw(axs.flat[0], 4)
draw(axs.flat[1], 5)
draw(axs.flat[2], 6)
draw(axs.flat[3], 0)
plt.show()
Как вы можете видеть, он генерирует 4 почти идентичных графика:
- 3 с явно определенным количеством тиков y,
- и последний с автоматической настройкой.
В результате получается:
Внимание: Для некоторых NBINS фактическое количество тиков отличается от ожидаемого, но, по крайней мере, вы можете поэкспериментировать с моим кодом, чтобы получить свои данные.