我正在尝试使用python绘制标准化的直方图,但总和不等于1。
例如
import numpy as np
import matplotlib.pyplot as plt
x = np.random.randn(1000)
o = plt.hist(x, stacked=True, density=True)
print(sum(o[0])
# 1.5499931498813149
由于bin宽度不等于1,因此,如果我检查曲线下的面积,则确实等于1,即
print(sum(o[0]*np.diff(o[1]))
# 1.0
但是,在matplotlib manual的density
参数部分中,它指出了
如果
stacked
也是True
,则直方图的总和将归一化为1。
为什么直方图的总和未归一化为1?为什么我还要乘以箱宽?我在读/做错什么?
P.S。我经历了重复的问题,但是当不建议使用参数normed
时,这些问题是针对较旧版本的matplotlib的。因此,我认为这些不再有用。
答案 0 :(得分:0)
如果我是正确的话,this.listOfStations.map(station => {
if(Object.keys(station.location).length > 0){
this.markers.push(marker([station.location.coordinates[0],station.location.coordinates[1]],{
icon: icon({
iconSize: [ 25, 41 ],
iconAnchor: [ 13, 41 ],
iconUrl: 'assets/marker-icon.png',
shadowUrl: 'assets/marker-shadow.png'
})
})
.bindPopup(`
<div align='center'>
<p style='font-size:18px;font-weight:bold'>Station: ${station.stationCode}</p>
<p style='font-size:14px;font-weight:italic'>${station.description}</p>
<a class='btn btn-xs btn-primary button-me' (click)="${this.consoleThis()}">View</a>
</div>
`)
// .on('click', (e) => {
// this.zone.run(() => {
// this.router.navigate(['/dashboard/station/' + station.stationCode]);
// })
// })
)};
});
的想法是当您有多个图时,它们将被“堆叠”,而不是并排放置。在此处查看图https://matplotlib.org/examples/statistics/histogram_demo_multihist.html
我用两个数据集运行它,stacked
似乎并没有改变输出值本身,只是图形表示。
如果您运行
stacked
然后x和y都将被标准化,我相信这就是您引用的文档的一部分。
无论哪种方式,都不能同时实现(1)值总和= 1(2)值总和乘以bin宽度= 1,除非bin的宽度等于1。