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

如何在Seaborn配对回归图上添加统计量并修改绘图颜色?

Seaborn配对回归图优化方案

1. 在回归子图上添加相关系数、R²、p值

要在每张回归子图显示统计量,需借助scipy.stats计算指标,再自定义标注函数,通过pairplot的映射方法将文本添加到子图中。

实现步骤与代码示例

import numpy as np
import pandas as pd
from google.colab import files
from sklearn import preprocessing
import seaborn as sns
import matplotlib.pyplot as plt
from scipy import stats

# 数据加载与预处理
data = files.upload()
df = pd.read_excel(data['yieldDataset.xlsx'])
data1 = df.drop({'Date','class'}, axis=1)

# 归一化处理
scalar = preprocessing.MinMaxScaler()
data2 = scalar.fit_transform(data1)
normal = pd.DataFrame(data2, columns=data1.columns)
normal['class'] = df['class']

# 定义统计量标注函数
def annotate_stats(x, y, ax=None, **kwargs):
    if ax is None:
        ax = plt.gca()
    # 计算Pearson相关系数与p值
    corr, p_val = stats.pearsonr(x, y)
    # 计算R²(回归拟合优度)
    _, _, r_value, _, _ = stats.linregress(x, y)
    r_squared = r_value ** 2
    # 格式化标注文本
    text = f"r = {corr:.2f}\nR² = {r_squared:.2f}\np = {p_val:.3f}"
    # 在子图右上角添加带背景的文本
    ax.text(0.05, 0.95, text, transform=ax.transAxes, 
            bbox=dict(facecolor='white', alpha=0.8), 
            verticalalignment='top')

# 绘制配对回归图并添加标注
g = sns.pairplot(normal, kind='reg')
g.map_upper(annotate_stats)  # 给上三角子图加标注
# 若需要下三角也显示标注,取消下面一行注释
# g.map_lower(annotate_stats)
plt.show()

2. 修改绘图颜色为红色

可通过两种方式调整颜色,既可以统一设置散点和回归线颜色,也可以单独区分两者:

方法一:统一设置红色(散点+回归线)

g = sns.pairplot(normal, kind='reg', color='#ff0000')

方法二:单独调整散点与回归线颜色

g = sns.pairplot(normal, kind='reg', 
                 scatter_kws={'color': '#ff6666'},  # 浅红色散点
                 line_kws={'color': '#ff0000'})     # 深红色回归线

整合后的完整代码

import numpy as np
import pandas as pd
from google.colab import files
from sklearn import preprocessing
import seaborn as sns
import matplotlib.pyplot as plt
from scipy import stats

# 数据加载与预处理
data = files.upload()
df = pd.read_excel(data['yieldDataset.xlsx'])
data1 = df.drop({'Date','class'}, axis=1)

scalar = preprocessing.MinMaxScaler()
data2 = scalar.fit_transform(data1)
normal = pd.DataFrame(data2, columns=data1.columns)
normal['class'] = df['class']

# 定义统计量标注函数
def annotate_stats(x, y, ax=None, **kwargs):
    if ax is None:
        ax = plt.gca()
    corr, p_val = stats.pearsonr(x, y)
    _, _, r_value, _, _ = stats.linregress(x, y)
    r_squared = r_value ** 2
    text = f"r = {corr:.2f}\nR² = {r_squared:.2f}\np = {p_val:.3f}"
    ax.text(0.05, 0.95, text, transform=ax.transAxes, 
            bbox=dict(facecolor='white', alpha=0.8), 
            verticalalignment='top')

# 绘制红色配对回归图并添加统计标注
g = sns.pairplot(normal, kind='reg', color='#ff0000')
g.map_upper(annotate_stats)
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:26:05