วิธีสร้างสองแปลงเคียงข้างกันโดยใช้ Python


94

ฉันพบตัวอย่างต่อไปนี้ใน 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()

คำถามของฉันคือฉันต้องเปลี่ยนอะไรเพื่อให้มีพล็อตเคียงข้างกัน?

คำตอบ:


148

เปลี่ยนการตั้งค่าแผนภาพย่อยของคุณเป็น:

plt.subplot(1, 2, 1)

...

plt.subplot(1, 2, 2)

พารามิเตอร์สำหรับsubplotได้แก่ จำนวนแถวจำนวนคอลัมน์และพล็อตย่อยที่คุณกำลังใช้งานอยู่ ดังนั้น1, 2, 1หมายถึง "รูป 1 แถว 2 คอลัมน์: ไปที่แผนย่อยแรก" จากนั้น1, 2, 2หมายถึง "รูป 1 แถว 2 คอลัมน์: ไปที่แผนภาพย่อยที่สอง"

ขณะนี้คุณกำลังขอเค้าโครง 2 แถว 1 คอลัมน์ (นั่นคือหนึ่งแถวบนอีกด้านหนึ่ง) คุณต้องขอเค้าโครง 1 แถว 2 คอลัมน์แทน เมื่อคุณทำผลลัพธ์จะเป็น:

พล็อตเคียงข้างกัน

เพื่อลดการทับซ้อนของพล็อตย่อยคุณอาจต้องการเริ่มต้น:

plt.tight_layout()

ก่อนการแสดง ผลตอบแทน:

neater เคียงข้างกัน


46

ตรวจสอบหน้านี้: http://matplotlib.org/examples/pylab_examples/subplots_demo.html

plt.subplotsคล้ายกัน. ฉันคิดว่ามันดีกว่าเพราะตั้งค่าพารามิเตอร์ของรูปได้ง่ายกว่า อาร์กิวเมนต์สองตัวแรกกำหนดโครงร่าง (ในกรณีของคุณ 1 แถว 2 คอลัมน์) และพารามิเตอร์อื่น ๆ จะเปลี่ยนคุณสมบัติเช่นขนาดรูป:

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

ป้อนคำอธิบายภาพที่นี่


1
นอกจากนี้ยังมีวิธีทำให้พล็อตกว้างขึ้นและสูงขึ้น?
Heißenberg93

ฉันไม่ได้หมายถึงการยกย่อง plt.xlim / ylim
Heißenberg93

5
plt.subplotsผมขอแนะนำให้ใช้ คุณสามารถระบุอาร์กิวเมนต์figsizeเพื่อกำหนดขนาดของรูปได้ เช่นเดียวกับในplt.subplots(1, 2, figsize=(20, 4)). plt.figure(figsize=(20, 4))มิฉะนั้นคุณครั้งแรกที่สามารถกำหนดรูปและตัวเลขขนาด:
busybear

ด้วยเหตุผลบางประการฉันได้รับข้อมูลว่างเปล่าเมื่อฉันพยายามบันทึก "plt.savefig ('.... png')" พล็อตย่อย ฉันใช้รหัสเดียวกันในตอนต้น (ฉันเพิ่มเฉพาะ plt.figure (figsize = (7, 3)))
Heißenberg93

คุณโทรplt.savefigตามplt.show? ถ้าเป็นเช่นนั้นนั่นอาจเป็นปัญหาของคุณ
busybear
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.