gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:31:58 25 4
gpt4 key购买 nike

我有一个任务,我必须在同一图中为瑞利分布显示图和直方图
(在 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”不是直接对直方图有用的东西。
要生成对直方图有用的值,您可以使用以下 Montecarlo 方法(您必须将其附加到您的代码中,例如,“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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com