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.

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!