Jak zrobić dwa wykresy obok siebie za pomocą Pythona?


102

Na matplotlib znalazłem następujący przykład:

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

Moje pytanie brzmi: co muszę zmienić, aby działki znajdowały się obok siebie?

Odpowiedzi:


155

Zmień ustawienia działki na:

plt.subplot(1, 2, 1)

...

plt.subplot(1, 2, 2)

Parametry dla subplotto: liczba wierszy, liczba kolumn i podplot, na którym aktualnie się znajdujesz. Czyli 1, 2, 1oznacza „1-wierszową, 2-kolumnową figurę: przejdź do pierwszego wykresu cząstkowego”. Następnie 1, 2, 2oznacza „1 wiersz, kolumna 2 rysunku: idź do drugiego poletko”.

Obecnie pytasz o układ 2-rzędowy i 1-kolumnowy (to znaczy jeden na drugim). Zamiast tego musisz poprosić o układ 1-wierszowy i 2-kolumnowy. Kiedy to zrobisz, wynik będzie:

działka obok siebie

Aby zminimalizować nakładanie się wątków pobocznych, możesz zechcieć:

plt.tight_layout()

przed koncertem. Wydajność:

zadbana działka obok siebie


54

Sprawdź tę stronę: http://matplotlib.org/examples/pylab_examples/subplots_demo.html

plt.subplotsjest podobny. Myślę, że jest lepiej, ponieważ łatwiej jest ustawić parametry figury. Pierwsze dwa argumenty określają układ (w twoim przypadku 1 wiersz, 2 kolumny), a inne parametry zmieniają funkcje, takie jak rozmiar rysunku:

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

wprowadź opis obrazu tutaj


1
Czy jest też sposób, aby fabuła była szersza i wyższa?
Heißenberg93

I dont mean the commend plt.xlim /
ylim

5
Sugerowałbym użycie plt.subplots. Możesz określić argument, figsizeaby zdefiniować rozmiar figury. Jak w plt.subplots(1, 2, figsize=(20, 4)). W przeciwnym razie, można najpierw zdefiniować postać i postać rozmiar: plt.figure(figsize=(20, 4)).
busybear

Z jakiegoś powodu otrzymuję puste dane, gdy próbuję zapisać „plt.savefig ('.... png')” wykres podrzędny. Im umsing dokładnie ten sam kod na początku (dodałem tylko plt.figure (figsize = (7, 3))).
Heißenberg93

Dzwonisz plt.savefigpo plt.show? Jeśli tak, to prawdopodobnie twój problem.
busybear
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.