我想将标记映射到称为物种的特定列,该列不是定量列,并且不显示在散点图矩阵中。我想做这样的事情,seaborn在pairplot中不支持此操作?它在python中吗?
from bokeh.transform import factor_cmap, factor_mark
import pandas as pd
import seaborn as sns
Species=['A','B','C']
Markers=['hex', 'circle_x', 'triangle']
#df=Panda dataframe
sns.pairplot(df, hue="mammals",diag_kind = 'hist',
marker=factor_mark('species', Markers, Species))
截至目前,seaborn不允许您使用变量来更改标记。我认为最简单的方法是将色相作为种类进行绘制,并分配标记。
这是基于这样的前提,即对于每个物种,它都对应于哺乳动物中的一个类别。下面我使用一个简化的示例,其中包含3种,A在种中为“ Y”,B和C为“ N”:
import pandas as pd
import seaborn as sns
df = pd.DataFrame({'var1':np.random.uniform(0,1,20),
'var2':np.random.uniform(0,1,20),
'var3':np.random.uniform(0,1,20),
'Species':np.random.choice(Species,20)})
df['mammals'] = ['Y' if i == 'A' else 'N' for i in df['Species']]
我们可以创建映射
species2mammals = df.groupby('Species')['mammals'].agg('unique').to_dict()
species2mammals
{'A': array(['Y'], dtype=object),
'B': array(['N'], dtype=object),
'C': array(['N'], dtype=object)}
我们指定每种物种和每种哺乳动物类别的标记:
Species = ['A','B','C']
Markers=["H", "v", "^"]
Mammals_col = {'Y':'#f3c623','N':'#127681'}
然后,我们根据它们的哺乳动物来定义每个物种的颜色:
Cols = [Mammals_col[i[0]] for i in species2mammals.values()]
并将其绘制:
g = sns.PairGrid(df, hue="Species",palette=Cols,hue_kws=dict(marker=Markers))
g = g.map_diag(plt.hist, histtype="step", linewidth=3)
g = g.map_offdiag(plt.scatter)
g = g.add_legend()