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

如何在Plotnine的facet_wrap/grid中添加回归线方程?

Plotnine分面图添加线性回归方程与R²

要在Plotnine的分面图中为每个子图添加线性回归方程和R²,核心是按分面分组计算回归参数,再将标注文本映射到对应分面,具体实现如下:

完整实现代码

import plotnine as p9
from scipy import stats
from plotnine.data import mtcars as df
import pandas as pd

# 1. 按分面变量(gear)分组计算回归参数与标注文本
def calc_regression_stats(group):
    slope, intercept, r_value, _, _ = stats.linregress(group['wt'], group['mpg'])
    r_squared = r_value ** 2
    # 格式化方程文本,保留合适的小数位数
    eq_text = f'y = {slope:.2f}x + {intercept:.2f}; R² = {r_squared:.2f}'
    # 返回每个分组的标注位置(选每个分面的右上角,可根据数据调整)
    return pd.DataFrame({
        'gear': [group['gear'].iloc[0]],
        'eq_text': [eq_text],
        'x': [group['wt'].max() * 0.7],  # x位置设为权重最大值的70%
        'y': [group['mpg'].max() * 0.9]   # y位置设为油耗最大值的90%
    })

# 生成每个分面对应的标注数据
annot_df = df.groupby('gear').apply(calc_regression_stats).reset_index(drop=True)

# 2. 绘制分面图并添加标注
plot = (
    p9.ggplot(data=df, mapping=p9.aes('wt', 'mpg', color='factor(gear)'))
    + p9.geom_point()
    + p9.facet_wrap('~ gear')
    + p9.geom_smooth(method='lm', formula='y~x', se=False, color='black')
    + p9.xlab('Wt')
    + p9.ylab('MPG')
    # 添加每个分面的回归方程标注
    + p9.geom_text(
        data=annot_df,
        mapping=p9.aes(x='x', y='y', label='eq_text'),
        color='black',
        size=9
    )
)

print(plot)

关键细节说明

  • 分组计算回归参数:用groupby('gear')按分面变量分组,通过自定义函数calc_regression_stats计算每组的斜率、截距和R²,并格式化方程文本。
  • 标注位置调整:x和y的取值根据每组数据的极值动态计算,保证标注在每个分面的合理位置(避免遮挡数据),可根据你的数据集调整比例。
  • geom_text映射分面:通过指定data=annot_df,让标注文本自动匹配对应的分面(gear字段对应分面变量),实现每个子图显示专属的回归方程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 20:22:28