Marcadores do Matplotlib
Aprenda a usar e personalizar marcadores do Matplotlib em Python. Cobre estilos, tamanho, cor, preenchimento e controle por ponto.
Marcadores são os símbolos que o Matplotlib desenha em cada ponto de dados de um gráfico. Escolher o estilo de marcador certo — e saber como redimensioná-lo, recolorí-lo e preenchê-lo — pode ser a diferença entre um gráfico confuso e um que comunica com clareza. Esta página cobre todos os estilos de marcadores disponíveis no Matplotlib, como personalizar a aparência deles e quando usar plot() versus scatter() para controle por ponto.
O que é um Marcador no Matplotlib?
Um marcador é uma forma renderizada em cada coordenada (x, y) de um gráfico. Você controla qual forma é usada com o parâmetro marker (ou como parte de uma string de formato). Os marcadores são independentes da linha que conecta os pontos de dados — é possível exibir um sem o outro.
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [2, 5, 3, 7, 4]
# Line with markers
plt.plot(x, y, marker='o')
# Markers only — no connecting line
plt.plot(x, y, marker='s', linestyle='None')
plt.show()Todos os Estilos de Marcadores Integrados
O Matplotlib vem com mais de 30 códigos de marcadores integrados. A tabela abaixo lista os mais comumente usados.
| Código do marcador | Forma |
|---|---|
'o' | Círculo |
's' | Quadrado |
'D' | Diamante |
'd' | Diamante fino |
'^' | Triângulo (para cima) |
'v' | Triângulo (para baixo) |
'<' | Triângulo (para a esquerda) |
'>' | Triângulo (para a direita) |
'p' | Pentágono |
'h' | Hexágono 1 |
'H' | Hexágono 2 |
'8' | Octógono |
'*' | Estrela |
'+' | Cruz |
'x' | X |
'X' | X preenchido |
| `' | '` |
'_' | Linha horizontal |
'.' | Ponto (ponto pequeno) |
',' | Pixel |
'1' | Tri-baixo |
'2' | Tri-cima |
'3' | Tri-esquerda |
'4' | Tri-direita |
'None' ou '' | Sem marcador |
Para ver todos os marcadores de uma vez, você pode iterar sobre matplotlib.markers.MarkerStyle.markers:
import matplotlib.pyplot as plt
import matplotlib.markers as mmarkers
print(list(mmarkers.MarkerStyle.markers.keys()))Usando Marcadores em um Gráfico de Linhas
A função plot() aceita um argumento marker. Ele aplica o mesmo marcador a todos os pontos de dados.
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [10, 20, 15, 25, 30]
plt.plot(x, y, marker='o')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Line plot with circle markers')
plt.show()Usando uma String de Formato
Em vez de argumentos de palavra-chave separados, você pode combinar o estilo de linha, cor e marcador em uma única string de formato: '[color][marker][linestyle]'.
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [10, 20, 15, 25, 30]
# Red circles connected by a dashed line
plt.plot(x, y, 'ro--')
plt.title('Format string: red circles, dashed line')
plt.show()Componentes comuns de string de formato:
| Cor | Marcador | Estilo de linha |
|---|---|---|
'r' vermelho | 'o' círculo | '-' sólido |
'g' verde | 's' quadrado | '--' tracejado |
'b' azul | '^' triângulo | ':' pontilhado |
'k' preto | '*' estrela | '-.' traço-ponto |
'm' magenta | '+' cruz | 'None' sem linha |
Personalizando a Aparência dos Marcadores
O Matplotlib disponibiliza quatro argumentos de palavra-chave para controle detalhado dos marcadores:
| Parâmetro | O que controla |
|---|---|
markersize (ou ms) | Diâmetro do marcador em pontos |
markerfacecolor (ou mfc) | Cor de preenchimento do marcador |
markeredgecolor (ou mec) | Cor da borda do marcador |
markeredgewidth (ou mew) | Largura da borda do marcador em pontos |
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [10, 20, 15, 25, 30]
plt.plot(
x, y,
marker='o',
markersize=12,
markerfacecolor='gold',
markeredgecolor='navy',
markeredgewidth=2,
)
plt.title('Customized circle markers')
plt.show()Marcadores Ocos
Defina markerfacecolor='none' (string em minúsculas) para desenhar apenas a borda, criando um marcador oco:
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [3, 1, 4, 1, 5]
plt.plot(x, y, marker='s', markersize=14, markerfacecolor='none', markeredgecolor='steelblue', markeredgewidth=2)
plt.title('Hollow square markers')
plt.show()Estilo de Preenchimento
O parâmetro fillstyle controla qual parte do marcador é preenchida. Os valores válidos são 'full', 'left', 'right', 'bottom', 'top' e 'none'.
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [2, 4, 3, 5, 1]
plt.plot(x, y, marker='o', markersize=16, fillstyle='left', markerfacecolor='crimson', markeredgecolor='black')
plt.title('Half-filled circle markers (fillstyle="left")')
plt.show()Controle de Marcadores por Ponto com scatter()
plot() aplica um marcador uniforme a toda a linha. Quando cada ponto precisa ter um tamanho ou cor diferente — por exemplo, para codificar uma terceira variável — use scatter().
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [10, 20, 15, 25, 30]
sizes = [40, 100, 200, 80, 160] # area in points²
colors = [0.2, 0.5, 0.8, 0.3, 0.9] # mapped through colormap
sc = plt.scatter(x, y, s=sizes, c=colors, cmap='plasma', edgecolors='black')
plt.colorbar(sc, label='Value')
plt.title('Per-point size and color with scatter()')
plt.show()Principais diferenças entre plot() e scatter() para marcadores:
| Recurso | plot() | scatter() |
|---|---|---|
| Forma do marcador | Igual para todos os pontos | Igual para todos os pontos |
| Tamanho do marcador | Uniforme | Por ponto (array s) |
| Cor do marcador | Uniforme | Por ponto (array c + mapa de cores) |
| Desempenho em grandes conjuntos de dados | Mais rápido | Mais lento |
Múltiplas Séries de Dados com Marcadores Diferentes
Use chamadas plot() separadas para atribuir um marcador distinto a cada série e adicione uma legenda:
import matplotlib.pyplot as plt
months = [1, 2, 3, 4, 5, 6]
product_a = [120, 135, 110, 150, 140, 160]
product_b = [80, 95, 100, 90, 115, 130]
product_c = [60, 70, 65, 85, 90, 95]
plt.plot(months, product_a, marker='o', label='Product A')
plt.plot(months, product_b, marker='s', label='Product B')
plt.plot(months, product_c, marker='^', label='Product C')
plt.xlabel('Month')
plt.ylabel('Units sold')
plt.title('Monthly sales by product')
plt.legend()
plt.show()Marcadores Sem Linha de Conexão
Passando linestyle='None' (ou ls='None') remove a linha e deixa apenas os marcadores — efetivamente um gráfico de dispersão usando plot().
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5, 6, 7, 8]
y = [3, 1, 4, 1, 5, 9, 2, 6]
plt.plot(x, y, marker='D', linestyle='None', color='darkorange', markersize=10)
plt.title('Diamond markers, no line')
plt.show()Esse padrão é útil quando a ordem dos pontos de dados importa (preservando a ordenação original de x), mas você não quer uma linha sugerindo uma tendência contínua.
Dicas Práticas
- Combine o marcador com a densidade dos dados. Use marcadores pequenos (
'.'ou',') ao plotar milhares de pontos; formas maiores ('o','s') para um conjunto pequeno de medições. - Garanta contraste. Em fundos brancos, um
markeredgecolorescuro sobre ummarkerfacecolorclaro mantém cada ponto visível mesmo em tamanhos pequenos. - Evite sobrecarregar um único gráfico. Mais de cinco formas de marcadores distintas em um gráfico dificulta a leitura da legenda — considere usar subgráficos ou apenas cores.
- Use
scatter()para codificar uma terceira variável. Arrays de tamanho ou cor mapeados a um mapa de cores comunicam uma dimensão adicional sem adicionar mais séries à legenda.
Tópicos Relacionados
- Gráficos de Linha com Matplotlib — personalize o estilo de linha junto com seus marcadores
- Gráfico de Dispersão com Matplotlib — controle de tamanho e cor por ponto
- Rótulos do Matplotlib — adicione rótulos de eixo e títulos aos seus gráficos
- Visão Geral de Plotagem com Matplotlib — um tour por todos os principais tipos de gráficos