matplotlib și proprietățile subploturilor (Programare, Python, Matplotlib)

vandelay a intrebat.

Adaug o figură matplotlib la un canvas pentru a o putea integra cu pyqt în aplicația mea. M-am uitat în jur și am folosit plt.add_subplot(111) pare a fi calea de urmat(?) Dar nu pot adăuga proprietăți la subplot, așa cum aș putea face cu un grafic „obișnuit”

Configurarea figurii

self.figure1 = plt.figure()
self.canvas1 = FigureCanvas(self.figure1)
self.graphtoolbar1 = NavigationToolbar(self.canvas1, frameGraph1)

hboxlayout = qt.QVBoxLayout()

hboxlayout.addWidget(self.graphtoolbar1)
hboxlayout.addWidget(self.canvas1)

frameGraph1.setLayout(hboxlayout)

crearea unui subplot și adăugarea de date

df = self.quandl.getData(startDate, endDate, company)

ax = self.figure1.add_subplot(111)
ax.hold(False)
ax.plot(df['Close'], 'b-')
ax.legend(loc=0)
ax.grid(True)

Aș dori să setez etichete x și y, dar dacă fac acest lucru ax.xlabel("Test")

AttributeError: 'AxesSubplot' object has no attribute 'ylabel'

ceea ce este posibil dacă am făcut-o fără să folosesc subplot

plt.figure(figsize=(7, 4))
plt.plot(df['Close'], 'k-')
plt.grid(True)
plt.legend(loc=0)
plt.xlabel('value')
plt.ylabel('frequency')
plt.title('Histogram')
locs, labels = plt.xticks()
plt.setp(labels, rotation=25)
plt.show()

Deci, cred că întrebarea mea este dacă nu este posibil să modific subploturile mai departe? Sau este posibil să trasez grafice într-un canvas pyqt, fără a utiliza subplot-uri, astfel încât să pot beneficia de mai multe proprietăți pentru graficele mele.

1 răspunsuri
Suever

plt.subplot returnează un obiect subplot care este un tip de obiect axă. Acesta are două metode pentru adăugarea de etichete de axe: set_xlabel și set_ylabel:

ax = plt.subplot('111')
ax.set_xlabel('X Axis')
ax.set_ylabel('Y Axis')

De asemenea, puteți apela plt.xlabel și plt.ylabel (așa cum ați făcut înainte) și să specificați axele pe care doriți să se aplice eticheta.

ax = plt.subplot('111')
plt.xlabel('X Axis', axes=ax)
plt.ylabel('Y Axis', axes=ax)

Deoarece aveți doar o singură axă, puteți omite, de asemenea, opțiunea axes kwarg, deoarece eticheta va fi aplicată automat axelor curente dacă nu se specifică una.

ax = plt.subplot('111')
plt.xlabel('X Axis')
plt.ylabel('Y Axis')

Comentarii

  • Asta a rezolvat problema, mulțumesc! Este posibil să rotiți etichetele x ? –  > Por vandelay.
  • @vandelay Sigur, puteți utiliza funcția rotation kwarg: plt.xlabel('X Axis', rotation=30) –  > Por Suever.
  • Eu mă gândeam mai mult la subplot-uri :), ca și la ax. Mulțumesc pentru răspuns. –  > Por vandelay.
  • @vandelay vrei să rotești complotul în sine? Puteți, de asemenea, să faceți doar label = ax.set_xlabel('X Axis') și apoi label.set_rotation(30) –  > Por Suever.
  • @vandelay Oh, acestea sunt etichete de bifare. a se vedea aici –  > Por Suever.