1
resposta

Como faço um gráfico de dispersão no matplotlib com "edgecolor" diferentes, não só uma cor?

fig, ax = plt.subplots();
#
ax.scatter(nb['idhm'],nb['PP'], c = colors, edgecolors=colors, linewidth = .5, alpha = 0.6, s = 50);
ax.set_title('Perigo Potencial x IDHM');
x_coords = list(nb[nb['EBAIRRNOME'].isin(b_crit)].idhm);
y_coords = list(nb[nb['EBAIRRNOME'].isin(b_crit)].PP);
for i in np.arange(len(b_crit)):
        ax.text(x_coords[i], y_coords[i], b_crit[i], horizontalalignment='left', fontsize = 10);
plt.show();

Dá o seguinte erro:

NameError                                 Traceback (most recent call last)
<ipython-input-135-a1004db25629> in <module>
      3 fig, ax = plt.subplots();
      4 #
----> 5 plt.scatter(nb['idhm'],nb['PP'], c = colors, edgecolors=colors, linewidth = .5, alpha = 0.6, s = 50);
      6 ax.set_title('Perigo Potencial x IDHM');
      7 x_coords = list(nb[nb['EBAIRRNOME'].isin(b_crit)].idhm);

NameError: name 'colors' is not defined

Eu quero que esses elementos sejam representados por "n" cores diferentes. Mas não sei como. A versão do matplotlib instalado é 3.1.3.

1 resposta

Oiii Ana, tudo bem?

No erro apresentado no seu código está dizendo que você não definiu a variável colors. Deixarei abaixo um exemplo simples do scatter usando o edgecolors(lembrando que o edgecolors é para definir a cor da borda do marcador) e o color é para o preenchimento do marcador:

import matplotlib.pyplot as plt
import numpy as np

# Cores padrões da biblioteca matplotlib
# b: azul
# g: verde
# r: vermelho
# c: ciano
# m: magenta
# y: amarelo
# k: Preto
# w: branco

colors = ['b', 'g', 'r', 'c', 'm', 'y', 'k', 'w']

# Valores
N = 8  # Como há 8 cores, irei gerar 8 números
x = np.random.rand(N)
y = np.random.rand(N)

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

# Plotando gráfico
plt.scatter(x, y, c=colors, edgecolors=colors)
plt.show()

Resultado:

resultado_esperado

Qualquer dúvida é só falar. Abraços e bons estudos!