首先生成一些随机数据:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import random
categories = pd.DataFrame(np.array(["p","q"])[np.random.randint(0,2,size=[100,1])],columns=["cat"],dtype="object")
data = pd.DataFrame(np.random.rand(100,2),columns=list('AB'))
df = pd.concat([data,categories],axis=1)
df.head()
A B cat
0 0.384899 0.780235 q
1 0.882805 0.191988 q
2 0.088372 0.411098 p
3 0.894406 0.991639 p
4 0.756944 0.250110 q
我创建一个pairplot,如下所示:
g = sns.PairGrid(df,hue="cat")
g.map_diag(plt.hist)
g.map_lower(sns.residplot)
g.map_upper(sns.regplot)
看起来是这样的:
这没关系。但我想改变点的大小。因此,我尝试使用
scatter_kws
参数来执行此操作:g = sns.PairGrid(df,hue="cat")
g.map_diag(plt.hist)
g.map_lower(sns.residplot,scatter_kws={'s':10})
g.map_upper(sns.regplot,scatter_kws={'s':10})
但现在这两个类不再是彩色分离在渣滓图!
我怎样才能让这两个班都染上颜色,同时又能改变大小呢?
(巨蟒3.6.4,西伯恩0.8.1)
最佳答案
在映射中似乎有一个bug或其他一些奇怪的行为,因为随后对映射函数的调用接收不同的参数。
一种解决方案是手动执行映射,以处理传递的正确参数。
import numpy as np; np.random.seed(42)
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
N = 100
categories = pd.DataFrame(np.array(["p","q"])[np.random.randint(0,2,size=[N,1])],
columns=["cat"],dtype="object")
data = pd.DataFrame(np.random.rand(N,2),columns=list('AB'))
df = pd.concat([data,categories],axis=1)
g = sns.PairGrid(df,hue="cat")
g.map_diag(plt.hist)
g.map_upper(sns.regplot,scatter_kws={'s':10})
def f(*args, **kwargs):
if 'scatter_kws' in kwargs.keys():
kwargs['scatter_kws'].update({"color": kwargs.pop("color")})
sns.residplot(*args,**kwargs)
g.map_lower(f, scatter_kws={'s':10})
关于python - 在PairGrid中使用scatter_kws时如何停止Seaborn残迹图忽略色相(颜色),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49476654/