Seaborn PairGrid与群体图

时间:2017-07-21 11:11:26

标签: python data-visualization seaborn

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

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

我希望为每对功能f1f2和{{1}制作一个带有PairGridstripplot带有抖动或swarmplot s的Seaborn 1D strip plot } {}使用f3作为value

对角线上的情节看起来应该是这样的:

2D strip plot

我创建的是:

hue

非对角线图就像这样:

Strip plot pair grid

同样,我做了:

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()

然而,这是屈服:

{{3}}

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

1 个答案:

答案 0 :(得分:4)

与名称不同,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()

enter image description here

这里的要点是hue的{​​{1}}与PairGrid的{​​{1}}完全不同。您可能确实使用了stripplot本身的色调来为每个单独的图中的点着色,而hue的{​​{1}}则将数据帧划分为更多类别,每个色调值一个类别;这里不需要这样做,因为数据框中的值列包含一个连续变量,您最终会得到与该列中不同值一样多的类别。