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

如何在Matplotlib中按条件显示Seaborn散点图的文本标签

实现方案

方法1:修改原有循环,增加条件判断(改动最小)

只需要在原有循环的plt.text逻辑外增加条件判断即可,修改后完整代码如下:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 构造数据集
data = {'Var1':[3,  8,  4,  2, 13],
        'Var2':[5,  7,  9,  10, 15],
        'Name':['obs1', 'obs2', 'obs3', 'obs4', 'obs5']}  
df1 = pd.DataFrame(data)

# 绘制散点图
sns.scatterplot(data=df1,x='Var1',y='Var2')

# 仅给符合条件的点加标签
for i in range(df1.shape[0]):
    # 增加Var2的条件判断:高于14 或 低于8
    if df1.Var2[i] > 14 or df1.Var2[i] < 8:
        plt.text(x=df1.Var1[i]+0.3, y=df1.Var2[i]+0.3,s=df1.Name[i], 
                 fontdict=dict(color="black",size=10),
                 bbox=dict(facecolor="white",alpha=0.5))
plt.show()

运行后只会给obs1(Var2=5<8)、obs2(Var2=7<8)、obs5(Var2=15>14)三个点添加标签。

方法2:先筛选符合条件的子集再遍历(数据量大时效率更高)

先过滤出满足条件的观测点,再遍历子集添加标签,不需要遍历全量数据:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

data = {'Var1':[3,  8,  4,  2, 13],
        'Var2':[5,  7,  9,  10, 15],
        'Name':['obs1', 'obs2', 'obs3', 'obs4', 'obs5']}  
df1 = pd.DataFrame(data)

sns.scatterplot(data=df1,x='Var1',y='Var2')

# 先筛选符合条件的子集
cond = (df1['Var2'] > 14) | (df1['Var2'] < 8)
df_label = df1[cond]

# 遍历子集添加标签
for _, row in df_label.iterrows():
    plt.text(x=row['Var1']+0.3, y=row['Var2']+0.3, s=row['Name'],
             fontdict=dict(color="black",size=10),
             bbox=dict(facecolor="white",alpha=0.5))
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:45:11