Chia tỷ lệ phân phối chuẩn trong Python
Tôi muốn vẽ biểu đồ cho phân phối chuẩn và cũng vẽ biểu đồ phân phối chuẩn tương ứng trên đó. Có một số ví dụ có sẵn trực tuyến liên quan đến phân phối bình thường với trục y được chuẩn hóa với density=True. Trong ví dụ của tôi, tôi đang cố gắng tạo đường cong phân phối chuẩn mà không cần chuẩn hóa kiểu mật độ. Có lẽ, đây có thể là một câu hỏi toán học ngầm nhưng tôi không thể tìm ra cách "bỏ chuẩn hóa" đường cong phân phối. Sau đây là mã của tôi:
import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt
mu = 1e-3
std = 1.0e-4
nsize = 10000
ymax = 5000
# Generate some data for this demonstration.
data = norm.rvs(mu, std, size=nsize)
# Plot the histogram.
plt.hist(data, bins=20, color='b', edgecolor='black')
# Plot the PDF.
xmin, xmax = [0.5e-3, 1.5e-3] #plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = norm.pdf(x, mu, std) # something to do with this line
plt.plot(x, p, 'k', linewidth=2)
plt.axvline(mu, linestyle='dashed', color='black')
plt.ylim([0, ymax])
Điều này tạo ra âm mưu sau đây.
Có thể thấy, diện tích dưới biểu đồ sẽ bằng 10000 ( nsize) là số điểm dữ liệu. Tuy nhiên, với "đường cong phân phối" thì không phải như vậy. Làm thế nào để có được đường cong khớp với biểu đồ?
Trả lời
Có vẻ như plttrả về histtổng số đó nsize. Vì vậy, chúng ta có thể mở rộng quy mô p:
# Plot the histogram.
hist, bins, _ = plt.hist(data, bins=20, color='b', edgecolor='black')
# Plot the PDF.
xmin, xmax = [0.5e-3, 1.5e-3] #plt.xlim()
# changes here
p = norm.pdf(bins, mu, std)
plt.plot(bins, p/p.sum() * nsize , 'r', linewidth=2)
Đầu ra: