实现绘制均匀分布的 ValueError 问题

问题描述

所以我正在尝试使用 scipy.stats 绘制均匀分布,但是遇到了这个错误,与形状变换有关,有人可以告诉我为什么会发生这种情况/我的代码应该是什么样子,谢谢。

完整代码和回溯如下:

# UNIFORM disTRIBUTION:

from scipy.stats import uniform
import matplotlib.pyplot as plt

fig,ax = plt.subplots(1,1)

n = 10  # total data number

x = list(range(0,n + 1))

# create a list of values that follow uniform distribution
r = uniform.rvs(size=1000)
ax.vlines(x,r,colors = "blue")
plt.show()

完整追溯:

ValueError Traceback(最近一次调用最后一次)在 12 # 创建一个服从均匀分布的值列表 13 r =uniform.rvs(大小=1000) ---> 14 ax.vlines(x,颜色 = "蓝色") 15 plt.show() 16

\matplotlib_init_.py 在内(ax,数据,*args,**kwargs)1436 def内(ax,*args, 数据=无,**kwargs):1437 如果数据是无: -> 1438 return func(ax,*map(sanitize_sequence,args),**kwargs) 1439 1440 bound = new_sig.bind(ax,*args,**kwargs)

\matplotlib\axes_axes.py 在 vlines(self,x,ymin,ymax,颜色,linestyles,label,**kwargs)
1257 masked_verts[:,1] = ymin 1258
masked_verts[:,1,0] = x -> 1259 masked_verts[:,1] = ymax 1260 1261 lines = mcoll.LineCollection(masked_verts,colors=colors,

\numpy\ma\core.py 在 setitem(self,indx,value) 3378 如果 _mask 是 nomask: 3379 # 设置数据,然后设置掩码 -> 3380 _data[indx] = dval 3381 如果 mval 不是 nomask:3382 _mask = self._mask = make_mask_none(self.shape,_dtype)

ValueError: 无法将输入数组从形状 (1000) 广播到 形状 (11)

解决方法

您正在尝试绘制大小为 xn=10 和大小为 rsize=1000。它们的大小必须相同。

import numpy as np
import scipy.stats as sps

import matplotlib.pyplot as plt

n = 1000
x = range(n)
# define the distribution
# by default [0,1]
# https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.uniform.html
dist = sps.uniform()
# generate n random variates
r = dist.rvs(n)

plt.plot(x,r)

enter image description here