Категориальные графики разброса / линейных диаграмм в python - PullRequest
0 голосов
/ 05 мая 2020

Первая публикация здесь. Недавно я познакомился с библиотеками seaborn и plotly python. Они создают отличные сюжеты.

Я изо всех сил пытался воссоздать морской сюжет в сюжете. У меня есть фрейм данных, который выглядит следующим образом: Пример набора данных

В seaborn, если я использую следующий код:

sns.catplot(data=test, x='time', y='y', hue='group', kind='point')

Я получаю отличный график, в котором группы были автоматически усреднены и построены две линии с полосами ошибок. У меня есть две линии на моем графике группы 'a' и 'b', показывающие среднее значение за каждый момент времени: Примерный график Seaborn

Если я попытаюсь воспроизвести это графически, используя:

px.line(test,x='time', y='y', color='group')

Я получаю отдельные строки для каждой группы (три для 'a' и три для 'b') следующим образом: пример графика

Есть ли способ наносите на график средние значения, а не по отдельным точкам. Я не могу понять, как построить график средних значений для каждой группы, как это делает Сиборн.

Любая помощь будет принята с благодарностью.

Надеюсь, это имеет смысл.

Спасибо

1 Ответ

1 голос
/ 06 мая 2020

При использовании plotly вам нужно использовать преобразований , в данном случае несколько, одно для их группировки, а затем одно для создания средних значений (с агрегатом).

Например, с некоторыми данными :

import numpy as np
import pandas as pd

# some data
N=24
ds = pd.DataFrame({'group': np.random.choice(['a','b'],N),
                   'time': np.random.randint(0,6,N),
                   'y': np.random.randint(1,15,N)})
ds.sort_values(by=['group', 'time'],inplace=True)

тогда вы можете использовать plotly:

import plotly.io as pio

data = [dict(
  type = 'scatter', x = ds.time, y = ds.y,
  mode = 'lines+markers',
  transforms = [
      dict(
        type = 'groupby',
        groups = ds.group),
      dict(
        type = 'aggregate',
        groups = ds.time,
        aggregations = [dict(target = 'y', func = 'avg')]),
    ]
)]

fig_dict = dict(data=data)
pio.show(fig_dict, validate=False)
...