1
resposta

Como faço para que uma lista específica de amostras seja representada em cores diferentes?

Professor, quero que os 10 elementos da amostra (b_crit) sejam representados em 10 cores distintas e, na sequência, criar uma legenda para esses 10 elementos. Como faço?

b_crit = list(nb.loc[nb['R_idhm'].sort_values(ascending=False)[:10].index,'EBAIRRNOME'])
pc = ['r' if nb.loc[i,'EBAIRRNOME'] in b_crit else 'grey' for i in np.arange(len(nb))]

fig, ax = plt.subplots();
ax.scatter(nb['idhm'], nb['PP'], linewidth = .5, alpha = 0.6, s = 20, c = pc);
ax.set_title('Bairros mais vulneráveis pelo Risco x IDHM', fontsize = 16)
ax.set_ylabel('Perigo Potencial', fontsize = 12)
ax.set_xlabel('IDHM', fontsize = 12)
ax.legend(pd.DataFrame(b_crit, columns = ['Menor vulnerabilidade']), fontsize = 10)

Tenho com resultado um gráfico de dispersão em que os elementos de menor vulnerabilidade aparecem em "cinza" e os 10 com maior vulnerabilidade aparecem em "vermelho". Eu quero representar esses 10 elementos de maior vulnerabilidade em cores distintas. E, na sequência criar uma legenda para todos esses diferentes tipos.

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
1 resposta

Oii Ana, como você está? Espero que esteja bem ^-^

Neste tópico te respondi a respeito do uso de cores diferentes em um scatter plot. Tomando como referência o mesmo exemplo, para fazermos uma legenda para cada elemento podemos fazer um zip combinando as cores e as respectivas legendas de cada cor e utilizarmos um laço de repetição para preencher o gráfico com cada cor específica. Veja como fica em código:

import matplotlib.pyplot as plt
import random

colors = ['b', 'g', 'r', 'c', 'm', 'y', 'k']
legendas = ['Legenda A', 'Legenda B', 'Legenda C', 'Legenda D', 'Legenda E', 'Legenda F', 'Legenda G']
dados = zip(colors, legendas) # Combinando as cores com as respectivas legendas, ou seja, a cor 'b' se refere a 'Legenda A', a cor 'g' se refere a 'Legenda B' e assim por diante. 

#Legenda
titulo = "Scatterplot"
plt.title(titulo)

for color, legenda in dados:
  x = random.randint(1, 100)
  y = random.randint(1, 100)
  plt.scatter(x, y, c=color, label=legenda)


plt.legend(loc='upper center', bbox_to_anchor=(0.5, -0.15),
          ncol=4)
plt.show()

Utilizamos a biblioteca random para gerar os valores de x e y. Quanto aos parâmetros do comando plt.legend, o loc é para definirmos a posição da legenda e nesse caso, colocamos para ser uma posição central. Já o bbox_to_anchor serve para reposicionarmos essa legenda, onde o primeiro parâmetro se refere ao canto x inferior esquerdo e o segundo se refere a canto y inferior esquerdo, desse modo conseguimos posicioná-la fora do gráfico. Por fim o ncol é para definirmos a largura da legenda.

Resultado:

image

Qualquer dúvida estou por aqui, tá bom?

Abraços e bons estudos!