установите равное количество y-тиков для каждого подзаголовка

#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 фактическое количество тиков отличается от ожидаемого, но, по крайней мере, вы можете поэкспериментировать с моим кодом, чтобы получить свои данные.