【问题标题】:What is the problem with hue in my swarmplot?我的 swarmplot 中的色调有什么问题?
【发布时间】:2020-01-27 15:42:04
【问题描述】:

我有这个数据集:https://www.kaggle.com/abcsds/pokemon/download。我加载了它并做了一些更改:

import pandas as pd 
import matplotlib.pyplot as plt 
import seaborn as sns
import os
for dirname, _, filenames in os.walk('/kaggle/input'):
    for filename in filenames:
        print(os.path.join(dirname, filename))

pokemons=pd.read_csv('../input/pokemon/Pokemon.csv')

del pokemons['Type 2']
pokemons.rename(columns={'Type 1':'Type'},inplace=True)

我想要的是为每个 pokemons 类型的每个统计数据制作一些 swarmplots,hue=Legendary。我想想象一下传说中的口袋妖怪是如何分布的。我已经做了没有色调的swarmplots。首先,我需要融化数据框:

pok_melt=pd.melt(pokemons,id_vars=['Name','Type','Legendary'],value_vars=['HP','Defense','Attack','Sp. Atk','Sp. Def','Speed'])
pok_melt.head()  

然后,swarmplots 的代码(有一次我需要按字母顺序为另一个图排序的类型名称,这就是它们被排序的原因):

list_types=pokemons['Type'].unique().tolist() 
list_types.sort()
list_types

plt.figure(figsize=(17,22))
k=1
for i in list_types:
    plt.subplot(6,3,k)
    k=k+1
    sns.swarmplot(x=pok_melt.variable,y=pok_melt[pok_melt.Type==i].value,palette='gist_stern')
    plt.title(i)
    plt.xlabel('')

这些是一些swarmplots:

所以我尝试这样做:

plt.figure(figsize=(17,22))
k=1
for i in list_types:
    plt.subplot(6,3,k)
    k=k+1
    sns.swarmplot(x=pok_melt.variable,y=pok_melt[pok_melt.Type==i].value,palette='gist_stern',
    hue=pok_melt.Legendary)
    plt.title(i)
    plt.xlabel('')

我得到这个错误:IndexError: boolean index does not match indexed array along dimension 0;维度是 69,但对应的布尔维度是 800

【问题讨论】:

    标签: python pandas data-visualization seaborn swarmplot


    【解决方案1】:

    过滤列Legendarylikey参数:

    plt.figure(figsize=(17,22))
    k=1
    for i in list_types:
        plt.subplot(6,3,k)
        k=k+1
        sns.swarmplot(x=pok_melt.variable,
                      y=pok_melt[pok_melt.Type==i].value,
                      hue=pok_melt[pok_melt.Type==i].Legendary,
                      palette='gist_stern')
        plt.title(i)
        plt.xlabel('')
    

    或者更好的是只过滤一次变量df并将列df['value']分配给ydf['Legendary']分配给hue

    plt.figure(figsize=(17,22))
    k=1
    for i in list_types:
        plt.subplot(6,3,k)
        k=k+1
        df = pok_melt.loc[pok_melt.Type==i]
    
        sns.swarmplot(x=pok_melt.variable,
                      y=df['value'],
                      hue=df['Legendary'],
                      palette='gist_stern')
        plt.title(i)
        plt.xlabel('')
    

    【讨论】:

      猜你喜欢
      • 2016-10-11
      • 1970-01-01
      • 2010-10-04
      • 2016-05-03
      • 1970-01-01
      • 2023-01-25
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多