如何使用 Pandas 和 Seaborn 为多变量散点图添加线性回归线

夜伟酱_1729

夜伟酱_1729

2026-07-22

752人浏览

原创

如何使用 Pandas 和 Seaborn 为多变量散点图添加线性回归线

本文详解如何在 Pandas 数据可视化基础上,利用 Seaborn 的 lmplot 或 regplot 为多个发射线光度与 AGN 光度的关系图添加线性回归线,并提供可复用的完整代码示例。

本文详解如何在 pandas 数据可视化基础上,利用 seaborn 的 `lmplot` 或 `regplot` 为多个发射线光度与 agn 光度的关系图添加线性回归线,并提供可复用的完整代码示例。

Pandas 自带的 .plot() 方法擅长基础绘图,但不原生支持自动拟合回归线;而 Seaborn 作为基于 Matplotlib 的高级统计可视化库,提供了开箱即用的线性拟合功能。针对您当前将四种发射线(Ha、OII、Hβ、OIII)同时对 log_AGN_LUM(type-2) 作散点图的需求,推荐两种专业且清晰的实现方式:

✅ 方案一:使用 seaborn.regplot(推荐用于单变量回归分析)

若需为每组变量单独绘制带回归线的散点图(更易解读斜率与相关性),可循环调用 regplot,并统一坐标轴便于对比:

Pandas Linux版 2.3.3
Pandas Linux版 2.3.3

Pandas 2.3.3 历史版本下载,来自 PyPI 官方发布,适合旧项目兼容、数据分析脚本复现和指定环境安装。

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

df = pd.read_csv('/home/beki/Desktop/Final_report9.csv')

# 设置全局样式
sns.set_style("whitegrid")
fig, axes = plt.subplots(2, 2, figsize=(12, 10))
axes = axes.flatten()

variables = [
    ('log_LUM_Ha', 'Log Hα Luminosity'),
    ('log_Lum_OII', 'Log [OII] Luminosity'),
    ('log_LUM_H_beta', 'Log Hβ Luminosity'),
    ('log_LUM_OIII', 'Log [OIII] Luminosity')
]

for i, (y_col, label) in enumerate(variables):
    sns.regplot(
        data=df,
        x='log_AGN_LUM(type-2)',
        y=y_col,
        ax=axes[i],
        scatter_kws={'alpha': 0.6, 's': 30},
        line_kws={'color': 'red', 'linestyle': '--'},
        ci=95  # 显示 95% 置信区间带
    )
    axes[i].set_xlabel('AGN Luminosity [log(L$_{\rm AGN}$)]')
    axes[i].set_ylabel(label)
    axes[i].set_title(f'{label} vs AGN Luminosity')

plt.tight_layout()
plt.show()

✅ 方案二:使用 seaborn.lmplot(适合分面/分类回归)

若希望所有数据共用同一坐标系并按变量类型着色+拟合(类似您原图效果),需先将数据“长格式化”(melt),再用 lmplot:

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

df = pd.read_csv('/home/beki/Desktop/Final_report9.csv')

# 将多列目标变量转为长格式
melted = df.melt(
    id_vars=['log_AGN_LUM(type-2)'],
    value_vars=['log_LUM_Ha', 'log_Lum_OII', 'log_LUM_H_beta', 'log_LUM_OIII'],
    var_name='Emission_Line',
    value_name='Luminosity'
)

# 重命名类别以提升可读性
melted['Emission_Line'] = melted['Emission_Line'].map({
    'log_LUM_Ha': 'Hα',
    'log_Lum_OII': '[OII]',
    'log_LUM_H_beta': 'Hβ',
    'log_LUM_OIII': '[OIII]'
})

# 绘制分组回归图(每组自动拟合独立回归线)
g = sns.lmplot(
    data=melted,
    x='log_AGN_LUM(type-2)',
    y='Luminosity',
    hue='Emission_Line',
    height=6,
    aspect=1.4,
    scatter_kws={'alpha': 0.7, 's': 40},
    line_kws={'linewidth': 2},
    ci=95
)
g.set_axis_labels('AGN Luminosity [log(L$_{\rm AGN}$)]', 'Emission Line Luminosity [log(L)]')
g.fig.suptitle('AGN–Line Luminosity Correlations with Linear Fits', y=1.02, weight='bold')
plt.show()

⚠️ 注意事项:

  • 数据质量优先:确保 log_AGN_LUM(type-2) 与各 log_* 列无缺失值或异常离群点,否则回归线易失真。建议先执行 df.dropna(subset=['log_AGN_LUM(type-2)', 'log_LUM_Ha', ...])。
  • 相关性 ≠ 因果性:线性回归仅描述数值趋势,不能推断物理因果关系;建议后续补充 Pearson 相关系数(df.corr().loc[['log_AGN_LUM(type-2)'], [...])量化强度。
  • 避免过度拟合:lmplot/regplot 默认使用 OLS(普通最小二乘),若关系明显非线性,可尝试 order=2 添加二次项,或改用 sns.scatterplot + 手动 np.polyfit。

通过上述任一方案,您不仅能直观呈现线性关联趋势,还能获得统计置信区间与标准化视觉表达——这正是专业天文数据分析中验证经验标定关系的关键步骤。

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1671

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

4204

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1669

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

24357

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2987

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3007

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1163

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

596

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2323

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Pandas 官方文档与用户指南
Pandas 官方文档与用户指南

共0课时 | 0人学习

Pandas 教程
Pandas 教程

共15课时 | 1.9万人学习