我有一组直方图,每个直方图都使用 pandas 数据框的单列和 matplotlib.pyplot.hist 函数。然而,每组数据的长度不同,所以我想对每个直方图进行归一化;使用内置密度选项对我的数据没有意义,因此我想将每个 bin 高度除以最大 bin 高度。
总的来说,我想知道如何 1- 从 plt.hist 制作的直方图中提取 bin 高度 2- 将所有 bin 高度除以最大值(这里被数据类型混淆,我想我正在尝试划分两个元组?) 3 - 使用标准化的 bin 高度绘制新的直方图。
理想情况下,我希望按照这样的顺序执行此操作:在原始图中调整我选择的 bin 编号,然后重新运行以更新原始图和归一化图。
我尝试命名 plt.hist 函数返回的内容,然后除以最大值,但是唯一没有抛出错误的版本给了我一个没有意义的图(我认为我将值分箱而不是bin 高度,我也不太明白 n、bin 和 patch 是什么)
(n, bins, patches) = plt.hist(df['values'], bins=50)
plt.hist(df['values']/max(n), bins 50)
plt.hist()
有3个返回值:
要再次使用返回值,您需要创建条形图,而不是直方图。新的直方图会将 50 个计数再次分类为新计数。
import matplotlib.pyplot as plt
import numpy as np
plt.figure()
values = np.random.randn(10000).cumsum()
counts, bin_edges, _bars = plt.hist(values, bins=50)
plt.xlabel('Values')
plt.ylabel('Counts')
plt.show()
plt.figure()
plt.bar(bin_edges[:-1], counts / counts.max(), width=np.diff(bin_edges), align='edge')
plt.xlabel('Values')
plt.ylabel('Percentage vs highest bar')
plt.show()
可以通过调用
np.histogram()
来跳过绘制原始直方图。除了图形元素之外,它具有相同的返回值: