Python:绘制直方图,其中 y 值小于 1

标签 python data-science

我有一个任务,我必须在同一图中显示瑞利分布的绘图和直方图 (Y 轴永远不会达到 1,对我来说最高点是 0.30)。

我有一个 x 数组(从 0 到 10 的线性空间)和 y 计算数组(通过具有两个参数 1,5 和 2 的瑞利函数计算)。

我可以轻松绘制它。但无法显示直方图,因为直方图永远不会采用小于 1 的值(因为直方图的 x 是某个 x 范围的值在 y 刻度上出现的频率)。

您能提供一些建议吗?

这里是代码示例: (我想我必须以某种方式计算 y 上的 x 次机会,对吧?这就是我想念的?)

使用瑞利分布:https://en.wikipedia.org/wiki/Rayleigh_distribution

import math
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

from scipy.stats import rayleigh

RAYLEIGH_LOW_LIMIT = 0
RAYLEIGH_HIGH_LIMIT = 10
RAYLEIGH_ARG_1 = 0.7
RAYLEIGH_ARG_2 = 2


# Part 1: Make selection of size 1000
# Build histogramm and theoretical density
selection = np.linspace(RAYLEIGH_LOW_LIMIT, RAYLEIGH_HIGH_LIMIT, num=1000)
y = rayleigh.pdf(selection, RAYLEIGH_ARG_1, RAYLEIGH_ARG_2)
plt.plot(selection, y, "r-",  label="Density")

plt.hist(selection, bins=10, density=True, label="Histogram", rwidth=0.1)

plt.show() # to display plot

最佳答案

我认为您正在尝试显示瑞利分布的直方图,在该直方图上叠加一条代表分布的线。 如果是这样,您需要为直方图生成一些值,因为 linspace 只是 x 值的范围。 “linspace”并不是直接对直方图有用的东西。 要生成对直方图有用的值,您可以使用以下蒙特卡洛方法(您必须附加到代码中,因为例如“y”是在代码中定义的)。

import random

maxy=max(y)
lval=[]
for i in range(10000):
    ## pick a random y belonging to selection
    xv=random.choice(selection)
    yv=random.random()*maxy
    yral=rayleigh.pdf(xv, RAYLEIGH_ARG_1, RAYLEIGH_ARG_2)
    if(yv<=yral):
       lval.append(xv)
plt.plot(selection, y, "r-",  label="Density")
plt.hist(lval, bins=10, density=True, label="Histogram", rwidth=0.1)

结果图如下:

enter image description here

请记住,这是一个近似值。

当生成器可用时,另一个可能的解决方案(我刚刚查看了手册)是调用 rvs。

r=rayleigh.rvs(loc=RAYLEIGH_ARG_1, scale=RAYLEIGH_ARG_2, size=1000)
plt.plot(selection, y, "r-",  label="Density")
plt.hist(r, bins=10, density=True, label="Histogram", rwidth=0.1)

关于Python:绘制直方图,其中 y 值小于 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60377459/

相关文章:

python-3.x - 使用 Doc2Vec 的句子列表之间的余弦相似度

python - 绘图数据 2.5% 百分位数 97.5% 百分位数

python - 如何使用python从GPS(经度和纬度)时间序列数据中提取速度和加速度特征

python - 为什么 firebase_admin 在运行多进程时无法解析

python - .Semaphore() 和 .BoundedSemaphore() 有什么区别?

python - numpy.array_split() 奇怪的行为

python - 如何并行遍历两个列表?

Python 如何使用枚举和列表跳过第一次(即零次)迭代?

python - Python的可访问类变量,敏感数据和恶意编码器(黑帽黑客)

python - Pandas df.index.strftime ('%H' )