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

วิธีพลอตแผนที่ความหนาแน่น 3 มิติ (3D Density Map) ใน Python ด้วย Matplotlib

การสร้างแผนที่ความหนาแน่น 2 มิติ (ซึ่งมักเรียกว่า 3D density map เพราะมีค่า Z เป็นความสูง/ความหนาแน่น) ใน Matplotlib ใช้ pcolormesh() ซึ่งเร็วกว่า pcolor() และรองรับกริดไม่สม่ำเสมอ

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

  1. นำเข้า numpy, matplotlib.pyplot, cm (colormap), colors
  2. สร้างเวกเตอร์พิกัดด้วย np.linspace()
  3. สร้างกริด 2 มิติด้วย np.meshgrid()
  4. คำนวณค่า Z (ความหนาแน่น) จากฟังก์ชันทางคณิตศาสตร์ (ตัวอย่าง: Gaussian 2D)
  5. พลอตด้วย plt.pcolormesh(X, Y, Z, shading='auto')
  6. เพิ่มแถบสี (colorbar) ด้วย plt.colorbar()
  7. แสดงผลด้วย plt.show()

ตัวอย่างโค้ด

from matplotlib import pyplot as plt, cm, colors
import numpy as np

plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True

side = np.linspace(-2, 2, 15)
X, Y = np.meshgrid(side, side)
Z = np.exp(-((X - 1) ** 2 + Y ** 2))

plt.pcolormesh(X, Y, Z, shading='auto')
plt.colorbar(label='Density')
plt.show()

คำอธิบายพารามิเตอร์สำคัญ

  • shading='auto' - เลือกโหมด shading อัตโนมัติ (flat/gouraud) ตามขนาด X,Y,Z
  • shading='flat' - แต่ละเซลล์มีสีคงที่ (ค่าเริ่มต้น)
  • shading='gouraud' - เนียนสีระหว่างจุด (ต้องมี X,Y,Z ขนาดเท่ากัน)
  • cmap='viridis' - เปลี่ยน colormap (ค่าเริ่มต้น: viridis)

Colormap แนะนำสำหรับ Density

  • 'viridis' - มาตรฐาน เน้นความเข้มสี สามารถพิมพ์ขาวดำได้
  • 'plasma', 'inferno', 'magma' - สำหรับ heatmap
  • 'hot' - ดำ-แดง-เหลือง-ขาว (คลาสสิก)
  • 'Blues', 'Reds' - Sequential สีเดียว

การเพิ่ม Contour Lines


plt.pcolormesh(X, Y, Z, shading='auto', cmap='viridis', alpha=0.7)
plt.contour(X, Y, Z, levels=10, colors='white', linewidths=0.5)
plt.colorbar()
plt.show()

การประยุกต์ใช้

เหมาะสำหรับการแสดงข้อมูลสนามสเกลาร์ (scalar fields) เช่น ความหนาแน่นประชากร อุณหภูมิ ความดัน ฟังก์ชันคลื่น Quantum mechanics หรือการวิเคราะห์ข้อมูลภูมิศาสตร์