python plot hist 密度图 概率和不为1

使用ax.hist()函数想要把数据转为密度直方图,但发现直接使用density=true得到的值很奇怪,y轴甚至会大于1,不符合我的预期。
查了资料发现density=ture的意思是保证该面积的积分为1,并不是概率和为1,因此我们需要对其进行改进。
最简单对方法就是对每个bin增加权重,强迫它为我们的概率值:

weights = np.ones_like(myarray)/float(len(myarray))
plt.hist(myarray, weights=weights)

这样就可以保证y轴和为1了~
更多讨论参考这里

  • 37
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 你可以使用 Python 的 Matplotlib 库来绘制概率密度直方和曲线。以下是一个简单的例子: ```python import numpy as np import matplotlib.pyplot as plt # 生成随机数据 data = np.random.normal(size=1000) # 绘制概率密度直方 plt.hist(data, density=True, bins=30, alpha=0.5) plt.xlabel('Value') plt.ylabel('Probability density') plt.title('Probability density histogram') # 绘制概率密度曲线 plt.figure() plt.plot(np.arange(-3, 3, 0.1), 1/(np.sqrt(2*np.pi)*1)*np.exp(-(np.arange(-3, 3, 0.1)**2)/(2*1**2))) plt.xlabel('Value') plt.ylabel('Probability density') plt.title('Probability density curve') plt.show() ``` 这个例子中,我们首先生成了一个包含 1000 个标准正态分布随机数的数据。然后,我们使用 `hist()` 函数绘制了概率密度直方,并使用 `plot()` 函数绘制了概率密度曲线。 在绘制概率密度直方时,我们使用 `density=True` 参数来指定绘制概率密度而不是频率直方,使用 `bins` 参数来指定直方的箱子数量,使用 `alpha` 参数来指定直方的透明度。 在绘制概率密度曲线时,我们使用 NumPy 库中的 `np.arange()` 函数生成了一个从 -3 到 3,步长为 0.1 的数组作为 x 轴坐标,使用正态密度函数计算了每个 x 坐标对应的 y 值,并使用 `plot()` 函数绘制了曲线。 ### 回答2: Python可以使用matplotlib库中的函数来绘制概率密度直方和曲线。首先需要导入matplotlib库和numpy库,其中numpy库用于生成随机数。 概率密度直方可以通过hist()函数进行绘制。该函数接收一个数据集作为输入,并将数据集分成多个区间,然后统计每个区间中的数据个数,并绘制出直方。可以通过调整bins参数来控制区间的个数,通过调整density参数为True来保证每个区间内的面积总和为1。 例如,通过以下代码可以绘制一个具有10000个随机数的概率密度直方: ```python import matplotlib.pyplot as plt import numpy as np # 生成随机数 data = np.random.normal(0, 1, 10000) # 绘制概率密度直方 plt.hist(data, bins=50, density=True) plt.xlabel('Value') plt.ylabel('Density') plt.title('Probability Density Histogram') plt.show() ``` 曲线可以通过plot()函数进行绘制。该函数接收一个x轴的数据和一个y轴的数据作为输入,并将其连接起来绘制出曲线。可以通过调整linewidth参数来调整曲线的粗细。 例如,通过以下代码可以绘制一个正弦曲线: ```python import matplotlib.pyplot as plt import numpy as np # 生成x轴数据 x = np.linspace(0, 2*np.pi, 100) # 生成y轴数据 y = np.sin(x) # 绘制曲线 plt.plot(x, y, linewidth=2) plt.xlabel('x') plt.ylabel('y') plt.title('Sine Curve') plt.show() ``` 以上就是使用Python绘制概率密度直方和曲线的基本方法。根据具体的需求,还可以对形进行进一步的调整和美化。 ### 回答3: Python中可以使用Matplotlib库来绘制概率密度直方和曲线。 对于概率密度直方的绘制,可以使用Matplotlib的hist函数。首先需要将数据准备好,可以使用Numpy库生成一组随机数或者从外部文件中读取数据。然后使用hist函数传入数据以及其他参数,如bin的个数、颜色、透明度等,就可以绘制出概率密度直方。为了更好地展示概率分布,可以使用normed参数来设置为True,使直方的面积为1,即表示概率密度。 对于曲线的绘制,可以使用Matplotlib的plot函数。同样需要准备好数据,一般是两个数组,表示x和y的坐标。然后使用plot函数传入这两个数组以及其他参数,如颜色、线型、标记等,就可以绘制出曲线。为了更好地显示曲线的曲率,可以使用plot函数的kind参数来选择不同的线型,如折线、平滑曲线等。 此外,还可以通过Matplotlib的subplot函数来绘制多个子,同时显示概率密度直方和曲线。使用subplot函数可以设置多个子的行数和列数,然后在每个子上使用histplot函数来绘制相应的形。 总之,通过使用Matplotlib库的hist函数和plot函数,可以方便地绘制概率密度直方和曲线,展示数据的分布和变化情况。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值