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

仅含x坐标的一维seaborn箱线图使用plt.text()无y参数解决方案

一维水平箱线图标注y参数解决方案

首先明确核心逻辑:仅指定x参数的seaborn水平箱线图属于单分类箱线图,所有数据、箱体、离群点对应的y轴坐标固定为0,你之前传入0后标注位置异常是因为文字直接与箱体/离群点重叠,只需增加小范围偏移量即可解决,还可以配合对齐参数、背景框优化显示效果。

实现说明

  1. 绘图时先获取axes对象,可动态读取坐标轴范围计算适配性偏移量,避免固定偏移在不同画布尺寸下失效
  2. 遍历整行数据即可拿到需要标注的Query、URL、CTR对应字段,不要仅遍历CTR单列
  3. 偏移量可根据需求调整,标注放在箱体上方就加正偏移,放在下方就加负偏移

完整可运行代码

import seaborn as sns
import matplotlib.pyplot as plt

# 你的数据预处理逻辑
df_ = df[df.Clicks > 4 ]
# 计算统计值
median = df_['CTR'].median()
ctr_q1 = df_.quantile(0.25)['CTR']
ctr_q3 = df_.quantile(0.75)['CTR']
outlier_lim = ctr_q3 + 1.5 * (ctr_q3 - ctr_q1)

# 绘图时获取ax对象
ax = sns.boxplot(x=df_['CTR'])
plt.xlabel("CTR")

# 动态计算y偏移量,适配不同画布尺寸,比例可自行调整
y_min, y_max = ax.get_ylim()
y_offset = (y_max - y_min) * 0.1 

# 标注离群值
for _, row in df_.iterrows():
    if row['CTR'] > outlier_lim:
        # 自定义标注内容,包含所需的三个字段
        label = f"Query:{row['Query']}\nURL:{row['URL']}\nCTR:{round(row['CTR'],3)}"
        plt.text(
            x = row['CTR'],
            y = 0 + y_offset, # 以离群点的y坐标0为基准向上偏移
            s = label,
            ha = 'left', # 左对齐避免覆盖离群点
            va = 'bottom',
            fontsize = 8,
            bbox = dict(facecolor='white', alpha=0.7, pad=2) # 可选:加半透明白色背景提升可读性
        )

# 标注中位数、四分位数示例
plt.text(x=median, y=0 - y_offset, s=f"中位数:{round(median,3)}", ha='center', va='top', fontsize=9)
plt.text(x=ctr_q1, y=0 - y_offset, s=f"Q1:{round(ctr_q1,3)}", ha='center', va='top', fontsize=9)
plt.text(x=ctr_q3, y=0 - y_offset, s=f"Q3:{round(ctr_q3,3)}", ha='center', va='top', fontsize=9)

plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:06:00