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

การพล็อตความแตกต่างของสอง Distribution ใน Matplotlib

ใช้ Kernel Density Estimation (KDE) ประมาณ Probability Density ของสองชุดข้อมูล แล้วพล็อตความแตกต่าง

ขั้นตอน

  1. ตั้งค่าขนาด Figure
  2. สร้างข้อมูล 2 ชุดจาก Gumbel Distribution
  3. คำนวณ KDE ด้วย scipy.stats.gaussian_kde
  4. สร้าง Grid สำหรับประเมินค่า
  5. Plot KDE ทั้งสองและความแตกต่าง
  6. เพิ่ม Legend และแสดงผล

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


import numpy as np
import matplotlib.pyplot as plt
import scipy.stats

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

# ข้อมูล 2 ชุด: Gumbel Distribution
a = np.random.gumbel(50, 28, 100)
b = np.random.gumbel(60, 37, 100)

# KDE
kdea = scipy.stats.gaussian_kde(a)
kdeb = scipy.stats.gaussian_kde(b)

# Grid สำหรับประเมิน
grid = np.linspace(0, 50, 100)

plt.plot(grid, kdea(grid), label="Kde A")
plt.plot(grid, kdeb(grid), label="Kde B")
plt.plot(grid, kdea(grid) - kdeb(grid), label="Difference")

plt.legend(loc='upper left')
plt.show()

การตีความ

  • Kde A, Kde B: Probability Density ของแต่ละ Distribution
  • Difference: ความแตกต่าง (A - B) ค่าบวก = A มากกว่า B, ค่าลบ = B มากกว่า A
  • พื้นที่ใต้ Curve = 1 (Probability Density)

ตัวเลือก KDE อื่นๆ


# ใช้ Seaborn (ง่ายกว่า)
import seaborn as sns
sns.kdeplot(a, label='A')
sns.kdeplot(b, label='B')

# ปรับ Bandwidth
kde = scipy.stats.gaussian_kde(a, bw_method=0.5)

ผลลัพธ์

กราฟแสดง Curve 3 เส้น: KDE ของ A, KDE ของ B, และความแตกต่าง (Difference) ระหว่างทั้งสอง