3

我有一个像这样的数据集(有点):

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
...

我想为每对特征生成一个PairGrid带有stripplots 和s 的 Seaborn ,并且swarmplotf1f2f3s的使用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)

但是,这会产生:

带状图对网格

我真的不知道我在这里错过了什么。我仍然可以自己制作这些情节并将它们放入我自己的子情节中,但这就是配对网格的重点。由于某种原因,网格上不支持这些类型的图吗?

4

1 回答 1

6

与名称可能暗示的不同,该hue参数未定义颜色。将其视为“进一步维度”或类似的东西可能会更好。虽然在许多情况下,这个进一步的维度是通过颜色可视化的,但不一定对每个图都是如此。

为了获得所需的 PairGrid,我们可能会忽略色调,以便显示所有值。

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

df = pd.DataFrame(np.random.randint(0,5, size=(4**3, 3)), columns=["f1", "f2", "f3"])
df["value"] = np.random.rand(len(df))

g = sns.PairGrid(df, vars=df.columns[:-1])
g.map(sns.stripplot, jitter=True, size=3)

plt.show()

在此处输入图像描述

这里的重点是hueof the与of thePairGrid完全不同。您确实可以使用 stripplot 本身的色调来为每个单独的图中的点着色,而将数据框划分为更多类别,每个色调值一个类别;这在这里是不需要的,因为数据框中的值列包含一个连续变量,并且您最终会得到与该列中不同值一样多的类别。huestripplothuePairGrid

于 2017-07-21T12:10:21.603 回答