来自numpy直方图输出的Matplotlib直方图

And*_*ffe 13 python numpy matplotlib histogram

我已经numpy.histogram()在一大堆数据集的子集上运行了.我想将计算与图形输出分开,所以我不想调用matplotlib.pyplot.hist()数据本身.

原则上,这两个函数都采用相同的输入:原始数据本身,在分箱之前.该numpy版本仅返回nbin+1仓的边缘和nbin频率,而matplotlib版本的推移,使情节本身.

那么有没有一种简单的方法从numpy.histogram()输出本身生成直方图,而无需重做计算(并且必须保存输入)?

要清楚,numpy.histogram()输出是箱的nbin+1箱边缘列表nbin; 没有matplotlib例行程序将这些作为输入.

Imp*_*est 12

您可以绘制numpy.histogram使用的输出plt.bar.

import matplotlib.pyplot as plt
import numpy as np; np.random.seed(1)

a = np.random.rayleigh(scale=3,size=100)
bins = np.arange(10)

frq, edges = np.histogram(a, bins)

fig, ax = plt.subplots()
ax.bar(edges[:-1], frq, width=np.diff(edges), ec="k", align="edge")

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


tdy*_*tdy 6

matplotlib 3.4.0 中的新增功能

不再需要手动重建条形图,因为现在有一个内置方法:

对于知道步骤的值和边缘的常见情况,例如在绘制 的输出时,请使用plt.stairs方法np.histogram

请注意,楼梯默认绘制为线条,因此请使用fill=True实心直方图:

a = np.random.RandomState(1).rayleigh(3, size=100)

counts, edges = np.histogram(a, bins=range(10))
plt.stairs(counts, edges, fill=True)
Run Code Online (Sandbox Code Playgroud)

如果您想要更传统的“酒吧”美学,请结合使用plt.vlines

plt.stairs(counts, edges, fill=True)
plt.vlines(edges, 0, counts.max(), colors='w')
Run Code Online (Sandbox Code Playgroud)

如果不需要计数和边,只需np.histogram直接解压到plt.stairs

plt.stairs(*np.histogram(a), fill=True)
Run Code Online (Sandbox Code Playgroud)

和往常一样,有一个ax.stairs对应的:

fig, ax = plt.subplots()
ax.stairs(*np.histogram(a), fill=True)
Run Code Online (Sandbox Code Playgroud)