如何在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
相关产品推荐
相关产品推荐

