首先生成一些随机数据:
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,海运0.8.1)
发布于 2018-03-25 15:20:45
映射中似乎存在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})

https://stackoverflow.com/questions/49476654
复制相似问题