如何使用sns.catplot可视化数据集的更改?

时间:2019-01-09 12:27:29

标签: python matplotlib seaborn

我有一个数据集,该数据集会随时间变化均值和方差,但仍处于y值的相同范围内。我想可视化数据的变化。这是具有我要寻找的功能的地块: enter image description here

不幸的是,我不知道如何创造出如此美丽。我尝试使用seaborn.catplot()函数,但缺少可视化各个数据点的均值和连接的选项。

编辑: 问的MVCE:

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

有什么想法可以添加缺少的功能吗?

最好的Lufr1ed

1 个答案:

答案 0 :(得分:1)

要获取分类图,您需要创建一个包含分类列的数据框。我在列名方面对您的代码做了一些修改-     将numpy导入为np     将seaborn导入为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

现在,我想在catplot的x轴上使用cat列,在y轴上使用dist并为原始数据帧中的每一行创建一个point plot

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

这将为您提供以下情节-

Catplot


奖励:您也可以使用line plot并添加平均值标记。

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

每个类别上的“ X”代表均值。希望有帮助!