2010-02-15 4 views
22

Ich möchte drei Plots in Einzelfigur haben. Die Figur sollte ein Subplot-Layout von zwei zu zwei haben, wobei das erste Plot die ersten zwei Subplot-Zellen (dh die gesamte erste Reihe von Plot-Zellen) belegen sollte und die anderen Plots unter dem ersten in den Zellen 3 und 4 positioniert sein sollten. ich weiß, dass Matlab dies ermöglicht, indem die subplot Befehl wie soWie mache ich eine Achse besetzen mehrere Unterplots mit Pyplot (Python)

subplot(2,2,[1,2]) % the plot will span subplots 1 and 2 

Ist es möglich, auch in pyplot eine einzelne Achsen mehr besetzen zu haben, als eine Nebenhandlung? Der Docstring von pyplotplot spricht nicht darüber.

Wer hat eine einfache Lösung? Vielen Dank im Voraus

+0

Mögliche Duplikat http://stackoverflow.com/questions/1358977/how-to-make-several-plots-on-a-single-page-using-matplotlib – cyborg

Antwort

31

Sie können einfach tun:

x = numpy.arange(0, 7, 0.01) 

subplot(2, 1, 1) 
plot(x, sin(x)) 

subplot(2, 2, 3) 
plot(x, cos(x)) 

subplot(2, 2, 4) 
plot(x, sin(x)*cos(x)) 

dh die erste Handlung ist wirklich ein Grundstück in der oberen Hälfte (die Figur nur in 2 * 1 = 2 Zellen unterteilt ist) und die Die folgenden zwei kleineren Plots werden in einem 2 · 2 = 4 Zellengitter durchgeführt. Das dritte Argument zu subplot() ist die Position des Diagramms innerhalb des Gitters: zum Beispiel im zweiten Teilplot(), die Achsen gehen zum dritten Abschnitt der 2 * 2 Matrix, d. H. Zur unteren linken Ecke.

+5

Während dies die spezifische Antworten Beispiel in der Frage, es ist unklar, wie dies gilt für Layouts, die keine Potenzen von 2 sind. Für meinen Code möchte ich das Layout in Drittel aufteilen. Eine Handlung, um zwei Drittel zu füllen und eine zweite, die ein linkes Drittel füllt. – Annan

+1

Diese Antwort gilt eigentlich für reguläre Layouts (keine "power of 2" -Bedingung): 'subplot (3, 1, 1)', zum Beispiel, schneidet in Terzen. Nun, was Sie wollen, wird durch das Toolkit [axes_grid] (http://matplotlib.org/gallery.html#axes_grid) behandelt. – EOL

+1

@EOL, ich denke an 2 Drittel, nicht an 1 Drittel. Zum Beispiel habe ich zwei Unterplot, mit nur 1 Spalte, die erste Spannen 2/3, die zweite Spannen 1/3. Wie könnte das gemacht werden? Vielen Dank. – StayFoolish

17

mehrere Handlungsstränge zu haben, mit einer Achse einnehmen, können Sie einfach tun:

from matplotlib import pyplot as plt 
import numpy as np 

b=np.linspace(-np.pi, np.pi, 100) 

a1=np.sin(b) 

a2=np.cos(b) 

a3=a1*a2 

plt.subplot(221) 
plt.plot(b, a1) 
plt.title('sin(x)') 

plt.subplot(222) 
plt.plot(b, a2) 
plt.title('cos(x)') 

plt.subplot(212) 
plt.plot(b, a3) 
plt.title('sin(x)*cos(x)') 

plt.show() 

enter image description here

Ein anderer Weg

plt.subplot(222) 
plt.plot(b, a1) 
plt.title('sin(x)') 

plt.subplot(224) 
plt.plot(b, a2) 
plt.title('cos(x)') 

plt.subplot(121) 
plt.plot(b, a3) 
plt.title('sin(x)*cos(x)') 

plt.show() 

enter image description here

5

Für eine feinere Auswahl ist Vielleicht möchten Sie dieverwendenModul von matplotlib.pyplot.

http://matplotlib.org/users/gridspec.html

+1

sehr cool, wusste nicht genau das, was ich brauche, vor allem die Colspan und Rowspan Funktionen. – mxmlnkn

Verwandte Themen