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

84

Если я построю один 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только к одному конкретному участку?

user2926577
источник

Ответы:

164

Есть два способа:

  1. Используйте методы осей объекта подзаголовка (например, ax.set_xticksи ax.set_xticklabels) или
  2. Используется plt.scaдля установки текущих осей для конечного автомата pyplot (т.е. 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()

введите описание изображения здесь

Джо Кингтон
источник
Какую версию ты используешь? Я получаю AttributeError: Unknown property xtickslabelsзаplt.setp(ax, xtickslabels=xticks)
Фредерик Норд
20

См. (Совсем) недавний ответ в репозитории 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")`
    
Арчи
источник