使用matplotlib的hist功能,如何让它显示条形图上每个bin的计数?
例如,
import matplotlib.pyplot as plt
data = [ ... ] # some data
plt.hist(data, bins=10)
Run Code Online (Sandbox Code Playgroud)
我们怎样才能在每个bin显示屏上显示计数?
tdy*_*tdy 46
有一种新plt.bar_label方法可以自动为条形容器添加标签。
plt.hist返回 bar 容器作为第三个输出:
data = np.random.default_rng(123).rayleigh(1, 70)
counts, edges, bars = plt.hist(data)
# ^
plt.bar_label(bars)
Run Code Online (Sandbox Code Playgroud)
如果您有分组或堆叠直方图,bars将包含多个容器(每组一个),因此迭代:
fig, ax = plt.subplots()
counts, edges, bars = ax.hist([data, data * 0.3], histtype='barstacked')
for b in bars:
ax.bar_label(b)
Run Code Online (Sandbox Code Playgroud)
请注意,您还可以通过以下方式访问酒吧容器ax.containers:
for c in ax.containers:
ax.bar_label(c)
Run Code Online (Sandbox Code Playgroud)
小智 8
看来hist不能这样做,你可以写一些像:
your_bins=20
data=[]
arr=plt.hist(data,bins=your_bins)
for i in range(your_bins):
plt.text(arr[1][i],arr[0][i],str(arr[0][i]))
Run Code Online (Sandbox Code Playgroud)
不是单独使用plt.hist()但具有一些附加功能的解决方案。
如果您不想事先指定您的 bin 并且只绘制密度条,但还想显示 bin 计数,您可以使用以下内容。
import numpy as np
import matplotlib.pyplot as plt
data = np.random.randn(100)
density, bins, _ = plt.hist(data, density=True, bins=20)
count, _ = np.histogram(data, bins)
for x,y,num in zip(bins, density, count):
if num != 0:
plt.text(x, y+0.05, num, fontsize=10, rotation=-90) # x,y,str
Run Code Online (Sandbox Code Playgroud)
结果如下所示:
| 归档时间: |
|
| 查看次数: |
7026 次 |
| 最近记录: |