Категориальный график с данными из нескольких столбцов и их среднее значение - PullRequest
0 голосов
/ 28 октября 2019

Я хотел бы создать категорический график из двух панд столбцов DataFrame a и b на одном и том же рисунке с общим x и различной осью y:

import pandas as pd
import seaborn as sns

example = [
    ('exp1','f0', 0.25, 2),
    ('exp1','f1', 0.5, 3),
    ('exp1','f2', 0.75, 4),
    ('exp2','f1', -0.25, 1),
    ('exp2','f2', 1, 2),
    ('exp2','f3', 0, 3)
]
df = pd.DataFrame(example, columns=['exp', 'split', 'a', 'b'])
mean_df = df.groupby('exp')['a'].mean()
g = sns.catplot(x='exp', y='a', data=df, jitter=False)
ax2 = plt.twinx()
sns.catplot(x='exp', y='b', data=df, jitter=False, ax=ax2)

В этой реализации я имеюпроблема в том, что цвета различаются для категорий (значения х), а не для столбцов. Могу ли я это сделать единолично или мне нужно изменить структуру данных?

Я также хотел бы соединить средства категориальных значений, как на изображении, например: image

Ответы [ 2 ]

1 голос
/ 28 октября 2019
df = pd.DataFrame(example, columns=['exp', 'split', 'a', 'b'])
mean_df = df.groupby('exp').mean().reset_index()

fig, ax1 = plt.subplots()
ax2 = ax1.twinx()

sns.scatterplot(x='exp', y='a', data=df, color='C0', ax=ax1)
sns.scatterplot(x='exp', y='b', data=df, color='C1', ax=ax2)

sns.lineplot(x='exp',y='a', data=mean_df, color='C0', ax=ax1)
sns.lineplot(x='exp',y='b', data=mean_df, color='C1', ax=ax2)

enter image description here

1 голос
/ 28 октября 2019

Сначала вы можете захотеть растопить ваши данные:

data = df.melt(id_vars='exp', value_vars=['a','b'])

fig, ax = plt.subplots()
sns.scatterplot(data=data,
                x='exp',
                hue='variable',
                y='value',
                ax=ax)

(data.groupby(['exp','variable'])['value']
     .mean()
     .unstack('variable')
     .plot(ax=ax, legend=False)
)
ax.set_xlim(-0.5, 1.5);

Вывод:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...