如何将标记或字形映射到python中数据框的列?

问题描述 投票:0回答:1

我想将标记映射到称为物种的特定列,该列不是定量列,并且不显示在散点图矩阵中。我想做这样的事情,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))
python pandas data-visualization seaborn
1个回答
0
投票

截至目前,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()

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.