1
resposta

Erro ao tentar colorir o gráfico com hue e palette

Oi pessoal,

Estou tendo um problema ao tentar colorir o gráfico do seaborn com huee palette. Já vi que existem tópicos sobre isso aqui, mas as respostas não me ajudaram a corrigir esse erro.

Minha célula está assim:

import seaborn as sns

sns.set(rc={'figure.figsize': (13, 13)})

sns.scatterplot(x=visualizacao[:, 0],
               y=visualizacao[:, 1],
               hue=modelo.labels_,
               palette=sns.color_palette('Set1', 3))

O erro é este:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-18-4d459e75617d> in <module>()
      6                y=visualizacao[:, 1],
      7                hue=modelo.labels_,
----> 8                palette=sns.color_palette('Set1', 3))

6 frames
/usr/local/lib/python3.6/dist-packages/pandas/core/internals/construction.py in extract_index(data)
    363             lengths = list(set(raw_lengths))
    364             if len(lengths) > 1:
--> 365                 raise ValueError("arrays must all be same length")
    366 
    367             if have_dicts:

ValueError: arrays must all be same length
1 resposta

Confesso que não sei exatamente o contexto, mas o que eu imagino é que sua variável "modelo" deve ser algum modelo treinado do sklearn.

Nessa caso, o método .labels_ retorna quais as labels POSSÍVEIS de serem retornadas pelo seu modelo, e não as labels PREVISTAS para aquela observação.

Isso resulta nesse erro, em que seu .labels_ tem um número diferente de linhas que o seu visualização.

Creio que sua necessidade seja utilizar a hue para plotar de acordo com a classificação, então é necessário, primeiramente, classificar suas observações:

import seaborn as sns

sns.set(rc={'figure.figsize': (13, 13)})

x = visualizacao[ :, 0]
y = visualizacao[: , 1]

sns.scatterplot(x= x,  y=y,
                hue = modelo.predict(x), palette=sns.color_palette('Set1', 3))

obs : Existe a possibilidade de dar falha, dependendo de qual modelo você esteja utilizando. Alguns modelos do sklearn não seguem o padrão com relação à dimensionalidade do seu input. Nesse caso,

modelo.predict(x.reshape(-1,1))

resolveria seu problema.