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

Python Pandas/Matplotlib:标注99%置信区间外的Org值

标注99%置信区间外的Org值的简便方法

当然有很简便的方式实现这个需求!咱们可以结合 pandas 的数据筛选和 matplotlib 的文本标注功能来快速搞定,下面分两种常用的方式给你演示:

方法一:基于DataFrame直接筛选标注

这种方式更直观,直接在你的DataFrame里找出超出区间的行,然后逐个标注:

# 先在你原有绘图代码的基础上,添加这段标注逻辑
plt.figure(figsize=(15,8))
plt.ylim(0, 100)
plt.margins(x=0)
plt.scatter(x,y,marker='o',c='white',edgecolors = 'black', alpha=.5)
plt.plot(x,up95, 'red', linestyle=':', dashes=(1, 5), linewidth=1)
plt.plot(x,low95, 'red', linestyle=':', dashes=(1, 5), linewidth=1)
plt.plot(x,up99, 'red', linestyle=':', dashes=(1, 5), linewidth=1)
plt.plot(x,low99, 'red', linestyle=':', dashes=(1, 5), linewidth=1)
plt.plot(x,middleLine, 'red', linestyle='-', dashes=(1, 2), linewidth=1)

# -------------------------- 新增标注代码 --------------------------
# 筛选出超出99%置信区间的点(注意统一单位:把Upper99/Lower99转成百分比和Success匹配)
outliers = sqlDf2[(sqlDf2['Success'] > sqlDf2['Upper99'] * 100) | 
                  (sqlDf2['Success'] < sqlDf2['Lower99'] * 100)]

# 遍历每个异常点,标注Org值
for _, row in outliers.iterrows():
    plt.text(
        row['Total'],  # x坐标
        row['Success'],  # y坐标
        row['Org'],  # 要标注的内容
        ha='center', va='bottom',  # 水平/垂直居中对齐
        bbox=dict(facecolor='lightyellow', alpha=0.7)  # 可选:添加背景框,让标注更醒目
    )
# ------------------------------------------------------------------

plt.show()

方法二:基于数组筛选标注

如果你更习惯用数组操作(和你原有代码风格一致),可以这样做:

# 同样在绘图代码之后添加标注逻辑
plt.figure(figsize=(15,8))
plt.ylim(0, 100)
plt.margins(x=0)
plt.scatter(x,y,marker='o',c='white',edgecolors = 'black', alpha=.5)
plt.plot(x,up95, 'red', linestyle=':', dashes=(1, 5), linewidth=1)
plt.plot(x,low95, 'red', linestyle=':', dashes=(1, 5), linewidth=1)
plt.plot(x,up99, 'red', linestyle=':', dashes=(1, 5), linewidth=1)
plt.plot(x,low99, 'red', linestyle=':', dashes=(1, 5), linewidth=1)
plt.plot(x,middleLine, 'red', linestyle='-', dashes=(1, 2), linewidth=1)

# -------------------------- 新增标注代码 --------------------------
# 生成异常点的掩码:找出y值超出99%上下限的位置
mask = (y > up99) | (y < low99)

# 获取异常点的坐标和对应的Org值
outlier_x = x[mask]
outlier_y = y[mask]
outlier_orgs = sqlDf2['Org'].values[mask]

# 逐个标注
for xi, yi, org in zip(outlier_x, outlier_y, outlier_orgs):
    plt.text(
        xi, yi, org,
        ha='center', va='top',  # 调整对齐方式避免和散点重叠
        color='darkblue', fontweight='bold'  # 自定义标注样式
    )
# ------------------------------------------------------------------

plt.show()

可选优化:带箭头的标注

如果担心标注和散点重叠,或者想更清晰地指向对应点,可以用plt.annotate()代替plt.text(),添加箭头指向:

for _, row in outliers.iterrows():
    plt.annotate(
        row['Org'],
        xy=(row['Total'], row['Success']),  # 箭头指向的点
        xytext=(row['Total'] + 15, row['Success'] + 3),  # 标注文本的位置(偏移一点)
        arrowprops=dict(arrowstyle='->', color='gray', alpha=0.6),  # 箭头样式
        fontsize=10
    )

这样就能轻松把所有超出99%置信区间的点对应的Org值标注在图上啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:35:36