微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Matplotlib - 在随机点旁边绘制正态分布

如何解决Matplotlib - 在随机点旁边绘制正态分布

我试图在一些符合该分布的随机生成的点旁边绘制一个正态分布。我希望这些点简单地绘制在 x 轴上以显示观察密度存在的位置,如下所示:

enter image description here

我如何实现这一目标?我不断收到以下代码的一些类型错误

from scipy.stats import norm
import numpy as np
import matplotlib.pyplot as plt

mean = 64.43
standard_deviation = 2.99
random_weights = [norm(mean,standard_deviation) for _ in range(0,30)]

x_axis = np.arange(50.0,80.0,0.01)

plt.plot(x_axis,norm.pdf(x_axis,mean,standard_deviation))
plt.scatter(random_weights,[0 for _ in range(0,30)])
plt.show()

错误

Traceback (most recent call last):
  File "C:\git\python_playground\main.py",line 13,in <module>
    plt.scatter(random_weights,30)])
  File "C:\Users\thoma\AppData\Local\Programs\Python\python39\lib\site-packages\matplotlib\pyplot.py",line 3068,in scatter
    __ret = gca().scatter(
  File "C:\Users\thoma\AppData\Local\Programs\Python\python39\lib\site-packages\matplotlib\__init__.py",line 1361,in inner
    return func(ax,*map(sanitize_sequence,args),**kwargs)
  File "C:\Users\thoma\AppData\Local\Programs\Python\python39\lib\site-packages\matplotlib\axes\_axes.py",line 4587,in scatter
    collection = mcoll.PathCollection(
  File "C:\Users\thoma\AppData\Local\Programs\Python\python39\lib\site-packages\matplotlib\collections.py",line 1034,in __init__
    super().__init__(**kwargs)
  File "C:\Users\thoma\AppData\Local\Programs\Python\python39\lib\site-packages\matplotlib\_api\deprecation.py",line 431,in wrapper
    return func(*inner_args,**inner_kwargs)
  File "C:\Users\thoma\AppData\Local\Programs\Python\python39\lib\site-packages\matplotlib\collections.py",line 206,in __init__
    offsets = np.asanyarray(offsets,float)
  File "C:\Users\thoma\AppData\Local\Programs\Python\python39\lib\site-packages\numpy\core\_asarray.py",line 171,in asanyarray
    return array(a,dtype,copy=False,order=order,subok=True)
TypeError: float() argument must be a string or a number,not 'rv_frozen'

更新:

这是基于以下标记答案的完整代码解决方案。

from scipy.stats import norm
import numpy as np
import matplotlib.pyplot as plt

mean = 64.43
standard_deviation = 2.99
random_weights = np.random.normal(mean,standard_deviation,30)

# Plot between -10 and 10 with .01 steps.
x_axis = np.arange(50.0,30)])
plt.show()

解决方法

norm(mean,standard_deviation) 不会从正态分布中生成随机样本。对于随机样本,使用 rvs() 方法,例如normal(mean,standard_deviation).rvs()norm.rvs(mean,standard_deviation)。或者使用 numpy 随机数生成器。

此外,rvs 方法接受一个 size 参数,因此您可以编写

random_weights = norm.rvs(mean,standard_deviation,size=30)

题外话:我认为如果您将 alpha=0.5(或其他一些分数--实验)添加到 scatter函数调用。

,

您在列表中存储了 30 个正态随机变量。我认为您打算从一个正态随机变量中绘制 30 个随机观察值。

# Draw 30 samples from a normal distribution
mean = 64.43
standard_deviation = 2.99
random_weights = norm(mean,standard_deviation).rvs(30) # Use .rvs()

x_axis = np.arange(50.0,80.0,0.01)
plt.plot(x_axis,norm.pdf(x_axis,mean,standard_deviation))
plt.scatter(random_weights,[0 for _ in range(0,30)])
plt.show()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。