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

如何在Seaborn散点图中绘制x_max、x_min、y_min和y_max值?

解决方法

首先处理数据集的缺失值,然后筛选出你需要的四个极值点,再在原有散点图上叠加标记。以下是完整代码:

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

# 加载数据并清理缺失值(避免极值计算出错)
df = sns.load_dataset("penguins").dropna(subset=["body_mass_g", "sex", "island"])

# 绘制基础散点图
sns.scatterplot(data=df, x="island", y="body_mass_g", hue="sex", s=300)

# 筛选四个极值点
# 1. 全局体重最大值点
y_max = df.loc[df["body_mass_g"].idxmax()]
# 2. 全局体重最小值点
y_min = df.loc[df["body_mass_g"].idxmin()]
# 3. 第一个岛屿(按名称排序)的体重最大值点
x_min_island = df["island"].sort_values().unique()[0]
x_min_y_max = df[df["island"] == x_min_island].loc[df[df["island"] == x_min_island]["body_mass_g"].idxmax()]
# 4. 最后一个岛屿(按名称排序)的体重最小值点
x_max_island = df["island"].sort_values().unique()[-1]
x_max_y_min = df[df["island"] == x_max_island].loc[df[df["island"] == x_max_island]["body_mass_g"].idxmin()]

# 整合极值点数据
extremes_df = pd.DataFrame([y_max, y_min, x_min_y_max, x_max_y_min])

# 叠加标记极值点——用红色五角星突出显示
sns.scatterplot(data=extremes_df, x="island", y="body_mass_g", color="#ff3333", marker="*", s=500, label="极值点")

# 调整图例和显示
plt.legend(loc="upper right")
plt.show()

自定义调整

如果你的x_max/x_min指的是特定岛屿(比如直接指定Biscoe或Torgersen),直接修改x_min_island和x_max_island的值即可:

x_min_island = "Biscoe"
x_max_island = "Torgersen"

如果需要标记每个岛屿的体重最大/最小值(共6个点),可以用循环遍历所有岛屿:

extremes = []
for island in df["island"].unique():
    island_df = df[df["island"] == island]
    extremes.append(island_df.loc[island_df["body_mass_g"].idxmax()])
    extremes.append(island_df.loc[island_df["body_mass_g"].idxmin()])
extremes_df = pd.DataFrame(extremes)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:55:23