การแปลงข้อมูลฮิสโตแกรมเป็นกราฟเส้น (line graph) ใน Matplotlib สามารถทำได้โดยใช้ np.histogram() คำนวณความถี่และขอบเขตกลุ่ม (bins) จากข้อมูลดิบ แล้วนำค่ากลางของแต่ละกลุ่ม (bin centers) มาพลอตเป็นเส้น
ขั้นตอนการทำงาน
- นำเข้า
numpyและmatplotlib.pyplot - สร้าง Subplot 2 แถว 1 คอลัมน์ ด้วย
plt.subplot(211)และplt.subplot(212) - สร้างข้อมูลสุ่มด้วย
np.random.rand() - คำนวณฮิสโตแกรมด้วย
np.histogram(data, bins=100)ได้ค่าy(ความถี่) และbinEdges - พลอตฮิสโตแกรมทั่วไปด้านบนด้วย
plt.hist() - คำนวณจุดกึ่งกลางกลุ่ม:
bincenters = 0.5 * (binEdges[1:] + binEdges[:-1]) - พลอตกราฟเส้นด้านล่างด้วย
plt.plot(bincenters, y, '-', c='black') - แสดงผลด้วย
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
plt.subplot(211)
data = np.array(np.random.rand(100))
y, binEdges = np.histogram(data, bins=100)
plt.hist(data, bins=100, edgecolor='black')
plt.subplot(212)
bincenters = 0.5 * (binEdges[1:] + binEdges[:-1])
plt.plot(bincenters, y, '-', c='black')
plt.show()
คำอธิบายหลักการ
np.histogram()คืนค่า: ความถี่ (counts) และขอบเขตกลุ่ม (bin edges)- จุดกึ่งกลางกลุ่ม (bin centers) คำนวณจากค่าเฉลี่ยของขอบเขตติดกัน
- กราฟเส้นที่ได้จะแสดงรูปทรงการกระจายของข้อมูล (density curve)
- วิธีนี้เป็นพื้นฐานของ Kernel Density Estimation (KDE)
การปรับปรุงคุณภาพ
- ใช้
density=Trueในnp.histogram()เพื่อได้ค่าความหนาแน่น (probability density) - ใช้
scipy.stats.gaussian_kdeสำหรับการประมาณค่าความหนาแน่นแบบเรียบ - เพิ่ม
plt.fill_between(bincenters, y, alpha=0.3)เพื่อเติมสีใต้เส้นโค้ง
การประยุกต์ใช้
เหมาะสำหรับการเปรียบเทียบการกระจายของข้อมูลหลายชุด การแสดง Probability Density Function (PDF) หรือการสร้างกราฟความน่าจะเป็นจากข้อมูลตัวอย่าง