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?

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


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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.