matplotlib直方图的不对称性

2024-04-28 23:38:32 发布

您现在位置:Python中文网/ 问答频道 /正文

在阅读了matplotlib文档之后,这个范围忽略了较低和较高的异常值。在

“范围:元组,可选,默认值:无 垃圾箱的上限和下限。上下异常值 被忽略。如果未提供,range为(x.min(),x.max())。范围 如果bins是序列,则不起作用。”

请看以下示例:

import numpy as np
import matplotlib.pyplot as plt

numbers1 = np.arange(1.,101.)
numbers2 = np.arange(0.5,100.5)
numbers3 = np.arange(0,100)

plt.figure(figsize=(12,4))
plt.subplot(1,3,1)
plt.hist(numbers1, bins = 25, range = (25,75), normed=True)
plt.title('numbers1')
plt.ylim((0,0.035))
plt.subplot(1,3,2)
plt.hist(numbers2, bins = 25, range = (25,75), normed=True)
plt.title('numbers2')
plt.ylim((0,0.035))
plt.subplot(1,3,3)
plt.hist(numbers3, bins = 25, range = (25,75), normed=True)
plt.title('numbers3')
plt.ylim((0,0.035))

不幸的是我不能发布结果的图片。。。(声誉不够),但是:numbers1和numbers3的直方图的值都高于我对最后一个bin的期望值。在

为什么会这样,真的应该是这样吗?我希望他们看起来都像中间那个。:-(

enter image description here


Tags: truetitlematplotlibnprangeplthistbins
1条回答
网友
1楼 · 发布于 2024-04-28 23:38:32

25-75范围内的所有数字都用于直方图。对于数组numbers1numbers3,由于25和75都包含在内,所以它们正好是51个数字。你把这些数字强制放在25个箱子里,这意味着有24个高度为2/51的箱子和一个高度为3/51的箱子。Matplotlib选择将73、74和75都放在最后一个箱子中,并使其成为最大的。在

对于numbers2,范围内只有50个数字,从25.5到74.5。因此,每个箱子的高度是2/50。在

您可以看到,对于numbers1numbers3,当您使范围(25, 74.99999)或{}时,较高的箱子消失了,因为25或75被排除在外,并且范围内有50个数字。在


您可以得到bin的限制,因为plt.hist返回值、bin和补丁。所以如果你用

(n, bins, p) = plt.hist(numbers1, bins = 25, range = (25,75), normed=True)

bins包含一个包含26个存储单元限制的数组。所以这是所有箱子的起点加上最后一个箱子的终点。用这个你可以精确地推断出每个值在哪个箱子里消失了。在

相关问题 更多 >