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

Python xticks в подзаголовках

Если я рисую один график imshow, я могу использовать

fig, ax = plt.subplots()
ax.imshow(data)
plt.xticks( [4, 14, 24],  [5, 15, 25] )

для замены ярлыков xtick.

Теперь я рисую 12 imshow графиков, используя

f, axarr = plt.subplots(4, 3)
axarr[i, j].imshow(data)

Как я могу изменить свои xticks только для одной из этих подзаговоров? Я могу получить доступ только к осям подзаголовков с помощью axarr[i, j]. Как я могу получить доступ к plt только для одного конкретного подзаголовка?

4b9b3361

Ответ 1

Существует два способа:

  • Используйте методы осей объекта subplot (например, ax.set_xticks и ax.set_xticklabels) или
  • Используйте plt.sca для установки текущих осей для конечного автомата (например, интерфейса plt).

В качестве примера (это также иллюстрирует использование setp для изменения свойств всех подзаговоров):

import matplotlib.pyplot as plt

fig, axes = plt.subplots(nrows=3, ncols=4)

# Set the ticks and ticklabels for all axes
plt.setp(axes, xticks=[0.1, 0.5, 0.9], xticklabels=['a', 'b', 'c'],
        yticks=[1, 2, 3])

# Use the pyplot interface to change just one subplot...
plt.sca(axes[1, 1])
plt.xticks(range(3), ['A', 'Big', 'Cat'], color='red')

fig.tight_layout()
plt.show()

enter image description here

Ответ 2

Смотрите (довольно) недавний ответ на репозиторий matplotlib, в котором предлагается следующее решение:

  • Если вы хотите установить xticklabels:

    ax.set_xticks([1,4,5]) 
    ax.set_xticklabels([1,4,5], fontsize=12)
    
  • Если вы хотите только увеличить размер шрифта xticklabels, используя значения по умолчанию и местоположения (это то, что мне лично часто нужно и очень удобно):

    ax.tick_params(axis="x", labelsize=12) 
    
  • Чтобы сделать все это сразу:

    plt.setp(ax.get_xticklabels(), fontsize=12, fontweight="bold", 
             horizontalalignment="left")'
    

Ответ 3

Похоже, что в более поздней версии Matplotlib функции set_yticks и set_xticks удалены. Что я сделал, вместо того, чтобы установить размер x, y тиков, я просто изменил размер фигуры.

plt.figure(1, dpi=200, figsize=(20,20))

Я знаю, что это немного антиинтуитивно, но это то, что сработало для меня... Дайте мне знать, если есть лучшие методы для решения этой проблемы в более поздних версиях Matplotlib. Спасибо