seaborn 中分组数据的联合图
Joint plot for groupby datas on seaborn
我有一个如下所示的数据框:
In[1]: df.head()
Out[1]:
dataset x y
1 56 45
1 31 67
7 22 85
2 90 45
2 15 42
还有大约 4000 行。 x 和 y 按数据集分组。我正在尝试使用 seaborn 分别为 each 数据集绘制联合图。这是我目前能想到的:
import seaborn as sns
g = sns.FacetGrid(df, col="dataset", col_wrap=3)
g.map_dataframe(sns.scatterplot, x="x", y="y", color = "#7db4a2")
g.map_dataframe(sns.histplot, x="x", color = "#7db4a2")
g.map_dataframe(sns.histplot, y="y", color = "#7db4a2")
g.add_legend();
但都是重叠的。如何为子图中的每个数据集制作合适的联合图?谢谢你的先进和欢呼!
您可以在 数据集 列上使用 groupby
,然后使用 sns.jointgrid()
,最后将您的散点图和 KDE 图添加到联合网格。
这是一个使用带有 numpy 的随机种子生成器的示例。我制作了三个“数据集”和随机 x,y 值。请参阅 Seaborn jointgrid
documentation 了解自定义颜色等的方法。
### Build an example dataset
np.random.seed(seed=1)
ds = (np.arange(3)).tolist()*10
x = np.random.randint(100, size=(60)).tolist()
y = np.random.randint(20, size=(60)).tolist()
df = pd.DataFrame(data=zip(ds, x, y), columns=["ds", "x", "y"])
### The plots
for _ds, group in df.groupby('ds'):
group = group.copy()
g = sns.JointGrid(data=group, x='x', y='y')
g.plot(sns.scatterplot, sns.kdeplot)
我有一个如下所示的数据框:
In[1]: df.head()
Out[1]:
dataset x y
1 56 45
1 31 67
7 22 85
2 90 45
2 15 42
还有大约 4000 行。 x 和 y 按数据集分组。我正在尝试使用 seaborn 分别为 each 数据集绘制联合图。这是我目前能想到的:
import seaborn as sns
g = sns.FacetGrid(df, col="dataset", col_wrap=3)
g.map_dataframe(sns.scatterplot, x="x", y="y", color = "#7db4a2")
g.map_dataframe(sns.histplot, x="x", color = "#7db4a2")
g.map_dataframe(sns.histplot, y="y", color = "#7db4a2")
g.add_legend();
但都是重叠的。如何为子图中的每个数据集制作合适的联合图?谢谢你的先进和欢呼!
您可以在 数据集 列上使用 groupby
,然后使用 sns.jointgrid()
,最后将您的散点图和 KDE 图添加到联合网格。
这是一个使用带有 numpy 的随机种子生成器的示例。我制作了三个“数据集”和随机 x,y 值。请参阅 Seaborn jointgrid
documentation 了解自定义颜色等的方法。
### Build an example dataset
np.random.seed(seed=1)
ds = (np.arange(3)).tolist()*10
x = np.random.randint(100, size=(60)).tolist()
y = np.random.randint(20, size=(60)).tolist()
df = pd.DataFrame(data=zip(ds, x, y), columns=["ds", "x", "y"])
### The plots
for _ds, group in df.groupby('ds'):
group = group.copy()
g = sns.JointGrid(data=group, x='x', y='y')
g.plot(sns.scatterplot, sns.kdeplot)