jgm*_*gmh 8 python regression plotly plotly-express
我想创建一个只有一条趋势线的散点图。Plotly Express 为点列表中的每种颜色创建不同的趋势线。
import plotly.express as px
value = [15, 20, 35, 40, 48]
years = [2010, 2011, 2012, 2013, 2014]
colors = ['red', 'red', 'blue', 'blue', 'blue']
fig = px.scatter(
x=years,
y=value,
trendline='ols',
color=colors
)
fig.show()
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以为所有点创建一条趋势线?
阴谋:
提前致谢!
随着 Plotly 的发布,您可以5.2.1 (2021-08-13)使用px.scatter()以下方式指定:
trendline_scope = 'overall'
Run Code Online (Sandbox Code Playgroud)
trendline_scope = 'overall'如果趋势线的绿色不符合您的喜好,您可以通过以下方式更改:
trendline_color_override = 'black'
Run Code Online (Sandbox Code Playgroud)
trendline_color_override = 'black'另一个选项trendline_scope是trace产生:
trendline_scope = 'trace'import plotly.express as px
df = px.data.tips()
fig = px.scatter(df, x="total_bill", y="tip",
color="sex",
trendline="ols",
trendline_scope = 'overall',
# trendline_scope = 'trace'
trendline_color_override = 'black'
)
fig.show()
Run Code Online (Sandbox Code Playgroud)
由于您没有特别要求内置的绘图表达功能,因此您可以轻松地构建px.Scatter()并获得您想要的功能,statsmodels.OLS同时使用add_traces(go.Scatter()):
阴谋:
代码:
import plotly.express as px
import plotly.graph_objs as go
import statsmodels.api as sm
value = [15, 20, 35, 40, 48]
years = [2010, 2011, 2012, 2013, 2014]
colors = ['red', 'red', 'blue', 'blue', 'blue']
# your original setup
fig = px.scatter(
x=years,
y=value,
color=colors
)
# linear regression
regline = sm.OLS(value,sm.add_constant(years)).fit().fittedvalues
# add linear regression line for whole sample
fig.add_traces(go.Scatter(x=years, y=regline,
mode = 'lines',
marker_color='black',
name='trend all')
)
fig
Run Code Online (Sandbox Code Playgroud)
你可以有两种方式:
阴谋:
更改代码:只需添加trendline='ols'
fig = px.scatter(
x=years,
y=value,
trendline='ols',
color=colors
)
Run Code Online (Sandbox Code Playgroud)