【问题标题】:plot a normal distribution curve and histogram [duplicate]绘制正态分布曲线和直方图
【发布时间】:2025-09-17 19:30:05
【问题描述】:

请问,我想知道如何绘制正态分布图。

这是我的代码:

import numpy as np
import scipy.stats as stats
import pylab as pl

h=[27.3,27.6,27.5,27.6,27.3,27.6,27.9,27.5,27.4,27.5,27.5,27.4,27.1,27.0,27.3,27.4]

fit = stats.norm.pdf(h, np.mean(h), np.std(h))  #this is a fitting indeed

pl.plot(h,fit,'-o')
pl.hist(h,density=True)      #use this to draw histogram of your data
pl.show()                    #use may also need add this

我试过了,但是曲线很粗糙。

【问题讨论】:

  • 您想在plot()hist() 中使用range(len(fit)) 而不是h 作为x 值吗?

标签: python numpy matplotlib scipy


【解决方案1】:

只需对您的列表进行排序h

使用这样的排序:

h = sorted([27.3,27.6,27.5,27.6,27.3,27.6,27.9,27.5,27.4,27.5,27.5,27.4,27.1,27.0,27.3,27.4])

或者,您也可以使用h.sort()

h =[27.3,27.6,27.5,27.6,27.3,27.6,27.9,27.5,27.4,27.5,27.5,27.4,27.1,27.0,27.3,27.4]
h.sort()

输出:

为了得到平滑的分布曲线,可以使用seaborn.distplot()

import seaborn as sns
import scipy

h=[27.3,27.6,27.5,27.6,27.3,27.6,27.9,27.5,27.4,27.5,27.5,27.4,27.1,27.0,27.3,27.4]
ax = sns.distplot(h,fit=scipy.stats.norm, kde=False, hist=True, color='r')
ax.plot()

输出:

有关seaborn.distplot()的更多信息,请查看this官方文档。

【讨论】:

  • 谢谢,但是曲线不平滑先生
  • @AwomaVICTORSEGUN,你没有提到任何你想要平滑曲线的地方。我只是指出了您的代码中的一个错误。您的代码输出与使用排序列表 h 的输出相去甚远。