matplotlib [2.2.2]标准化直方图的总和不等于1

时间:2018-07-04 00:54:53

标签: python matplotlib

我正在尝试使用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 manualdensity参数部分中,它指出了

  

如果stacked也是True,则直方图的总和将归一化为1。

为什么直方图的总和未归一化为1?为什么我还要乘以箱宽?我在读/做错什么?

P.S。我经历了重复的问题,但是当不建议使用参数normed时,这些问题是针对较旧版本的matplotlib的。因此,我认为这些不再有用。

1 个答案:

答案 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。