Bagaimana cara membuat dua plot berdampingan menggunakan Python?

94

Saya menemukan contoh berikut di matplotlib:

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

Pertanyaan saya adalah: Apa yang harus saya ubah, agar plot berdampingan?

Heißenberg93
sumber

Jawaban:

148

Ubah pengaturan subplot Anda menjadi:

plt.subplot(1, 2, 1)

...

plt.subplot(1, 2, 2)

Parameternya subplotadalah: jumlah baris, jumlah kolom, dan subplot mana Anda saat ini. Jadi 1, 2, 1berarti "gambar 1 baris, 2 kolom: pergi ke subplot pertama." Kemudian 1, 2, 2berarti "gambar 1 baris, 2 kolom: pergi ke subplot kedua."

Anda saat ini meminta tata letak 2 baris, 1 kolom (yaitu, satu di atas yang lain). Anda perlu meminta tata letak 1 baris, 2 kolom sebagai gantinya. Jika Anda melakukannya, hasilnya adalah:

plot berdampingan

Untuk meminimalkan tumpang tindih subplot, Anda mungkin ingin memulai:

plt.tight_layout()

sebelum pertunjukan. Menghasilkan:

plot berdampingan yang lebih rapi

Jonathan Eunice
sumber
45

Lihat halaman ini: http://matplotlib.org/examples/pylab_examples/subplots_demo.html

plt.subplotsserupa. Saya pikir itu lebih baik karena lebih mudah untuk mengatur parameter gambar. Dua argumen pertama menentukan tata letak (dalam kasus Anda 1 baris, 2 kolom), dan parameter lain mengubah fitur seperti ukuran gambar:

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

masukkan deskripsi gambar di sini

busybear
sumber
1
Apakah ada juga cara untuk membuat plot lebih luas dan lebih tinggi?
Heißenberg93
Saya tidak bermaksud memuji plt.xlim / ylim
Heißenberg93
5
Saya akan menyarankan menggunakan plt.subplots. Anda dapat menentukan argumen figsizeuntuk menentukan ukuran gambar. Seperti dalam plt.subplots(1, 2, figsize=(20, 4)). Jika tidak, Anda pertama bisa menentukan sosok dan figur ukuran: plt.figure(figsize=(20, 4)).
busybear
Untuk beberapa alasan, saya mendapatkan data kosong saat mencoba menyimpan subplot "plt.savefig ('.... png')". Im umsing kode yang sama persis di awal (saya hanya menambahkan plt.figure (figsize = (7, 3))).
Heißenberg93
Apakah Anda menelepon plt.savefigsetelah plt.show? Jika demikian, kemungkinan itu adalah masalah Anda.
busybear