如何设置Plotly的OLS趋势线使其经过特定值(如原点)?
Plotly Express OLS趋势线强制过原点的实现方法
Plotly Express内置的OLS趋势线默认自带截距项,你可以通过以下两种简便方法实现过原点的拟合需求:
- 方案1:高版本Plotly直接用内置参数(推荐)
Plotly 4.10及以上版本支持通过trendline_options直接控制拟合逻辑,只要设置add_constant=False即可取消截距项,强制趋势线经过原点,示例代码如下:
你可以通过import plotly.express as px import pandas as pd # 替换为你的实际数据 df = pd.DataFrame({ "x": [1, 2, 3, 4, 5], "y": [1.9, 4.1, 5.8, 7.9, 10.2] }) fig = px.scatter( df, x="x", y="y", trendline="ols", trendline_options={"add_constant": False} ) fig.show()px.get_trendline_results(fig)查看拟合报告,确认截距项为0,验证设置生效。 - 方案2:旧版本Plotly手动拟合补线
如果你使用的Plotly版本不支持trendline_options,可以手动计算无截距的OLS拟合值,再将趋势线添加到原图,示例代码如下:import plotly.express as px import pandas as pd import numpy as np df = pd.DataFrame({ "x": [1, 2, 3, 4, 5], "y": [1.9, 4.1, 5.8, 7.9, 10.2] }) # 计算无截距OLS系数 beta = np.sum(df["x"] * df["y"]) / np.sum(df["x"] ** 2) df["trendline"] = df["x"] * beta # 叠加散点和趋势线 fig = px.scatter(df, x="x", y="y") fig.add_traces(px.line(df, x="x", y="trendline", color_discrete_sequence=["red"]).data) fig.show()
内容的提问来源于stack exchange,提问作者Joshua Schaafsma
相关产品推荐
相关产品推荐

