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

如何使用sns.scatterplot绘制多组Hours与GPA的关系散点图

解决方法

你的问题根源在于数据集格式不匹配:CSV里包含3组重复的Hours和GPA列,pandas读取后会自动为重复列名添加后缀(比如Hours.1、GPA.1等),但你的代码仅调用了原始的Hours和GPA列,因此只绘制了第一组数据。

要展示所有3组Hours与GPA的关系,需要先把宽格式数据转成长格式(tidy data),再用seaborn绘制:

步骤1:修正数据加载与格式转换

# Author: Evan Gertis
# Date  : 11/09
# program: Linear Regression
import seaborn as sns
import pandas as pd
import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

# Step 1: 加载数据并手动指定列名,避免自动生成后缀
col_names = ["Hours_1", "GPA_1", "Hours_2", "GPA_2", "Hours_3", "GPA_3"]
grades = pd.read_csv("grades.csv", names=col_names, header=0) 
logging.info(grades.head())

# Step 2: 把3组数据合并成长格式
tidy_grades = pd.DataFrame()
for group_num in range(1, 4):
    # 提取当前组的列并统一重命名
    group_data = grades[[f"Hours_{group_num}", f"GPA_{group_num}"]]
    group_data = group_data.rename(columns={
        f"Hours_{group_num}": "Hours",
        f"GPA_{group_num}": "GPA"
    })
    # 添加组别标记,方便后续区分
    group_data["Group"] = f"Group {group_num}"
    # 拼接到总数据框
    tidy_grades = pd.concat([tidy_grades, group_data], ignore_index=True)

步骤2:绘制所有组的散点图

现在可以基于长格式数据绘制所有组的关系,还能通过颜色区分不同组别:

# Step 3: 绘制带组别区分的散点图
plot = sns.scatterplot(data=tidy_grades, x="Hours", y="GPA", hue="Group")
# 优化图表标签与标题
plot.set_title("Hours vs GPA (All Groups)")
plot.set_xlabel("Study Hours")
plot.set_ylabel("GPA")

fig = plot.get_figure()
fig.savefig("out_all_groups.png")

补充说明

  • 如果不需要区分组别,只想把所有数据点叠加展示,直接去掉hue="Group"参数即可
  • 长格式数据是seaborn等可视化工具的通用适配格式,能大幅提升多组数据的处理灵活性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:05:25