การแสดง Figure หลายอันพร้อมกันใน Matplotlib สามารถทำได้โดยสร้าง Subplot หลายตัวใน Figure เดียว ใช้ plt.subplot() หรือ plt.subplots() แล้วพลอตข้อมูลในแต่ละ Axes แยกกัน
ขั้นตอนการทำงาน
- นำเข้า
numpyและmatplotlib.pyplot - สร้างข้อมูลสุ่ม 2 มิติด้วย
np.random.rand(5, 5) - สร้าง Subplot 1 แถว 4 คอลัมน์ ด้วย
plt.subplot(1, 4, i)โดย i = 1, 2, 3, 4 - ในแต่ละ Subplot ใช้
plt.imshow()แสดงข้อมูลเป็นภาพ พร้อม Colormap ที่ต่างกัน - แสดงผลด้วย
plt.show()
ตัวอย่างโค้ด
import numpy as np
from matplotlib import pyplot as plt
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True
data = np.random.rand(5, 5)
plt.subplot(1, 4, 1)
plt.imshow(data, cmap="Blues_r")
plt.subplot(1, 4, 2)
plt.imshow(data, cmap="Accent_r")
plt.subplot(1, 4, 3)
plt.imshow(data, cmap="terrain_r")
plt.subplot(1, 4, 4)
plt.imshow(data, cmap="twilight_shifted_r")
plt.show()
Colormap ที่ใช้ในตัวอย่าง
| Colormap | ลักษณะ | เหมาะสำหรับ |
|---|---|---|
Blues_r | น้ำเงินเข้ม → ฟ้า → ขาว (กลับ) | ข้อมูลลำดับชั้น (sequential) |
Accent_r | สีสันสดใส แยกหมวดหมู่ชัด | ข้อมูลหมวดหมู่ (qualitative) |
terrain_r | เขียว-น้ำตาล-ขาว (ภูมิประเทศ) | ข้อมูลความสูง/地形 |
twilight_shifted_r | สีม่วง-น้ำเงิน-ส้ม (cyclic) | ข้อมูลแบบวนรอบ (phase, angle) |
วิธีที่ดีกว่า: ใช้ plt.subplots()
fig, axes = plt.subplots(1, 4, figsize=(12, 3))
cmaps = ["Blues_r", "Accent_r", "terrain_r", "twilight_shifted_r"]
for ax, cmap in zip(axes, cmaps):
im = ax.imshow(data, cmap=cmap)
ax.set_title(cmap)
plt.colorbar(im, ax=ax, fraction=0.046, pad=0.04)
plt.tight_layout()
plt.show()
ข้อดีของ plt.subplots()
- ควบคุม Axes แต่ละตัวได้โดยตรงผ่านอาร์เรย์
- เพิ่ม colorbar ได้ง่ายต่อ Axes แต่ละตัว
tight_layout()ป้องกันการทับซ้อนอัตโนมัติ- รองรับ
sharex,shareyสำหรับแกนร่วม
การประยุกต์ใช้
เหมาะสำหรับการเปรียบเทียบ Colormap การแสดงข้อมูลภาพหลายช่องทาง (multi-channel) หรือการสร้างภาพสรุปผลการทดลองหลายเงื่อนไข