来自循环生成的数组的Python直方图

时间:2014-01-07 09:52:05

标签: python arrays matplotlib histogram

import random
import pylab
import matplotlib.pyplot as plt

for count in range(0,1000):

#for loop used in conjunction with a count and range to produce 1000 numbers #

    x=random.gauss(550,30)

    a=pylab.array([50000 ,30000 ,10000 ,0], float)

    s=pylab.array([0 ,100 ,30], float)

    A=pylab.array([((x+(s[0]))/2) ,((x+(s[1]))/2) ,((x+(s[2]))/2)])

    D=pylab.array([(a[0]-a[1]) ,(a[1]-a[2]) ,(a[2]-a[3])])

    T=pylab.array([(D[0]/A[0]) ,(D[1]/A[1]) ,(D[2]/A[2])])

    Tc=pylab.array([(T[0]/20000) ,(T[1]/20000) ,(T[2]/10000)])

    B=pylab.array([(50000) ,(30000) ,(20000) ,(3000) ,(0)], float)

    T3=pylab.array([(Tc[0]*20000) ,(Tc[1]*10000) ,((Tc[1]*10000)+(Tc[2]*7000)),(Tc[2]*3000)])

    S=pylab.array([(2) ,(6) ,(3) ,(0)])

    W=pylab.array([(T3[0]*S[3]) ,(T3[1]*S[2]) ,(T3[2]*S[1]) ,(T3[3]*S[0])])

    W=(4600)+W[0]+W[1]+W[2]+W[3]

    #need to plot W which is generated using the equations stored in the arrays above    based on  #the random values for generated for x.


plt.hist([x], bins=[20])
plt.show()

当我尝试绘制它时,虽然生成的图表总是空白,即没有绘制任何内容

非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您想在直方图中绘制生成的W值。为此,您需要将它们保存在列表中,从当前脚本执行此操作的最简单方法是在for循环之前添加一行:

W_list = []

这会创建一个空数组,然后在计算W值后添加

W=(4600)+W[0]+W[1]+W[2]+W[3]
W_list.append(W)

循环运行后,您有一个可以通过

绘制的值列表
plt.hist(W_list, bins=20)

您的脚本未运行的原因首先是您尝试绘制的值是[x],这只是您在for循环中生成的最后一个随机数的列表。其次,通过使bin的数量为bins=[20],你使matplotlib的行为奇怪,这应该只是一个整数,如bins=20

您还应该注意如何命名变量,因为这可能会在将来导致错误。例如,您首先创建W作为数组,然后在下一行执行操作并创建一个名为W的新变量,它是一个浮点数。在这种情况下,它不会破坏您的代码,但最好是创建新变量并为它们赋予意义相同的名称。