El estilo de una línea en matplotlib se controla con el argumento linestyle (o ls), disponible en plot y en cualquier función que dibuje líneas, como axhline, vlines, grid o los bordes de las barras. Esta guía contiene la lista de tipos de línea y cómo personalizar el grosor, el color y el patrón de las líneas.
Matplotlib proporciona cuatro tipos de línea con nombre, que se pueden indicar con su nombre o con una cadena corta. Utiliza "None", "" o " " para no dibujar ninguna línea.
| Nombre | Cadena corta | Descripción |
|---|---|---|
“solid”
|
“-”
|
Línea continua (por defecto) |
“dashed”
|
“–”
|
Línea discontinua |
“dashdot”
|
“-.”
|
Línea de rayas y puntos |
“dotted”
|
“:”
|
Línea punteada |
“None”
|
““
|
Sin línea |
El siguiente gráfico muestra los tipos de línea con nombre y algunos estilos personalizados habituales creados con tuplas de patrones, que se explican más adelante en este tutorial.

import matplotlib.pyplot as plt
styles = [("solid", "-"), ("dashed", "--"), ("dashdot", "-."), ("dotted", ":"),
("loosely dotted", (0, (1, 10))), ("densely dotted", (0, (1, 1))),
("loosely dashed", (0, (5, 10))), ("densely dashed", (0, (5, 1))),
("dashdotdotted", (0, (3, 5, 1, 5, 1, 5))), ("long dash with offset", (5, (10, 3)))]
fig, ax = plt.subplots(figsize = (8, 5))
for i, (name, style) in enumerate(styles):
ax.plot([0, 1], [-i, -i], linestyle = style, linewidth = 2, color = "black")
ax.text(-0.02, -i, name, ha = "right", va = "center", fontsize = 11)
ax.text(1.02, -i, repr(style), ha = "left", va = "center", fontsize = 10, family = "monospace")
ax.set_xlim(-0.45, 1.5)
ax.axis("off")
# plt.show()
Pasa cualquiera de los estilos anteriores a linestyle o ls.
import numpy as np
import matplotlib.pyplot as plt
years = np.arange(2025, 2036)
base = 100 + 4 * (years - 2025)
fig, ax = plt.subplots()
ax.plot(years, base * 1.15, linestyle = "dashed", linewidth = 2, label = "Optimista")
ax.plot(years, base, linestyle = "solid", linewidth = 2, label = "Base")
ax.plot(years, base * 0.85, linestyle = ":", linewidth = 2, label = "Pesimista")
ax.legend()
# plt.show()

Cadenas de formato
El tercer argumento posicional de plot es una cadena de formato que combina el color, el marcador y el tipo de línea. Por ejemplo, "r--" es una línea discontinua roja y "go:" una línea punteada verde con círculos.
import numpy as np
import matplotlib.pyplot as plt
years = np.arange(2025, 2036)
base = 100 + 4 * (years - 2025)
fig, ax = plt.subplots()
ax.plot(years, base, "r--")
ax.plot(years, base * 0.9, "go:")
# plt.show()

Para tener más control pasa una tupla de la forma (offset, (on, off, on, off, ...)), donde on y off son las longitudes de los trazos y de los espacios en puntos y offset es el punto en el que empieza el patrón. Por ejemplo, (0, (5, 1)) dibuja trazos largos separados por espacios pequeños y (0, (3, 5, 1, 5)) una línea de rayas y puntos con espacios más amplios.
import numpy as np
import matplotlib.pyplot as plt
years = np.arange(2025, 2036)
base = 100 + 4 * (years - 2025)
fig, ax = plt.subplots()
ax.plot(years, base, linestyle = (0, (5, 1)))
ax.plot(years, base * 1.1, linestyle = (0, (3, 5, 1, 5)))
# plt.show()

El grosor de las líneas se establece en puntos con linewidth o lw. El valor por defecto es 1.5.
import numpy as np
import matplotlib.pyplot as plt
years = np.arange(2025, 2036)
base = 100 + 4 * (years - 2025)
fig, ax = plt.subplots()
ax.plot(years, base, linewidth = 0.5)
ax.plot(years, base + 10, linewidth = 2)
ax.plot(years, base + 20, linewidth = 5)
# plt.show()

Color y transparencia de la línea
Utiliza color para cambiar el color de la línea (consulta la lista completa de colores de matplotlib) y alpha para establecer su transparencia.
import numpy as np
import matplotlib.pyplot as plt
years = np.arange(2025, 2036)
base = 100 + 4 * (years - 2025)
fig, ax = plt.subplots()
ax.plot(years, base, color = "darkorange", linewidth = 4, alpha = 0.5)
# plt.show()

Los argumentos dash_capstyle y solid_capstyle cambian los extremos de los trazos y de las líneas ("butt", "round" o "projecting"), mientras que dash_joinstyle y solid_joinstyle establecen cómo se unen los segmentos ("miter", "round" o "bevel"). Las diferencias se aprecian con líneas gruesas.
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot([0, 1], [1, 1], linestyle = "--", linewidth = 8, dash_capstyle = "butt")
ax.plot([0, 1], [0, 0], linestyle = "--", linewidth = 8, dash_capstyle = "round")
ax.set_ylim(-0.5, 1.5)
# plt.show()

Los mismos argumentos funcionan en cualquier elemento formado por líneas, como las líneas horizontales y verticales, las líneas del grid, el borde de las barras o los bordes de los ejes.
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.bar(["A", "B", "C"], [3, 5, 4], edgecolor = "black", linestyle = "--")
ax.axhline(4, color = "red", linestyle = ":", linewidth = 2)
ax.grid(axis = "y", linestyle = "-.")
ax.set_axisbelow(True)
# plt.show()

Aprende más sobre cómo personalizar las líneas del grid y los marcadores o cómo crear un gráfico de líneas en matplotlib.
También te puede interesar