Wie erstelle ich mit Python zwei Plots nebeneinander?

91

Ich habe folgendes Beispiel auf matplotlib gefunden:

import numpy as np
import matplotlib.pyplot as plt


x1 = np.linspace(0.0, 5.0)
x2 = np.linspace(0.0, 2.0)

y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
y2 = np.cos(2 * np.pi * x2)

plt.subplot(2, 1, 1)
plt.plot(x1, y1, 'ko-')
plt.title('A tale of 2 subplots')
plt.ylabel('Damped oscillation')


plt.subplot(2, 1, 2)
plt.plot(x2, y2, 'r.-')
plt.xlabel('time (s)')
plt.ylabel('Undamped')

plt.show()

Meine Frage ist: Was muss ich ändern, um die Handlungen nebeneinander zu haben?

Heißenberg93
quelle

Antworten:

141

Ändern Sie Ihre Subplot-Einstellungen in:

plt.subplot(1, 2, 1)

...

plt.subplot(1, 2, 2)

Die Parameter für subplotsind: Anzahl der Zeilen, Anzahl der Spalten und welche Nebenhandlung Sie sich gerade befinden. Also 1, 2, 1bedeutet "eine 1-zeilige, 2-spaltige Figur: gehe zur ersten Nebenhandlung." Dann 1, 2, 2bedeutet "eine 1-zeilige, 2-spaltige Figur: gehe zur zweiten Nebenhandlung."

Sie fragen derzeit nach einem zweizeiligen, einspaltigen Layout (dh übereinander). Sie müssen stattdessen nach einem 1-zeiligen, 2-spaltigen Layout fragen. Wenn Sie dies tun, ist das Ergebnis:

nebeneinander Grundstück

Um die Überlappung von Teilplots zu minimieren, möchten Sie möglicherweise Folgendes eingeben:

plt.tight_layout()

Vor der Show. Nachgeben:

ordentlich nebeneinander Grundstück

Jonathan Eunice
quelle
41

Überprüfen Sie diese Seite: http://matplotlib.org/examples/pylab_examples/subplots_demo.html

plt.subplotsist ähnlich. Ich denke, es ist besser, da es einfacher ist, Parameter der Figur einzustellen. Die ersten beiden Argumente definieren das Layout (in Ihrem Fall 1 Zeile, 2 Spalten), und andere Parameter ändern Funktionen wie die Abbildungsgröße:

import numpy as np
import matplotlib.pyplot as plt

x1 = np.linspace(0.0, 5.0)
x2 = np.linspace(0.0, 2.0)
y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
y2 = np.cos(2 * np.pi * x2)

fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(5, 3))
axes[0].plot(x1, y1)
axes[1].plot(x2, y2)
fig.tight_layout()

Geben Sie hier die Bildbeschreibung ein

Busybear
quelle
1
Gibt es auch eine Möglichkeit, die Handlung breiter und höher zu machen?
Heißenberg93
Ich meine nicht das Lob plt.xlim / ylim
Heißenberg93
5
Ich würde vorschlagen, zu verwenden plt.subplots. Sie können das Argument angeben figsize, um die Größe der Figur zu definieren. Wie in plt.subplots(1, 2, figsize=(20, 4)). Andernfalls können Sie zuerst die Figur und die Figurengröße definieren : plt.figure(figsize=(20, 4)).
Busybear
Aus irgendeinem Grund erhalte ich leere Daten, wenn ich versuche, "plt.savefig ('.... png')" des Unterplots zu speichern. Ich habe am Anfang genau den gleichen Code verwendet (ich habe nur plt.figure hinzugefügt (figsize = (7, 3))).
Heißenberg93
Rufst du plt.savefignach plt.show? Wenn ja, ist das wahrscheinlich Ihr Problem.
Busybear