การวาดกราฟทับภาพพื้นหลังใน Matplotlib ทำได้โดยใช้ ax.imshow() แสดงภาพเป็นพื้นหลัง แล้วพลอตกราฟอื่นๆ ทับบนด้วย ax.plot() โดยระบุ extent ให้ตรงกับพิกัดข้อมูล
ขั้นตอนการทำงาน
- นำเข้า
numpyและmatplotlib.pyplot - อ่านภาพด้วย
plt.imread("filename.jpg") - สร้าง Figure และ Axes ด้วย
plt.subplots() - แสดงภาพเป็นพื้นหลังด้วย
ax.imshow(im, extent=[xmin, xmax, ymin, ymax]) - สร้างข้อมูลกราฟที่ต้องการพลอตทับ
- พลอตกราฟด้วย
ax.plot()พร้อมกำหนดสไตล์เส้น - แสดงผลด้วย
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
im = plt.imread("bird.jpg")
fig, ax = plt.subplots()
im = ax.imshow(im, extent=[0, 300, 0, 300])
x = np.array(range(300))
ax.plot(x, x, ls='dotted', linewidth=2, color='red')
plt.show()
คำอธิบาย extent
extent=[xmin, xmax, ymin, ymax]กำหนดพิกัดขอบภาพในระบบพิกัดข้อมูล- ทำให้พิกัดภาพตรงกับพิกัดกราฟที่จะพลอตทับ
- ในตัวอย่าง: ภาพครอบคลุม x=0..300, y=0..300
เทคนิคขั้นสูง: Alpha Blending
# ทำให้ภาพพื้นหลังโปร่งใส
ax.imshow(im, extent=[0, 300, 0, 300], alpha=0.5)
# หรือใช้ zorder ควบคุมลำดับชั้น
ax.plot(x, x, 'r--', lw=2, zorder=10) # บนสุด
ax.imshow(im, extent=[0, 300, 0, 300], zorder=1) # ชั้นล่าง
การใช้งานกับข้อมูลจริง
# ตัวอย่าง: พลอตเส้นทาง GPS ทับแผนที่
import matplotlib.pyplot as plt
map_img = plt.imread("map.png")
fig, ax = plt.subplots(figsize=(10, 8))
ax.imshow(map_img, extent=[min_lon, max_lon, min_lat, max_lat])
# พลอตเส้นทาง
ax.plot(gps_lons, gps_lats, 'r-', lw=2, label='Route')
ax.scatter(gps_lons[0], gps_lats[0], c='green', s=100, label='Start', zorder=5)
ax.scatter(gps_lons[-1], gps_lats[-1], c='red', s=100, label='End', zorder=5)
ax.legend()
plt.show()
การประยุกต์ใช้
เหมาะสำหรับการแสดงข้อมูลภูมิศาสตร์ (Geospatial) เส้นทางการเคลื่อนที่ Heatmap ทับแผนที่ Satellite imagery analysis หรือการนำเสนอข้อมูลวิทยาศาสตร์บนภาพพื้นหลัง