首先生成一些随机数据:
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
我创建了一个配对图,如下所示:
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})
但是现在这两个类在残留图中不再是颜色分开的了!
如何让两个类变色,同时还能够改变大小?
(python 3.6.4,seaborn 0.8.1)
答案 0 :(得分:2)
映射中似乎存在错误或其他一些奇怪的行为,因为后续对映射函数的调用会收到不同的参数。
解决方案是手动执行映射,处理正在传递的正确参数。
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})