我有一个这样的数据集(有点):
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
...
我希望为每对功能f1
,f2
和{{1}制作一个带有PairGrid
的stripplot
带有抖动或swarmplot
s的Seaborn } {}使用f3
作为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()
然而,这是屈服:
{{3}}
我真的不知道我在这里缺少什么。我仍然可以将这些情节制作成我自己并将它们放入我自己的子图中,但这就是对网格的重点。由于某些原因,网格上是否不支持这些图?
答案 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()
这里的要点是hue
的{{1}}与PairGrid
的{{1}}完全不同。您可能确实使用了stripplot本身的色调来为每个单独的图中的点着色,而hue
的{{1}}则将数据帧划分为更多类别,每个色调值一个类别;这里不需要这样做,因为数据框中的值列包含一个连续变量,您最终会得到与该列中不同值一样多的类别。