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

Plotly散点图OLS趋势线呈直线且悬浮显示指数值问题

问题解决:Plotly散点图趋势线异常及数值显示问题

1. 趋势线为直线的原因及解决

你使用的trendline='ols'是普通最小二乘线性回归,本身就会生成直线趋势线。如果需要贴合数据的非线性趋势,可替换为以下方案:

  • 改用局部加权回归趋势线:将trendline='ols'改为trendline='lowess',适合呈现非线性的平滑趋势
  • 自定义非线性拟合:借助statsmodels实现多项式、指数等非线性模型,再将拟合结果添加到图中

示例代码(替换为lowess趋势线):

import datetime
import plotly.express as px

mylist = [datetime.datetime.strptime(date + '-1', "%Y-%W-%w") for date in mylist]

fig = px.scatter(
                 x=mylist,
                 y=num_accidents,
                 trendline='lowess',  # 替换为lowess趋势线
                 title="Number of Accidents Per Week")

fig.update_traces(mode='lines')
fig.update_xaxes(tickformat="%d-%b-%Y")
fig.show()

2. 趋势线悬浮显示指数形式的修正

趋势线的hover文本默认采用科学计数法,可通过自定义hover模板强制使用常规数值格式:

# 在生成图后添加以下代码,修正趋势线hover显示
fig.data[1].hovertemplate = '日期: %{x}<br>预测事故数: %{y:.2f}<extra></extra>'

也可以统一设置Y轴的数值格式,避免全局出现科学计数法:

fig.update_yaxes(tickformat='.2f')

完整修正代码示例

import datetime
import plotly.express as px

mylist = [datetime.datetime.strptime(date + '-1', "%Y-%W-%w") for date in mylist]

fig = px.scatter(
                 x=mylist,
                 y=num_accidents,
                 trendline='lowess',
                 title="Number of Accidents Per Week")

fig.update_traces(mode='lines')
fig.update_xaxes(tickformat="%d-%b-%Y")
# 修正趋势线hover显示格式
fig.data[1].hovertemplate = '日期: %{x}<br>预测事故数: %{y:.2f}<extra></extra>'
# 设置Y轴使用常规数值格式
fig.update_yaxes(tickformat='.2f')

fig.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:25:23