Как использовать sns.catplot для визуализации изменения набора данных? - PullRequest
0 голосов
/ 09 января 2019

У меня есть набор данных, который изменяет среднее значение и дисперсию со временем, но все еще находится в том же диапазоне значений y. Я хочу визуализировать изменение данных. Вот сюжет с функциями, которые я ищу: enter image description here

К сожалению, я не знаю, как создать такую ​​красоту. Я попробовал функцию seaborn.catplot (), но мне не хватает опции для визуализации среднего значения и соединений отдельных точек данных.

Edit: Спрашиваемая мвс:

import numpy as np
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt

dist_1 = np.random.beta(2.,2.,250)
dist_2 = np.random.beta(3.,4.,250)
data = {"dist 1": dist_1, "dist 2": dist_2}
df = pd.DataFrame(data=data)
sns.catplot(data=df, s=3.)
plt.show()

Результат будет примерно таким:

enter image description here

Есть идеи добавить недостающие функции?

Best, Lufr1ed

1 Ответ

0 голосов
/ 10 января 2019

Чтобы получить категориальный график, вам нужно создать фрейм данных, содержащий категориальный столбец. Я внес небольшие изменения в ваш код в отношении имен столбцов - импортировать NumPy как NP импорт морского как sns импорт панд в виде pd импорт matplotlib.pyplot как plt

dist_1 = np.random.beta(2.,2.,250)
dist_2 = np.random.beta(3.,4.,250)
data = {"dist1": dist_1, "dist2": dist_2}
df = pd.DataFrame(data=data)
df['id'] = df.index

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

long_df = pd.wide_to_long(df, 'dist', 'id', 'cat').reset_index()
long_df.head()
#   id  cat      dist
#0   0    1  0.558567
#1   1    1  0.265868
#2   2    1  0.076470
#3   3    1  0.891855
#4   4    1  0.215208

Теперь я хочу использовать столбец cat на оси x области catplot, dist на оси y и создать точечный график для каждой строки в исходном кадре данных.

sns.catplot(x="cat", y="dist", hue='id', kind="point", data=long_df, legend=False)
plt.show()

Это дает вам следующий сюжет -

Catplot


Бонус : Вы также можете сделать то же самое, используя линейный график и добавить маркеры для среднего.

mean_df = long_df.groupby('cat')['dist'].mean().reset_index()
mean_df
#   cat      dist
#0    1  0.535771
#1    2  0.399939
fig = plt.figure()
ax1 = fig.add_subplot(111)
sns.lineplot(x='cat', y='dist', hue='id', data=long_df, legend=False, ax=ax1)
ax1.plot(mean_df['cat'], mean_df['dist'], 'x')
plt.show()

Что дает тебе -

Line plot with mean added

«Х» в каждой категории обозначает среднее. Надеюсь, это поможет!

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