การสร้างแผนที่ความหนาแน่น 2 มิติ (ซึ่งมักเรียกว่า 3D density map เพราะมีค่า Z เป็นความสูง/ความหนาแน่น) ใน Matplotlib ใช้ pcolormesh() ซึ่งเร็วกว่า pcolor() และรองรับกริดไม่สม่ำเสมอ
ขั้นตอนการทำงาน
- นำเข้า
numpy,matplotlib.pyplot,cm(colormap),colors - สร้างเวกเตอร์พิกัดด้วย
np.linspace() - สร้างกริด 2 มิติด้วย
np.meshgrid() - คำนวณค่า Z (ความหนาแน่น) จากฟังก์ชันทางคณิตศาสตร์ (ตัวอย่าง: Gaussian 2D)
- พลอตด้วย
plt.pcolormesh(X, Y, Z, shading='auto') - เพิ่มแถบสี (colorbar) ด้วย
plt.colorbar() - แสดงผลด้วย
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,Zshading='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 หรือการวิเคราะห์ข้อมูลภูมิศาสตร์