Marcadores en matplotlib

Los marcadores son los símbolos que representan cada punto de datos en matplotlib. Se pueden agregar a los gráficos de líneas con plot y son la base de los gráficos de dispersión creados con scatter. En este tutorial encontrarás la lista completa de marcadores y cómo personalizarlos.

Lista de marcadores en matplotlib

La siguiente imagen muestra todos los marcadores disponibles en matplotlib con la cadena de texto que tienes que pasar al argumento marker.

Lista de todos los marcadores de matplotlib

import matplotlib.pyplot as plt

markers = [".", ",", "o", "v", "^", "<", ">", "1", "2", "3", "4", "8", "s",
           "p", "P", "*", "h", "H", "+", "x", "X", "D", "d", "|", "_"]

fig, ax = plt.subplots(figsize = (8, 4))

for i, m in enumerate(markers):
    x, y = i % 9, - (i // 9)
    ax.plot(x, y, marker = m, markersize = 15, color = "tab:blue")
    ax.text(x, y - 0.4, f'"{m}"', ha = "center", fontsize = 11)

ax.set_xlim(-0.6, 8.6)
ax.set_ylim(-2.8, 0.5)
ax.axis("off")
# plt.show()
Marcador Descripción
“.” punto
“,” píxel
“o” círculo
“v” triángulo hacia abajo
“^” triángulo hacia arriba
“<” triángulo hacia la izquierda
“>” triángulo hacia la derecha
“1” trípode hacia abajo
“2” trípode hacia arriba
“3” trípode hacia la izquierda
“4” trípode hacia la derecha
“8” octógono
“s” cuadrado
“p” pentágono
“P” signo más (relleno)
“*“ estrella
“h” hexágono 1
“H” hexágono 2
“+” signo más
“x” x
“X” x (rellena)
“D” diamante
“d” diamante estrecho
“|” línea vertical
“_“ línea horizontal

Además, puedes usar los números del 0 al 11 para marcadores en forma de flecha y de marca, "none" o None para no mostrar ningún marcador y cualquier expresión matemática entre signos de dólar, como se explica al final de este tutorial.

Marcadores en gráficos de líneas

Utiliza el argumento marker de plot para agregar marcadores a un gráfico de líneas. En una cadena de formato el marcador se indica con su carácter, de modo que "o-" significa círculos unidos por una línea continua y "o" solo círculos.

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot([1, 3, 2, 4, 3], marker = "o")
ax.plot([0, 2, 1, 3, 2], marker = "s")
# plt.show()

Gráfico de líneas con marcadores en matplotlib

Mostrar un marcador cada N puntos

Cuando hay muchos datos utiliza markevery para dibujar solo algunos de los marcadores.

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 10, 100)

fig, ax = plt.subplots()
ax.plot(x, np.sin(x), marker = "o", markevery = 10)
# plt.show()

Mostrar marcadores cada N puntos en matplotlib con markevery

Marcadores en gráficos de dispersión

En scatter el marcador también se indica con marker, pero ten en cuenta que cada llamada solo admite un marcador. Para usar un marcador diferente por grupo llama a scatter una vez por cada grupo.

import numpy as np
import matplotlib.pyplot as plt

rng = np.random.default_rng(3)

fig, ax = plt.subplots()
ax.scatter(rng.normal(0, 1, 30), rng.normal(0, 1, 30), marker = "o", label = "A")
ax.scatter(rng.normal(2, 1, 30), rng.normal(2, 1, 30), marker = "^", label = "B")
ax.scatter(rng.normal(4, 1, 30), rng.normal(0, 1, 30), marker = "s", label = "C")
ax.legend()
# plt.show()

Marcadores diferentes por grupo en un gráfico de dispersión de matplotlib

Tamaño de los marcadores

El tamaño se establece con markersize (o ms) en plot y con s en scatter. Ten en cuenta que s es el área del marcador en puntos al cuadrado, así que para duplicar el diámetro tienes que multiplicar s por cuatro.

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot([1, 2, 3], [1, 2, 3], marker = "o", markersize = 15)
ax.scatter([1, 2, 3], [2, 3, 4], s = 200)
# plt.show()

Cambiar el tamaño de los marcadores en matplotlib

Tamaño según una variable

En scatter puedes pasar un array a s para crear un gráfico de burbujas en el que el tamaño de cada punto depende de una variable.

import numpy as np
import matplotlib.pyplot as plt

rng = np.random.default_rng(4)
x, y = rng.uniform(0, 10, (2, 20))
size = rng.uniform(20, 600, 20)

fig, ax = plt.subplots()
ax.scatter(x, y, s = size, alpha = 0.6)
# plt.show()

Tamaño de los marcadores según una variable en un gráfico de dispersión de matplotlib

Color de los marcadores

Los marcadores tienen un color de relleno y un color de borde. En plot utiliza markerfacecolor (mfc), markeredgecolor (mec) y markeredgewidth (mew). En scatter utiliza color o c, edgecolors y linewidths.

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot([1, 3, 2, 4], marker = "o", markersize = 14, color = "gray",
        markerfacecolor = "gold",
        markeredgecolor = "black",
        markeredgewidth = 2)
# plt.show()

Cambiar el color de relleno y del borde de los marcadores en matplotlib

Marcadores huecos

Para dibujar marcadores vacíos establece el color de relleno en "none" y especifica un color para el borde.

import numpy as np
import matplotlib.pyplot as plt

rng = np.random.default_rng(5)

fig, ax = plt.subplots()
ax.scatter(rng.normal(size = 50), rng.normal(size = 50), s = 80,
           facecolors = "none", edgecolors = "tab:red")
# plt.show()

Marcadores huecos en un gráfico de dispersión de matplotlib

Estilo de relleno

El argumento fillstyle de plot rellena solo una parte del marcador. Los valores posibles son "full", "left", "right", "bottom", "top" y "none".

import matplotlib.pyplot as plt

styles = ["full", "left", "right", "bottom", "top", "none"]

fig, ax = plt.subplots(figsize = (4, 2))
for i, style in enumerate(styles):
    ax.plot(i, 0, marker = "o", markersize = 20, color = "tab:blue", fillstyle = style)
    ax.text(i, -0.5, style, ha = "center")
ax.set_ylim(-0.8, 0.5)
ax.axis("off")
# plt.show()

Estilo de relleno de los marcadores en matplotlib

Marcadores personalizados

Cualquier expresión matemática o símbolo Unicode escrito entre signos de dólar se puede usar como marcador. Esto permite usar letras, números o símbolos como corazones o tréboles como marcadores.

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot([1, 2, 3], [1, 2, 3], marker = r"$\heartsuit$", markersize = 20, color = "red")
ax.plot([1, 2, 3], [2, 3, 4], marker = r"$\clubsuit$", markersize = 20, color = "black")
ax.plot([1, 2, 3], [3, 4, 5], marker = r"$A$", markersize = 15)
# plt.show()

Marcadores personalizados en matplotlib con mathtext

Consulta también la lista completa de tipos de línea, los colores con nombre que puedes usar para los marcadores y cómo crear un gráfico de dispersión en matplotlib.

Better Data Visualizations

A Guide for Scholars, Researchers, and Wonks

Comprar en Amazon

También te puede interesar