sns.swarnplot 的切换颜色

时间:2021-07-22 11:33:25

标签: python dataframe seaborn loc

有谁知道,是否可以切换颜色,以便我可以区分每一行而不是每一列?以及如何添加图例,在那里我可以看到哪个玩家(每个玩家一种颜色)有例如什么节奏?

我的代码是:

feldspieler = feldspieler["sofifa_id"]
skills = ['pace','shooting','passing','dribbling','defending','physic']

diagramm = plt.figure(figsize=(40,20))
plt.xticks(rotation=90,fontsize=20)
plt.yticks(fontsize=20)
plt.xlabel('Skills', fontsize=30)
plt.ylabel('Skill value', fontsize=30)
plt.title('Spielervergleich', fontsize = 40)

sns.set_palette("pastel")

for i in feldspieler: 
    i = fifa_21.loc[fifa_21['sofifa_id'] == i]
    i = pd.DataFrame(i, columns = skills)
    sns.swarmplot(data=i,size=12)

enter image description here

2 个答案:

答案 0 :(得分:0)

hue 参数设置为您感兴趣的列的值 (sofifa_id)。然后,您可以一次提供整个数据集来绘制数据。图例将自动添加。

因此,您应该有一个带有 'skills' 列的 DataFrame,其中包含您在此处在 x 轴上拥有的不同技能。如有必要,请参阅 pd.melt 的文档,尤其是第三个示例。
然后,假设熔化后的​​值使用默认列名 value,调用

sns.swarmplot(data=fifa_21, x="skills", y="value", hue="sofifa_id")

这是来自官方 swarmplot 函数文档 (here)。

Hue in swarmplot documentation

编辑:所以,看到你的数据,你真的应该像这样使用 pd.melt: (我正在考虑每个玩家一行,具有不同的 short_name 值)。

data = pd.melt(fifa_21, id_vars='short_name', var_name='skill', 
               value_vars=['pace', 'shooting', 'passing', 'dribbling', 
                           'defending', 'physic'])

sns.swarmplot(x='skill', y='value', hue='short_name', data=data)

melt 将从 wide 格式转换为列和值

<头>
short_name 节奏 拍摄
a_name 85 92

long表格格式

<头>
short_name 技能 价值
a_name 节奏 85
a_name 拍摄 92

答案 1 :(得分:0)

非常感谢@Trevis。

不幸的是,它仍然不起作用。 在这里你可以找到数据集的截图和图形访问的代码。


while True:
    team = input("Welches Team suchen Sie?: ")
    
    if team in fifa_21.values:
        break
    else:
        print("Dieser Verein existiert nicht. Bitte achten Sie auf eine korrekte Schreibweise.")
            
                           
gesuchtes_team = fifa_21.loc[(fifa_21['club_name'] == team)]
spieler_verein = gesuchtes_team[["sofifa_id","short_name","nationality","age","player_positions","overall","value_eur"]]
spieler_verein = pd.DataFrame(spieler_verein)
spieler_verein = spieler_verein.reset_index(drop=True)
spieler_verein

feldspieler = spieler_verein.loc[spieler_verein.player_positions != "GK", :]
feldspieler = feldspieler.reset_index(drop=True)
feldspieler

feldspieler = feldspieler["sofifa_id"]
skills = ['pace','shooting','passing','dribbling','defending','physic']

diagramm = plt.figure(figsize=(40,20))
plt.xticks(rotation=90,fontsize=20)
plt.yticks(fontsize=20)
plt.xlabel('Skills', fontsize=30)
plt.ylabel('Skill value', fontsize=30)
plt.title('Spielervergleich', fontsize = 40)

sns.set_palette("pastel")

for i in feldspieler: 
    i = fifa_21.loc[fifa_21['sofifa_id'] == i]
    i = pd.DataFrame(i, columns = skills)
    sns.swarmplot(data=fifa_21, x="skills", y="skill_value", hue="sofifa_id")
    #sns.swarmplot(x =skills, y= pd.DataFrame(i, columns == skills) ,hue= "sofifa_id", data=i,size=12)

enter image description here