You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matplotlib中指定箭头下方数据占总量的比例并标注

在Matplotlib直方图中计算并标注箭头覆盖区域的数据占比

实现方法与代码示例

1. 准备数据与基础直方图绘制

先生成示例数据,绘制直方图时捕获区间边界和频数——这是计算占比的核心依据:

import numpy as np
import matplotlib.pyplot as plt

# 生成随机正态分布数据
np.random.seed(42)
data = np.random.normal(loc=50, scale=15, size=1000)

# 绘制直方图,保存区间边界(bins)和各区间样本数(n)
n, bins, patches = plt.hist(data, bins=20, edgecolor='black')

2. 计算目标区域的样本占比

假设箭头覆盖的是数据范围[40, 60],通过筛选直方图区间来统计该范围内的样本总数,再计算占比:

# 定义箭头覆盖的数据范围
target_low = 40
target_high = 60

# 筛选出完全落在目标范围内的直方图区间
mask = (bins[:-1] >= target_low) & (bins[1:] <= target_high)
# 统计目标区域的总样本数
target_total = n[mask].sum()
# 计算占比(转为百分比)
ratio = (target_total / len(data)) * 100

如果目标范围跨区间边界,可调整mask条件为(bins[1:] > target_low) & (bins[:-1] < target_high),确保覆盖所有重叠区间

3. 添加箭头与占比标注

在图表上绘制箭头指向目标区域,并用文本标注计算出的占比:

# 绘制红色箭头指向目标区域中心
plt.arrow(x=50, y=150, dx=0, dy=-50, width=0.5, head_width=2, color='red', zorder=5)

# 标注占比,保留两位小数
plt.text(x=55, y=120, s=f'占比: {ratio:.2f}%', fontsize=12, color='red', zorder=6)

# 完善图表属性
plt.xlabel('数据值')
plt.ylabel('频数')
plt.title('直方图及目标区域占比')
plt.grid(axis='y', alpha=0.3)
plt.show()

手动箭头位置的适配

如果箭头是手动点击或拖拽定位的,需将箭头的像素坐标转换为数据轴坐标,再匹配到对应的直方图区间,重复上述占比计算逻辑即可。

内容的提问来源于stack exchange,提问作者Kirill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 10:17:29