Как получить только одну линию тренда для нескольких цветов в сюжетно-экспрессном разбросе? - PullRequest
2 голосов
/ 24 октября 2019

Я хочу создать точечный график только с одной линией тренда. 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()

Можно ли создать только одну линию тренда для всех точек?

Сюжет:

enter image description here

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 25 октября 2019

Поскольку вы специально не запрашиваете встроенную функцию express , вы можете легко использовать px.Scatter() и получать то, что хотите, используя statsmodels.OLS вместе с add_traces(go.Scatter()):

Участок:

enter image description here

Код:

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

И вы можете сделать это обоими способами:

Сюжет:

enter image description here

Изменение в коде: Просто добавьте trendline='ols'

fig = px.scatter(
    x=years,
    y=value,
    trendline='ols',
    color=colors
)
1 голос
/ 24 октября 2019

На данный момент для этого нет встроенной функции, к сожалению, нет! Но это хорошая идея, и я создал проблему, чтобы предложить ее в качестве дополнения: https://github.com/plotly/plotly.py/issues/1846

...