给定一些遵循任意分布的数字列表,我如何为matplotlib.pyplot定义bin位置。hist()
,以便每个箱子中的面积等于(或接近)某个恒定面积,A?应通过将箱子中的项目数乘以箱子的宽度来计算面积,其值应不大于A。
这是一个MWE,用于显示具有正态分布样本数据的直方图:
import matplotlib.pyplot as plt
import numpy as np
x = np.random.randn(100)
plt.hist(x, bin_pos)
plt.show()
这里bin_pos
是一个列表,表示垃圾箱边界的位置(参见此处的相关问题。
我发现这个问题很有趣。解决方案取决于你是要绘制一个密度函数,还是一个真正的直方图。后一种情况更具挑战性。这里有更多关于直方图和密度函数之间区别的信息。
这将实现密度函数所需的功能:
def histedges_equalN(x, nbin):
npt = len(x)
return np.interp(np.linspace(0, npt, nbin + 1),
np.arange(npt),
np.sort(x))
x = np.random.randn(1000)
n, bins, patches = plt.hist(x, histedges_equalN(x, 10), normed=True)
注意使用normed=True
,它指定我们正在计算和绘制密度函数。在这种情况下,面积相等(可以查看n*np.diff(bins)
进行检查)。还要注意,此解决方案涉及到查找具有相同点数的箱子。
以下解决方案为直方图提供了大致相等的面积框:
def histedges_equalA(x, nbin):
pow = 0.5
dx = np.diff(np.sort(x))
tmp = np.cumsum(dx ** pow)
tmp = np.pad(tmp, (1, 0), 'constant')
return np.interp(np.linspace(0, tmp.max(), nbin + 1),
tmp,
np.sort(x))
n, bins, patches = plt.hist(x, histedges_equalA(x, nbin), normed=False)
然而,这些盒子并不都是相等的区域。尤其是第一个和最后一个,往往比其他的大大约30%。这是正态分布尾部数据稀疏分布的产物,我相信它会在数据集中人口稀疏的任何时候持续存在。
附带说明:我稍微使用了一下值pow
,发现大约0.56
的值对于正态分布的RMS误差较低。我坚持使用平方根,因为它在数据间隔紧密(相对于bin宽度)时表现最佳,而且我很确定它有一个理论基础,我没有费心去挖掘(有人吗?)。
据我所知,这个问题不可能得到确切的解决办法。这是因为它对数据的离散化敏感。例如,假设数据集中的第一个点是-13处的异常值,下一个值是-3,如图中的红点所示:
现在假设直方图的总“面积”是150,您需要10个箱子。在这种情况下,每个直方图条的面积应该约为15,但你无法达到这一点,因为一旦你的条包含第二个点,它的面积就会从10跳到20。也就是说,数据不允许这个条的面积在10到20之间。一个解决方案可能是调整方框的下限,以增加其面积,但是,如果这个“间隙”在数据集的中间,这就开始变得随意,并且不起作用。
numpy.histogram()函数将输入数组和作为两个参数。 bin数组中的连续元素用作每个bin的边界。 Matplotlib 可以将直方图的数字表示转换为图形。 pyplot子模块的plt()函数将包含数据和数组的数组作为参数,并转换为直方图。
我希望matplotlib直方图以等间距的xax显示数据,尽管它的bin的值不是等间距的。我该怎么做?目前,年龄组“0-6”、“7-12”、“13-16”、“17-20”的条形图看起来比我的其他数据更薄,“17-20”的条形图与21-30的条形图重叠。xtick标签也重叠。我如何解决这些问题?
NumPy有一个numpy.histogram()函数,它是数据频率分布的图形表示。 相等水平尺寸的矩形对应于称为bin类间隔和对应于频率的variable height 。 numpy.histogram() numpy.histogram()函数将输入数组和bin作为两个参数。 bin数组中的连续元素充当每个bin的边界。 import numpy as np a = np.array([2
直方图(Histogram),又称质量分布图,它是一种条形图的一种,由一系列高度不等的纵向线段来表示数据分布的情况。 直方图的横轴表示数据类型,纵轴表示分布情况。 首先,我们需要了解柱状图和直方图的区别。直方图用于概率分布,它显示了一组数值序列在给定的数值范围内出现的概率;而柱状图则用于展示各个类别的频数。 例如,我们对某工厂的员工年龄做直方图统计,首先我们要统计出每一位员工的年龄,然后设定一个
我有一张桌子,比如: 生成虚拟数据: 我想用垫线 (v1.4) 在 Python 3 中完成一个任务: 绘制的直方图 按 两个小时,未能获得所需的直方图 我阅读了matplotlib的示例和用户指南。令人惊讶的是,我没有找到关于如何从颜色图中指定颜色的教程 我在谷歌上搜索过,但没有找到一个简洁的例子 我想一个人可以用,不导入一系列模块,例如,
有没有一种方法来绘制的CDF累积直方图的熊猫系列在Python中只使用海运?我有以下几点: 我知道我可以用绘制累积直方图,然后我知道我可以使用,但我想在Seaborn中实现这两个功能,就像用,提供kde拟合和直方图。有办法吗?