我试图绘制标准直方图,但是在y轴上得到1作为最大值,我得到不同的数字.
对于数组k =(1,4,3,1)
import numpy as np
def plotGraph():
import matplotlib.pyplot as plt
k=(1,4,3,1)
plt.hist(k, normed=1)
from numpy import *
plt.xticks( arange(10) ) # 10 ticks on x axis
plt.show()
plotGraph()
我得到这个直方图,看起来不像诺曼.
对于不同的数组k =(3,3,3,3)
import numpy as np
def plotGraph():
import matplotlib.pyplot as plt
k=(3,3,3,3)
plt.hist(k, normed=1)
from numpy import *
plt.xticks( arange(10) ) # 10 ticks on x axis
plt.show()
plotGraph()
我得到这个直方图,最大y值是10.
对于不同的k,即使normed = 1或normed = True,我也得到不同的y的最大值.
为什么规范化(如果有效)会根据数据发生变化,如何使y的最大值等于1?
更新:
import numpy as np
def plotGraph():
import matplotlib.pyplot as plt
k=(1,4,3,1)
weights = np.ones_like(k)/len(k)
plt.hist(k, weights=weights)
from numpy import *
plt.xticks( arange(10) ) # 10 ticks on x axis
plt.show()
plotGraph()
结果:
我究竟做错了什么?
谢谢
解决方法:
当您绘制标准化的直方图时,高度不应该总和为1,但曲线下面的区域应总计为1:
In [44]:
import matplotlib.pyplot as plt
k=(3,3,3,3)
x,bins,p=plt.hist(k, normed=1)
from numpy import *
plt.xticks( arange(10) ) # 10 ticks on x axis
plt.show()
In [45]:
print bins
[ 2.5 2.6 2.7 2.8 2.9 3. 3.1 3.2 3.3 3.4 3.5]
这个例子中,箱宽为0.1,曲线下方的面积总和为1(0.1 * 10).
要使高度之和为1,请在plt.show()之前添加以下内容:
for item in p:
item.set_height(item.get_height()/sum(x))
标签:python,matplotlib,normalization
来源: https://codeday.me/bug/20190712/1443783.html