2013-04-07 4 views
110

Ich möchte die X- und Y-Achse in Matplotlib beschränken, aber für einen bestimmten Subplot. Wie ich sehen kann Subplot Figur selbst keine Achseneigenschaft hat. Ich möchte zum Beispiel nur die Grenzen für die zweite Handlung ändern!Wie man xlim und ylim für einen Subplot in Matplotlib einstellt

import matplotlib.pyplot as plt 
fig=plt.subplot(131) 
plt.scatter([1,2],[3,4]) 
fig=plt.subplot(132) 
plt.scatter([10,20],[30,40]) 
fig=plt.subplot(133) 
plt.scatter([15,23],[35,43]) 
plt.show() 
+0

, wie Sie die Handlungsstränge zu machen sind? Bitte zeigen Sie uns, was Sie tun. – tacaswell

+0

Ist das mehr als eine Möglichkeit? – Cupitor

+0

Ihre Frage war nicht klar, ich kann daran denken, 4 oder 5 Möglichkeiten, etwas so einfach mit Sub-Plots einzurichten. – tacaswell

Antwort

151

Sie sollten ein wenig von der OO-Schnittstelle zu Matplotlib lernen, nicht nur die Zustandsmaschine Schnittstelle. Fast alle der plt.* Funktion sind dünne Wrapper, die im Grunde gca().* tun.

plt.subplot gibt ein Objekt axes zurück. Wenn Sie einen Verweis auf die Achsen Objekt, das Sie direkt mit ihm zeichnen können, seine Grenzen ändern, usw.

import matplotlib.pyplot as plt 

ax1 = plt.subplot(131) 
ax1.scatter([1, 2], [3, 4]) 
ax1.set_xlim([0, 5]) 
ax1.set_ylim([0, 5]) 


ax2 = plt.subplot(132) 
ax2.scatter([1, 2],[3, 4]) 
ax2.set_xlim([0, 5]) 
ax2.set_ylim([0, 5]) 

und so weiter für so viele Achsen, wie Sie wollen.

oder besser, wickeln sie alle in einer Schleife nach oben:

import matplotlib.pyplot as plt 

DATA_x = ([1, 2], 
      [2, 3], 
      [3, 4]) 

DATA_y = DATA_x[::-1] 

XLIMS = [[0, 10]] * 3 
YLIMS = [[0, 10]] * 3 

for j, (x, y, xlim, ylim) in enumerate(zip(DATA_x, DATA_y, XLIMS, YLIMS)): 
    ax = plt.subplot(1, 3, j + 1) 
    ax.scatter(x, y) 
    ax.set_xlim(xlim) 
    ax.set_ylim(ylim) 
+1

Problem mit dem Behalten der Achseninstanz ist, dass es nicht alle Eigenschaften hat, die plt hat, zum Beispiel kann man axis.ylim() nicht verwenden, um den Ylim des Diagramms auf einer Achse zu erhalten. – dashesy

+5

@dashesy Sie verwenden 'set_xlim' und' set_ylim'. 'plt' hat viele _fewer_ Optionen, als direkt mit dem Achsenobjekt zu arbeiten. Tatsächlich ist fast jede Funktion in "plt" ein sehr dünner Wrapper, der zuerst 'ax = plt.gca()' aufruft und dann jede Funktion dieses Objekts aufruft. Sie sollten "plt" nicht für etwas anderes als interaktive Arbeit verwenden. – tacaswell

+1

Ja, ich stimme zu, es ist vorzuziehen, nicht auf die interaktive Version zu setzen, aber es gibt keine Möglichkeit, den Ylim eines Grundstücks mit nur einer Achse zu erhalten. Nachdem ein Plot erstellt wurde, wird ihm ein ** automatischer ** Ylim zugewiesen, aber die Achse wird diese Information nicht haben. Wenn also die letzten Zeichnungen vom Ylim abhängen, muss man, wie du sagtest, set_ylim setzen, um den aktuellen Bereich zu überschreiben. – dashesy

Verwandte Themen