Как сделать усредненные наблюдения для одного значения x Python - PullRequest
0 голосов
/ 31 марта 2020

Это мой набор данных:

import seaborn as sns
import plotly.graph_objs as go

x = [0,0,0,1,1,1,2,2,2]
y = [1,2,3,4,5,6,7,8,9]

Использование:

sns.lineplot(x=x, y=y)

Я получаю следующую цифру: enter image description here

Я бы хотел бы получить такой же (хотя бы похожий результат) в Plotly. В настоящее время у меня есть:

fig = go.Figure()
fig.add_trace(go.Scatter(x=x, 
                         y=y,
                         mode='lines',
                         name='predictions',
                        fill="toself"))

Однако я получаю результат, который меня не устраивает:

enter image description here

Это так? вопрос какого-то определенного c аргумента ключевого слова переданного для заполнения? Спасибо!

1 Ответ

1 голос
/ 31 марта 2020

По сути, это не «библиотека визуализации статистических данных», как морская, поэтому вы должны подготовить трассы, прежде чем строить. Для вашего данного примера вы можете сделать что-то вроде

import pandas as pd
import plotly.graph_objs as go

x = [0,0,0,1,1,1,2,2,2]
y = [1,2,3,4,5,6,7,8,9]

df = pd.DataFrame({"x": x, "y": y})

grp = df.groupby("x").agg({"y":{"mean", "min", "max"}})
grp.columns = ["_".join(col) for col in grp.columns]
grp = grp.reset_index()

fig = go.Figure()
fig.add_trace(go.Scatter(x=grp["x"], 
                         y=grp["y_min"],
                         mode='lines',
                         name='y_min',
                         opacity=0.75,
#                          marker = {"color":"lightblue", "width":0.5},
                         line=dict(color='lightblue', width=0.5),
                         showlegend=False
                         ))
fig.add_trace(go.Scatter(x=grp["x"], 
                         y=grp["y_mean"],
                         mode='lines',
                         name='prediction',
                         fill="tonexty",
                         line=dict(color='lightblue', width=2)
                         ))

fig.add_trace(go.Scatter(x=grp["x"], 
                         y=grp["y_max"],
                         mode='lines',
                         name='y_max',
                         opacity=0.75,
                         fill="tonexty",
                         line=dict(color='lightblue', width=0.5),
                         showlegend=False
                         ))

enter image description here

...