W3docs

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 marcadorForma
'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:

ColorMarcadorEstilo 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ámetroQué 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ísticaplot()scatter()
Forma del marcadorIgual para todos los puntosIgual para todos los puntos
Tamaño del marcadorUniformePor punto (array s)
Color del marcadorUniformePor punto (array c + mapa de colores)
Rendimiento en conjuntos de datos grandesMás rápidoMá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 markeredgecolor oscuro sobre un markerfacecolor claro 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

Was this page helpful?