В чем проблема с оттенком моего роя? - PullRequest
1 голос
/ 27 сентября 2019

У меня есть этот набор данных: 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)

Я хочу сделать несколько swarmplots для каждой характеристики каждого типа покемонов с помощью hue =Легендарный.Я хочу представить, как расположены легендарные покемоны.Я уже сделал 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('')

Вот некоторые из стайных участков:

enter image description here

Итак, я попытался сделать это:

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: логический индекс не соответствует индексированному массиву по измерению 0;размерность 69, но соответствующий логический размер равен 800

1 Ответ

1 голос
/ 27 сентября 2019

Фильтровать столбец Legendary как y параметр:

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'] для y и df['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('')
...