Python xticks w podplotach

84

Jeśli wykreślę pojedynczą imshowdziałkę, mogę użyć

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

aby zastąpić moje etykiety xtick.

Teraz kreślę 12 imshowdziałek za pomocą

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

Jak mogę zmienić zaznaczenia tylko dla jednego z tych wątków podrzędnych? Mam dostęp do osi wykresów podrzędnych tylko za pomocą axarr[i, j]. Jak mogę uzyskać dostęp plttylko do jednego określonego polplotu?

user2926577
źródło

Odpowiedzi:

164

Istnieją dwa sposoby:

  1. Użyj metod osi obiektu subplot (np. ax.set_xticksI ax.set_xticklabels) lub
  2. Służy plt.scado ustawiania aktualnych osi maszyny stanu pyplot (tj. pltInterfejsu).

Jako przykład (ilustruje to również użycie setpdo zmiany właściwości wszystkich działek podrzędnych):

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()

wprowadź opis obrazu tutaj

Joe Kington
źródło
Jakiej wersji używasz? Dostaję AttributeError: Unknown property xtickslabelszaplt.setp(ax, xtickslabels=xticks)
Frederick Nord
20

Zobacz (całkiem) niedawną odpowiedź w repozytorium matplotlib, w którym sugerowane jest następujące rozwiązanie:

  • Jeśli chcesz ustawić xticklabels:

    ax.set_xticks([1,4,5]) 
    ax.set_xticklabels([1,4,5], fontsize=12)
    
  • Jeśli chcesz tylko zwiększyć rozmiar czcionki xticklabels, używając domyślnych wartości i lokalizacji (co osobiście często potrzebuję i uważam za bardzo przydatne):

    ax.tick_params(axis="x", labelsize=12) 
    
  • Aby zrobić to wszystko na raz:

    plt.setp(ax.get_xticklabels(), fontsize=12, fontweight="bold", 
             horizontalalignment="left")`
    
Archie
źródło