Marcadores de Matplotlib
Aprende a usar y personalizar marcadores de Matplotlib en Python. Cubre estilos, tamaño, color, relleno y control por punto.
Los marcadores son los símbolos que Matplotlib dibuja en cada punto de datos de un gráfico. Elegir el estilo de marcador adecuado — y saber cómo cambiar su tamaño, color y relleno — puede marcar la diferencia entre un gráfico confuso y uno que comunica con claridad. Esta página cubre todos los estilos de marcador disponibles en Matplotlib, cómo personalizar su apariencia y cuándo usar plot() frente a scatter() para el control por punto.
¿Qué es un marcador en Matplotlib?
Un marcador es una forma que se renderiza en cada coordenada (x, y) de un gráfico. Puedes controlar qué forma se usa con el parámetro marker (o como parte de una cadena de formato). Los marcadores son independientes de la línea que conecta los puntos de datos — puedes mostrar uno sin el otro.
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 los estilos de marcador integrados
Matplotlib incluye más de 30 códigos de marcador integrados. La tabla siguiente lista los más utilizados.
| Código de marcador | Forma |
|---|---|
'o' | Círculo |
's' | Cuadrado |
'D' | Diamante |
'd' | Diamante delgado |
'^' | Triángulo (arriba) |
'v' | Triángulo (abajo) |
'<' | Triángulo (izquierda) |
'>' | Triángulo (derecha) |
'p' | Pentágono |
'h' | Hexágono 1 |
'H' | Hexágono 2 |
'8' | Octágono |
'*' | Estrella |
'+' | Más |
'x' | Cruz |
'X' | Cruz rellena |
| `' | '` |
'_' | Línea horizontal |
'.' | Punto (punto pequeño) |
',' | Píxel |
'1' | Tri-abajo |
'2' | Tri-arriba |
'3' | Tri-izquierda |
'4' | Tri-derecha |
'None' o '' | Sin marcador |
Para ver todos los marcadores a la vez, puedes iterar sobre matplotlib.markers.MarkerStyle.markers:
import matplotlib.pyplot as plt
import matplotlib.markers as mmarkers
print(list(mmarkers.MarkerStyle.markers.keys()))Uso de marcadores en un gráfico de líneas
La función plot() acepta un argumento marker. Aplica el mismo marcador a cada punto de datos.
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()Uso de una cadena de formato
En lugar de argumentos de palabra clave separados, puedes combinar el estilo de línea, el color y el marcador en una sola cadena 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 comunes de la cadena de formato:
| Color | Marcador | Estilo de línea |
|---|---|---|
'r' rojo | 'o' círculo | '-' sólido |
'g' verde | 's' cuadrado | '--' discontinuo |
'b' azul | '^' triángulo | ':' punteado |
'k' negro | '*' estrella | '-.' guion-punto |
'm' magenta | '+' más | 'None' sin línea |
Personalización de la apariencia del marcador
Matplotlib expone cuatro argumentos de palabra clave para un control preciso del marcador:
| Parámetro | Qué controla |
|---|---|
markersize (o ms) | Diámetro del marcador en puntos |
markerfacecolor (o mfc) | Color de relleno del marcador |
markeredgecolor (o mec) | Color del borde del marcador |
markeredgewidth (o mew) | Ancho del borde del marcador en puntos |
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 huecos
Establece markerfacecolor='none' (string en minúsculas) para dibujar solo el borde, creando un marcador hueco:
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 relleno
El parámetro fillstyle controla qué parte del marcador está rellena. Los valores válidos son 'full', 'left', 'right', 'bottom', 'top' y '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()Control de marcador por punto con scatter()
plot() aplica un marcador uniforme a toda la línea. Cuando necesitas que cada punto tenga un tamaño o color diferente — por ejemplo, para codificar una tercera variable — usa scatter() en su lugar.
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()Diferencias clave entre plot() y scatter() para marcadores:
| Característica | plot() | scatter() |
|---|---|---|
| Forma del marcador | Igual para todos los puntos | Igual para todos los puntos |
| Tamaño del marcador | Uniforme | Por punto (array s) |
| Color del marcador | Uniforme | Por punto (array c + mapa de colores) |
| Rendimiento en conjuntos de datos grandes | Más rápido | Más lento |
Múltiples series de datos con marcadores distintos
Usa llamadas separadas a plot() para asignar un marcador distinto a cada serie y luego agrega una leyenda:
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 sin línea de conexión
Pasar linestyle='None' (o ls='None') elimina la línea y deja solo los marcadores — efectivamente un gráfico de dispersión 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()Este patrón es útil cuando el orden de los puntos de datos importa (conservando el ordenamiento original de x) pero no deseas una línea que implique una tendencia continua.
Consejos prácticos
- Adapta el marcador a la densidad de los datos. Usa marcadores pequeños (
'.'o',') cuando grafiques miles de puntos; formas más grandes ('o','s') para un puñado de mediciones. - Asegura el contraste. En fondos blancos, un
markeredgecoloroscuro sobre unmarkerfacecolorclaro mantiene cada punto visible incluso en tamaños pequeños. - Evita sobrecargar un solo gráfico. Más de cinco formas de marcador distintas en un mismo gráfico dificulta la lectura de la leyenda — considera el uso de subgráficos o solo color.
- Usa
scatter()para codificar una tercera variable. Los arrays de tamaño o color mapeados a un mapa de colores comunican una dimensión adicional sin agregar más series a la leyenda.
Temas relacionados
- Gráficos de líneas en Matplotlib — personaliza el estilo de línea junto con tus marcadores
- Gráfico de dispersión en Matplotlib — control de tamaño y color por punto
- Etiquetas en Matplotlib — agrega etiquetas de ejes y títulos a tus gráficos
- Descripción general de graficado en Matplotlib — un recorrido por todos los tipos de gráficos principales