Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การวาด Figure หลายอันพร้อมกัน (Parallel) ใน Matplotlib Python

การแสดง Figure หลายอันพร้อมกันใน Matplotlib สามารถทำได้โดยสร้าง Subplot หลายตัวใน Figure เดียว ใช้ plt.subplot() หรือ plt.subplots() แล้วพลอตข้อมูลในแต่ละ Axes แยกกัน

ขั้นตอนการทำงาน

  1. นำเข้า numpy และ matplotlib.pyplot
  2. สร้างข้อมูลสุ่ม 2 มิติด้วย np.random.rand(5, 5)
  3. สร้าง Subplot 1 แถว 4 คอลัมน์ ด้วย plt.subplot(1, 4, i) โดย i = 1, 2, 3, 4
  4. ในแต่ละ Subplot ใช้ plt.imshow() แสดงข้อมูลเป็นภาพ พร้อม Colormap ที่ต่างกัน
  5. แสดงผลด้วย 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) หรือการสร้างภาพสรุปผลการทดลองหลายเงื่อนไข