问题描述
所以我正在尝试使用 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)
解决方法
您正在尝试绘制大小为 x
的 n=10
和大小为 r
的 size=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)