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

วิธีพลอตกราฟเส้นจากข้อมูลฮิสโตแกรมใน Matplotlib

การแปลงข้อมูลฮิสโตแกรมเป็นกราฟเส้น (line graph) ใน Matplotlib สามารถทำได้โดยใช้ np.histogram() คำนวณความถี่และขอบเขตกลุ่ม (bins) จากข้อมูลดิบ แล้วนำค่ากลางของแต่ละกลุ่ม (bin centers) มาพลอตเป็นเส้น

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

  1. นำเข้า numpy และ matplotlib.pyplot
  2. สร้าง Subplot 2 แถว 1 คอลัมน์ ด้วย plt.subplot(211) และ plt.subplot(212)
  3. สร้างข้อมูลสุ่มด้วย np.random.rand()
  4. คำนวณฮิสโตแกรมด้วย np.histogram(data, bins=100) ได้ค่า y (ความถี่) และ binEdges
  5. พลอตฮิสโตแกรมทั่วไปด้านบนด้วย plt.hist()
  6. คำนวณจุดกึ่งกลางกลุ่ม: bincenters = 0.5 * (binEdges[1:] + binEdges[:-1])
  7. พลอตกราฟเส้นด้านล่างด้วย plt.plot(bincenters, y, '-', c='black')
  8. แสดงผลด้วย 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) หรือการสร้างกราฟความน่าจะเป็นจากข้อมูลตัวอย่าง