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

Altair绘制含线性与多项式回归的分面图故障排查请求

问题排查:Altair分面图中多项式回归无法显示的解决办法

问题描述

需要在Altair中制作分面图,每个分面叠加散点图、线性回归线和多项式回归线,但添加多项式回归后无法正常显示。尝试过调整1、3、5阶多项式,问题依旧。以下是原始数据和代码片段:

原始数据生成代码

years = list(range(2024, 2051))
rcp_scenarios = ['RCP2.6', 'RCP4.5', 'RCP6.0', 'RCP8.5']
data = {"YEAR": years} 
for rcp in rcp_scenarios:
   data[rcp] = np.random.uniform(low=500, high=2000, size=len(years))
df = pd.DataFrame(data)
df_melted = pd.melt(df, id_vars=["YEAR"], value_vars=rcp_scenarios, 
                        var_name="RCP", value_name="RR")

原始绘图代码

scatter = alt.Chart(All_RCP_Df_yearly).mark_circle(size=60, opacity=0.60).encode(
    x=alt.X('YEAR'),
    y=alt.Y('RR', title="Annual Precipitation [mm]"),
    color='RCP',
    tooltip=['YEAR', 'RR', 'RCP'])

linear_regression = alt.Chart(All_RCP_Df_yearly).transform_regression(
    'YEAR', 'RR', method='linear', groupby=['RCP']
).mark_line(opacity=0.75).encode(
    x='YEAR',
    y='RR',
    color='RCP')

polynomial_regression = alt.Chart(All_RCP_Df_yearly).transform_regression(
    'YEAR', 'RR', method='poly', order=2, groupby=['RCP']
).mark_line(opacity=0.75, strokeDash=[5, 3]).encode(
    x='YEAR',
    y='RR',
    color='RCP')

chart = scatter + linear_regression + polynomial_regression

chart = chart.facet(
    columns=2,
    facet=alt.Facet('RCP'))

chart.display()

问题原因

  1. 分面与groupby冲突:facet已经按照RCP完成数据分组,此时在transform_regression中再次使用groupby=['RCP']会导致重复分组,多项式回归的计算结果无法正确映射到对应分面,从而无法显示。
  2. 数据集名称不匹配:数据生成的是df_melted,但绘图代码中使用的是All_RCP_Df_yearly,二者需要保持一致。

修复后的完整代码

import altair as alt
import pandas as pd
import numpy as np

# 生成数据
years = list(range(2024, 2051))
rcp_scenarios = ['RCP2.6', 'RCP4.5', 'RCP6.0', 'RCP8.5']
data = {"YEAR": years} 
for rcp in rcp_scenarios:
   data[rcp] = np.random.uniform(low=500, high=2000, size=len(years))
df = pd.DataFrame(data)
df_melted = pd.melt(df, id_vars=["YEAR"], value_vars=rcp_scenarios, 
                        var_name="RCP", value_name="RR")

# 绘制散点图
scatter = alt.Chart(df_melted).mark_circle(size=60, opacity=0.60).encode(
    x=alt.X('YEAR'),
    y=alt.Y('RR', title="年降水量 [mm]"),
    color='RCP',
    tooltip=['YEAR', 'RR', 'RCP']
)

# 线性回归(移除groupby)
linear_regression = alt.Chart(df_melted).transform_regression(
    'YEAR', 'RR', method='linear'
).mark_line(opacity=0.75).encode(
    x='YEAR',
    y='RR',
    color='RCP'
)

# 多项式回归(移除groupby,示例为2阶)
polynomial_regression = alt.Chart(df_melted).transform_regression(
    'YEAR', 'RR', method='poly', order=2
).mark_line(opacity=0.75, strokeDash=[5, 3]).encode(
    x='YEAR',
    y='RR',
    color='RCP'
)

# 组合图表并分面
chart = (scatter + linear_regression + polynomial_regression).facet(
    columns=2,
    facet=alt.Facet('RCP')
)

chart.display()

说明

  • 移除transform_regression中的groupby=['RCP'],分面操作已完成分组,回归变换会自动基于每个分面的独立数据计算。
  • 统一数据集名称为df_melted,确保数据来源一致。
  • 可通过调整order参数修改多项式阶数(如1、3、5),用strokeDash区分线性与回归线样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 09:25:00