【问题标题】:Switch color of sns.swarnplot切换 sns.swarnplot 的颜色
【发布时间】:2021-09-29 16:35:23
【问题描述】:

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

我的代码是:

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)

【问题讨论】:

    标签: python pandas dataframe seaborn pandas-loc


    【解决方案1】:

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

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

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

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

    编辑:所以,看到你的数据,你真的应该像这样使用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 pace shooting
    a_name 85 92

    long 表格格式

    short_name skill value
    a_name pace 85
    a_name shooting 92

    【讨论】:

    • 感谢您的回答!我已经看过文档,但是要使用“hue”,必须确定“X”和“y”。但是,就我而言,我不知道该放什么……我尝试了各种方法,但错误消息不断出现。
    • 不客气。我更新了我的答案。如果您仍然不清楚如何从这里开始,请发布数据集的一小部分代表性(我可能误解了数据的结构,但它似乎是wide 格式,应该设为@987654341 @)。
    • 我用我的数据集截图添加了一个答案。谢谢!
    • 我又更新了。另请参阅我对您的回答的评论;-)
    【解决方案2】:

    非常感谢@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)
    
    

    【讨论】:

    • 这不是问题的答案。您应该改为编辑您的问题以添加信息,并且真的最好不要作为图像,然后删除此答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 2021-08-21
    • 2011-09-11
    相关资源
    最近更新 更多