[英]How do I draw a histogram for a normal distribution using python matplotlib?
我的問題是 - 使用 NumPy 函數 np.random.randn 為 100,000 點的正態分布生成數據 x。 然后 plot 一個直方圖。
我的計算是 -
x = sp.norm.pdf(np.random.randn(100000))
plt.hist(x, bins = 20, facecolor='blue', alpha=0.5)
有什么問題,因為我無法獲得正態分布的直方圖嗎?
要從標准正態分布中獲取 N 個隨機樣本,您可以使用np.random.randn(N)
或 scipy 的stats.norm.rvs(size=N)
。 然后這些樣本可用於創建直方圖。
要繪制曲線,可以使用stats.norm.pdf(y)
,其中y
是一系列后續 x 值。 這樣的pdf
是歸一化的,即 plot 下的面積為 1。直方圖的總面積是樣本數乘以 bin 的寬度(每個樣本正好落在一個 bin 中)。 因此,將 pdf 乘以該因子會將其縮放到直方圖的高度。
stats.norm.pdf(np.random.randn(N))
的結果將是 N 個隨機樣本的概率列表。 大多數樣本最終會接近曲線的中心(在y = 0
處),其中 pdf 的高度約為0.40
。 這解釋了該最大值附近的高峰值。
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
N = 100000
# x = np.random.randn(N)
x = stats.norm.rvs(size=N)
num_bins = 20
plt.hist(x, bins=num_bins, facecolor='blue', alpha=0.5)
y = np.linspace(-4, 4, 1000)
bin_width = (x.max() - x.min()) / num_bins
plt.plot(y, stats.norm.pdf(y) * N * bin_width)
plt.show()
'import numpy as np
import seaborn as sns
N = 1000
x = np.random.randn(N)
sns.histplot(x,bins=20,kde=True,color='red')'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.