我有一个类似于这样的数据集:
f1 f2 f3 value
4 2 3 0.927252
1 3 0 0.153415
0 1 1 0.928820
1 0 4 0.933250
0 4 3 0.397307
...
我想要创建一个 Seaborn 的 PairGrid,每个特征对(f1、f2 和 f3)都有一个带有 jitter 或 swarmplot 的 stripplot,并使用 value 作为 hue。对角线上的图应该类似于下面的图像,我是用以下代码创建的:
df = ... # My dataset
sns.stripplot("f1", "f1", "value", data=df, jitter=True,
palette=sns.light_palette("red", len(df)),
hue_order=sorted(df["value"])).legend().remove()
而非对角线的图表会是这样的:
同样,我是用以下代码生成的:
df = ... # My dataset
sns.stripplot("f1", "f2", "value", data=df, jitter=True,
palette=sns.light_palette("red", len(df)),
hue_order=sorted(df["value"])).legend().remove()
因此,我所尝试的是:
import seaborn as sns
df = ... # My dataset
g = sns.PairGrid(df, hue="value", palette=sns.light_palette("red", len(df)),
hue_order=sorted(df["value"]), vars=df.columns[:-1])
g.map_diag(lambda x, **kwargs: sns.stripplot(x, x, **kwargs), jitter=True)
g.map_offdiag(sns.stripplot, jitter=True)
然而,这样做产生了以下结果:
我不太清楚我错过了什么。我仍然可以自己制作图表并将它们放入自己的子图中,但这就是成对网格的全部意义。这些类型的图表因某些原因而不支持网格吗?
g.map(sns.stripplot, jitter=True, size=3, hue=df["value"], palette=sns.light_palette("red", len(df)), hue_order=sorted(df["value"]))
,我实际上得到了我想要的结果。对我来说,这是一种不一致的行为...但也许您可以解释一下当您说色调只是一个“进一步的维度”,而不一定是颜色时,您的意思是什么? - jdehesaf1
与f2
的图并排进行比较,一个来自于Pair Grid,另一个来自于单个Strip Plot。点击此处查看截图。 - jdehesahue=df.values
居然没有产生与预期相似的图形。因为每个类别只有一个值,所以我本来期望看到每个图形只有一个点。 - ImportanceOfBeingErnest