如何在绘图表达散点图中只有一条多种颜色的趋势线?

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)

有没有一种方法可以为所有点创建一条趋势线?

阴谋:

在此输入图像描述

提前致谢!

ves*_*and 8

随着 Plotly 的发布,您可以5.2.1 (2021-08-13)使用px.scatter()以下方式指定:

trendline_scope = 'overall'
Run Code Online (Sandbox Code Playgroud)

地块 1 - trendline_scope = 'overall'

在此输入图像描述

如果趋势线的绿色不符合您的喜好,您可以通过以下方式更改:

 trendline_color_override = 'black'
Run Code Online (Sandbox Code Playgroud)

情节 2 -trendline_color_override = 'black'

在此输入图像描述

另一个选项trendline_scopetrace产生:

情节 3 -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)

  • @jgmh 今天的好计划比明天的完美计划更好 =) (2认同)

nic*_*ten 2

目前还没有内置功能,不幸的是!但这是一个好主意,我创建了一个问题来建议它作为补充: https: //github.com/plotly/plotly.py/issues/1846