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

การพลอตกราฟทับภาพพื้นหลัง (Plot Over Image Background) ใน Matplotlib Python

การวาดกราฟทับภาพพื้นหลังใน Matplotlib ทำได้โดยใช้ ax.imshow() แสดงภาพเป็นพื้นหลัง แล้วพลอตกราฟอื่นๆ ทับบนด้วย ax.plot() โดยระบุ extent ให้ตรงกับพิกัดข้อมูล

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

  1. นำเข้า numpy และ matplotlib.pyplot
  2. อ่านภาพด้วย plt.imread("filename.jpg")
  3. สร้าง Figure และ Axes ด้วย plt.subplots()
  4. แสดงภาพเป็นพื้นหลังด้วย ax.imshow(im, extent=[xmin, xmax, ymin, ymax])
  5. สร้างข้อมูลกราฟที่ต้องการพลอตทับ
  6. พลอตกราฟด้วย ax.plot() พร้อมกำหนดสไตล์เส้น
  7. แสดงผลด้วย 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 หรือการนำเสนอข้อมูลวิทยาศาสตร์บนภาพพื้นหลัง