02/12/2022
En el vasto universo de la programación y el análisis de datos, la capacidad de visualizar información es tan crucial como la de procesarla. Aquí es donde Matplotlib brilla con luz propia, presentándose como la librería de Python por excelencia para la creación de gráficos bidimensionales. Desde su concepción, ha sido una herramienta indispensable para científicos, ingenieros y analistas, permitiendo transformar complejos conjuntos de datos en representaciones visuales claras y comprensibles. Este artículo te guiará a través de sus funcionalidades clave, desde la creación de gráficos básicos hasta la personalización avanzada, y te mostrará por qué es una piedra angular en el ecosistema de Python para la visualización de datos.

- ¿Qué es Matplotlib? La Herramienta Definitiva para Gráficos 2D
- El Proceso de Creación de Gráficos con Matplotlib
- Explorando los Tipos de Gráficos que Puedes Crear
- Diagramas de Dispersión o Puntos (scatter)
- Diagramas de Líneas (plot)
- Diagramas de Áreas (fill_between)
- Diagramas de Barras Verticales (bar) y Horizontales (barh)
- Histogramas (hist)
- Diagramas de Sectores (pie)
- Diagramas de Caja y Bigotes (boxplot)
- Diagramas de Violín (violinplot)
- Diagramas de Contorno (contourf)
- Mapas de Color (imshow, hist2d)
- Personalización Avanzada: Dale Estilo a tus Visualizaciones
- Múltiples Gráficos en una Sola Figura
- Integración con Pandas: Visualización Simplificada
- Apoyando el Desarrollo de Matplotlib
- Preguntas Frecuentes sobre Matplotlib
- Conclusión
¿Qué es Matplotlib? La Herramienta Definitiva para Gráficos 2D
Matplotlib es una librería de Python de código abierto, desarrollada inicialmente por el neurobiólogo John Hunter en 2002. Su objetivo principal era replicar las capacidades de visualización de MATLAB con Python, especialmente para analizar señales eléctricas cerebrales. Tras el fallecimiento de Hunter en 2012, la comunidad de código abierto ha continuado mejorando y expandiendo esta poderosa herramienta, consolidándola como una alternativa robusta y flexible para la creación de gráficos de alta calidad.
Esta librería es particularmente útil para cualquier persona que trabaje con Python y necesite representar datos. Se utiliza ampliamente en:
- Análisis de datos y ciencia de datos.
- Desarrollo de aplicaciones web.
- Scripts de automatización y shells interactivos.
- Integración de gráficos en aplicaciones con interfaz gráfica de usuario (GUI).
Matplotlib te permite crear y personalizar una amplia gama de los tipos de gráficos más comunes, incluyendo:
- Diagramas de barras
- Histogramas
- Diagramas de sectores (circulares)
- Diagramas de caja y bigotes (box plots)
- Diagramas de violín
- Diagramas de dispersión o puntos
- Diagramas de líneas
- Diagramas de áreas
- Diagramas de contorno
- Mapas de color
- Y combinaciones diversas de todos ellos.
La versatilidad de Matplotlib radica en su capacidad para ofrecer un control granular sobre cada aspecto visual del gráfico, lo que la convierte en una elección predilecta para la publicación de trabajos científicos y la creación de informes profesionales.
El Proceso de Creación de Gráficos con Matplotlib
Crear un gráfico con Matplotlib es un proceso intuitivo que generalmente sigue una serie de pasos bien definidos. Comprender esta secuencia te permitirá construir cualquier tipo de visualización de manera eficiente:
- Importar el módulo
pyplot: Este es el módulo más utilizado y proporciona una interfaz similar a MATLAB para la creación de gráficos. Se suele importar con el aliaspltpara mayor comodidad. - Definir la figura y los ejes: La figura es la ventana o página completa donde se dibujará el gráfico, mientras que los ejes son las regiones individuales dentro de la figura donde se trazarán los datos. La función
subplots()es fundamental para esto. - Dibujar los datos sobre los ejes: Aquí es donde utilizas las funciones específicas de Matplotlib (como
scatter(),plot(),bar(), etc.) para representar tus datos. - Personalizar el gráfico: Una vez dibujados los datos, puedes añadir títulos, leyendas, rejillas, cambiar colores, estilos de línea, marcadores y ajustar los ejes para mejorar la claridad y estética.
- Guardar el gráfico: Si deseas almacenar tu visualización, la función
savefig()te permite hacerlo en varios formatos (PNG, PDF, SVG, etc.). - Mostrar el gráfico: Finalmente, la función
show()es la encargada de abrir una ventana y mostrar tu gráfico.
Veamos un ejemplo básico de cómo crear un diagrama de dispersión:
import matplotlib.pyplot as plt # Crear la figura y los ejes fig, ax = plt.subplots() # Dibujar puntos ax.scatter(x = [1, 2, 3], y = [3, 2, 1]) # Guardar el gráfico en formato png plt.savefig('diagrama-dispersion.png') # Mostrar el gráfico plt.show()Explorando los Tipos de Gráficos que Puedes Crear
Matplotlib ofrece una amplia variedad de funciones para crear diferentes tipos de gráficos, cada uno diseñado para visualizar distintos tipos de relaciones y distribuciones de datos. A continuación, exploraremos algunos de los más comunes:
Diagramas de Dispersión o Puntos (scatter)
El diagrama de dispersión es ideal para visualizar la relación entre dos variables numéricas. Cada punto representa una observación, con sus coordenadas determinadas por los valores de las variables.
import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.scatter([1, 2, 3, 4], [1, 2, 0, 0.5]) plt.show()Diagramas de Líneas (plot)
Los diagramas de líneas son perfectos para mostrar tendencias a lo largo del tiempo o secuencias ordenadas. La función plot() conecta puntos de datos con segmentos de línea.
La función plot, contenida en el módulo pyplot, es una de las más versátiles. Básicamente, con ella se produce cualquier gráfica bidimensional en coordenadas rectangulares. Esta función soporta varias maneras de ejecutarse dependiendo la cantidad de argumentos que se pasen:
- Con un solo argumento: Si le pasas un solo argumento (una lista o array), este se toma como los valores de la coordenada vertical (Y), y se asume que la coordenada horizontal (X) varía de 0 a N-1, donde N es el número de elementos en la lista.
- Con dos argumentos: La sintaxis más habitual es introducir dos argumentos, donde el primero contiene una lista (X) que define los valores de la coordenada horizontal, y el segundo una lista (Y) correspondiente a los valores de la coordenada vertical.
import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.plot([1, 2, 3, 4], [1, 2, 0, 0.5]) plt.show()Diagramas de Áreas (fill_between)
Los diagramas de áreas son útiles para visualizar la magnitud de cambio a lo largo del tiempo, rellenando el espacio entre la línea y el eje.

import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.fill_between([1, 2, 3, 4], [1, 2, 0, 0.5]) plt.show()Diagramas de Barras Verticales (bar) y Horizontales (barh)
Los diagramas de barras son excelentes para comparar cantidades entre diferentes categorías. Puedes crearlos tanto de forma vertical como horizontal.
# Barras verticales import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.bar([1, 2, 3], [3, 2, 1]) plt.show() # Barras horizontales import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.barh([1, 2, 3], [3, 2, 1]) plt.show()Histogramas (hist)
Los histogramas muestran la distribución de una variable numérica, agrupando los datos en "clases" o "bins" y contando la frecuencia de ocurrencia en cada una.
import numpy as np import matplotlib.pyplot as plt fig, ax = plt.subplots() x = np.random.normal(5, 1.5, size=1000) ax.hist(x, np.arange(0, 11)) plt.show()Diagramas de Sectores (pie)
Los diagramas de sectores (o gráficos de pastel) son ideales para mostrar la proporción de diferentes categorías dentro de un todo.
import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.pie([5, 4, 3, 2, 1]) plt.show()Diagramas de Caja y Bigotes (boxplot)
Los diagramas de caja y bigotes son útiles para visualizar la distribución de datos numéricos y detectar valores atípicos (outliers).
import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.boxplot([1, 2, 1, 2, 3, 4, 3, 3, 5, 7]) plt.show()Diagramas de Violín (violinplot)
Similar a los box plots, los diagramas de violín muestran la distribución de los datos, pero con una densidad estimada de la probabilidad en cada punto.
import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.violinplot([1, 2, 1, 2, 3, 4, 3, 3, 5, 7]) plt.show()Diagramas de Contorno (contourf)
Los diagramas de contorno se utilizan para representar funciones de dos variables, mostrando curvas de nivel que conectan puntos de igual valor.

import matplotlib.pyplot as plt import numpy as np fig, ax = plt.subplots() x = np.linspace(-3.0, 3.0, 100) y = np.linspace(-3.0, 3.0, 100) x, y = np.meshgrid(x, y) z = np.sqrt(x2 + 2*y2) ax.contourf(x, y, z) plt.show()Mapas de Color (imshow, hist2d)
Los mapas de color son representaciones visuales de matrices bidimensionales, donde el color de cada celda indica un valor. hist2d simula un histograma bidimensional con colores.
# imshow para matrices import matplotlib.pyplot as plt import numpy as np fig, ax = plt.subplots() x = np.random.random((16, 16)) ax.imshow(x) plt.show() # hist2d para histograma bidimensional import matplotlib.pyplot as plt import numpy as np fig, ax = plt.subplots() x, y = np.random.multivariate_normal(mean=[0.0, 0.0], cov=[[1.0, 0.4], [0.4, 0.5]], size=1000).T ax.hist2d(x, y) plt.show()Personalización Avanzada: Dale Estilo a tus Visualizaciones
La verdadera potencia de Matplotlib reside en su capacidad de personalización. Prácticamente todos los elementos de un gráfico pueden ser modificados para adaptarse a tus necesidades estéticas o de presentación.
Colores
Puedes cambiar el color de los objetos (líneas, barras, puntos) usando el parámetro color. Puedes especificar nombres de colores predefinidos, códigos hexadecimales o tuplas RGB.
import matplotlib.pyplot as plt fig, ax = plt.subplots() dias = ['L', 'M', 'X', 'J', 'V', 'S', 'D'] temperaturas = {'Madrid':[28.5, 30.5, 31, 30, 28, 27.5, 30.5], 'Barcelona':[24.5, 25.5, 26.5, 25, 26.5, 24.5, 25]} ax.plot(dias, temperaturas['Madrid'], color = 'tab:purple') ax.plot(dias, temperaturas['Barcelona'], color = 'tab:green') plt.show()Marcadores
Para los diagramas de puntos o líneas, puedes definir la forma de los marcadores utilizando el parámetro marker. Matplotlib ofrece una gran variedad de símbolos.
import matplotlib.pyplot as plt fig, ax = plt.subplots() dias = ['L', 'M', 'X', 'J', 'V', 'S', 'D'] temperaturas = {'Madrid':[28.5, 30.5, 31, 30, 28, 27.5, 30.5], 'Barcelona':[24.5, 25.5, 26.5, 25, 26.5, 24.5, 25]} ax.plot(dias, temperaturas['Madrid'], marker = '^') ax.plot(dias, temperaturas['Barcelona'], marker = 'o') plt.show()Estilo y Grosor de Línea
El parámetro linestyle te permite cambiar el patrón de las líneas (sólida, discontinua, punteada, etc.), mientras que linewidth controla el grosor.
import matplotlib.pyplot as plt fig, ax = plt.subplots() dias = ['L', 'M', 'X', 'J', 'V', 'S', 'D'] temperaturas = {'Madrid':[28.5, 30.5, 31, 30, 28, 27.5, 30.5], 'Barcelona':[24.5, 25.5, 26.5, 25, 26.5, 24.5, 25]} ax.plot(dias, temperaturas['Madrid'], linestyle = 'dashed') ax.plot(dias, temperaturas['Barcelona'], linestyle = 'dotted') plt.show() # Ejemplo de grosor de línea x = [1, 2, 3, 4] y = [1, 4, 2, 5] plt.plot(x, y, linestyle='-', color='coral', marker='*', linewidth=3) plt.show()Títulos del Gráfico
Añadir un título principal a tu gráfico es esencial para contextualizarlo. Usa ax.set_title(titulo, loc=alineacion, fontdict=fuente) para establecerlo. Puedes controlar la alineación ('left', 'center', 'right') y las propiedades de la fuente (fontsize, fontweight, color).

import matplotlib.pyplot as plt fig, ax = plt.subplots() dias = ['L', 'M', 'X', 'J', 'V', 'S', 'D'] temperaturas = {'Madrid':[28.5, 30.5, 31, 30, 28, 27.5, 30.5], 'Barcelona':[24.5, 25.5, 26.5, 25, 26.5, 24.5, 25]} ax.plot(dias, temperaturas['Madrid']) ax.plot(dias, temperaturas['Barcelona']) ax.set_title('Evolución de la temperatura diaria', loc = "left", fontdict = {'fontsize':14, 'fontweight':'bold', 'color':'tab:blue'}) plt.show()Personalización de Ejes
Los ejes son cruciales para la legibilidad del gráfico. Matplotlib ofrece métodos para etiquetar, limitar, y escalar los ejes:
ax.set_xlabel(titulo)yax.set_ylabel(titulo): Añaden títulos a los ejes X e Y respectivamente.ax.set_xlim([limite-inferior, limite-superior])yax.set_ylim([limite-inferior, limite-superior]): Establecen los límites de los rangos mostrados en los ejes.ax.set_xticks(marcas)yax.set_yticks(marcas): Permiten especificar las posiciones de las marcas (ticks) en los ejes.ax.set_xscale(escala)yax.set_yscale(escala): Permiten cambiar la escala de los ejes a 'linear' o 'log'.
import matplotlib.pyplot as plt fig, ax = plt.subplots() dias = ['L', 'M', 'X', 'J', 'V', 'S', 'D'] temperaturas = {'Madrid':[28.5, 30.5, 31, 30, 28, 27.5, 30.5], 'Barcelona':[24.5, 25.5, 26.5, 25, 26.5, 24.5, 25]} ax.plot(dias, temperaturas['Madrid']) ax.plot(dias, temperaturas['Barcelona']) ax.set_xlabel("Días", fontdict = {'fontsize':14, 'fontweight':'bold', 'color':'tab:blue'}) ax.set_ylabel("Temperatura ºC") ax.set_ylim([20,35]) ax.set_yticks(range(20, 35)) plt.show()Leyendas
Las leyendas son vitales cuando tienes múltiples series de datos en un mismo gráfico. La función ax.legend(leyendas, loc = posición) crea una leyenda. Puedes definir la leyenda de cada serie directamente en la función de dibujo (e.g., label='Madrid') y luego simplemente llamar a ax.legend().
import matplotlib.pyplot as plt fig, ax = plt.subplots() dias = ['L', 'M', 'X', 'J', 'V', 'S', 'D'] temperaturas = {'Madrid':[28.5, 30.5, 31, 30, 28, 27.5, 30.5], 'Barcelona':[24.5, 25.5, 26.5, 25, 26.5, 24.5, 25]} ax.plot(dias, temperaturas['Madrid'], label = 'Madrid') ax.plot(dias, temperaturas['Barcelona'], label = 'Barcelona') ax.legend(loc = 'upper right') plt.show()Rejillas
Las rejillas pueden mejorar la legibilidad del gráfico, facilitando la lectura de valores. Utiliza ax.grid(axis=ejes, color=color, linestyle=estilo) para añadir una. Puedes especificar si la rejilla se aplica al eje 'x', 'y' o 'both'.
import matplotlib.pyplot as plt fig, ax = plt.subplots() dias = ['L', 'M', 'X', 'J', 'V', 'S', 'D'] temperaturas = {'Madrid':[28.5, 30.5, 31, 30, 28, 27.5, 30.5], 'Barcelona':[24.5, 25.5, 26.5, 25, 26.5, 24.5, 25]} ax.plot(dias, temperaturas['Madrid']) ax.plot(dias, temperaturas['Barcelona']) ax.grid(axis = 'y', color = 'gray', linestyle = 'dashed') plt.show()Múltiples Gráficos en una Sola Figura
A menudo, es útil mostrar varios gráficos relacionados dentro de una misma figura para facilitar comparaciones. Matplotlib permite organizar estos gráficos en una cuadrícula utilizando la función subplots(), donde puedes especificar el número de filas y columnas. Los ejes se organizan en un array, y puedes acceder a cada uno mediante sus índices.
import matplotlib.pyplot as plt fig, ax = plt.subplots(2, 2, sharey = True) # 2x2 grid, sharing Y-axis limits dias = ['L', 'M', 'X', 'J', 'V', 'S', 'D'] temperaturas = {'Madrid':[28.5, 30.5, 31, 30, 28, 27.5, 30.5], 'Barcelona':[24.5, 25.5, 26.5, 25, 26.5, 24.5, 25]} ax[0, 0].plot(dias, temperaturas['Madrid']) ax[0, 1].plot(dias, temperaturas['Barcelona'], color = 'tab:orange') ax[1, 0].bar(dias, temperaturas['Madrid']) ax[1, 1].bar(dias, temperaturas['Barcelona'], color = 'tab:orange') plt.show()Integración con Pandas: Visualización Simplificada
Para aquellos que trabajan con la librería Pandas para el manejo de datos, Matplotlib se integra de manera excepcional. Los objetos Series y DataFrames de Pandas tienen un método .plot() incorporado que utiliza Matplotlib para generar gráficos de forma rápida y sencilla.
El método df.plot(kind=tipo, x=columnax, y=columnay, ax=ejes) te permite dibujar un diagrama del tipo especificado por kind (como 'line', 'scatter', 'bar', 'hist', 'pie', etc.) en los ejes indicados por ax, utilizando las columnas de tu DataFrame para los ejes X e Y. Si no se especifican x e y, el índice del DataFrame se usa para el eje X y cada columna numérica se grafica como una serie separada.
import pandas as pd import matplotlib.pyplot as plt df = pd.DataFrame({'Días':['L', 'M', 'X', 'J', 'V', 'S', 'D'], 'Madrid':[28.5, 30.5, 31, 30, 28, 27.5, 30.5], 'Barcelona':[24.5, 25.5, 26.5, 25, 26.5, 24.5, 25]}) fig, ax = plt.subplots() df.plot(x = 'Días', y = 'Madrid', ax = ax) df.plot(x = 'Días', y = 'Barcelona', ax = ax) plt.show()Apoyando el Desarrollo de Matplotlib
Matplotlib es un proyecto de código abierto que depende del apoyo de su comunidad. Si esta librería contribuye a tus proyectos, especialmente a publicaciones científicas, una excelente manera de apoyar es citando el proyecto en tu trabajo. Si deseas brindar apoyo financiero, puedes hacerlo de dos maneras principales:
- Patrocinando a Matplotlib en GitHub: Esta es una forma directa de contribuir al desarrollo continuo de la librería.
- Haciendo una donación deducible de impuestos (para residentes de EE. UU.) a través de NumFOCUS, una organización sin fines de lucro que apoya proyectos de código abierto en ciencia de datos.
Tu apoyo, ya sea a través del uso, la citación o la contribución financiera, es fundamental para el crecimiento y la sostenibilidad de Matplotlib.

Preguntas Frecuentes sobre Matplotlib
¿Qué es Matplotlib y por qué es importante?
Matplotlib es una librería de Python especializada en la creación de gráficos en dos dimensiones. Es importante porque permite a los usuarios visualizar datos complejos de manera clara y efectiva, facilitando el análisis, la interpretación y la comunicación de hallazgos en campos como la ciencia de datos, la ingeniería, la investigación y la economía. Su flexibilidad y amplia gama de tipos de gráficos la hacen indispensable.
¿Cuál es la función plot y cómo se usa?
La función plot() es una de las más fundamentales en Matplotlib, utilizada principalmente para crear diagramas de líneas. Puede usarse con un solo argumento (valores Y, asumiendo X de 0 a N-1) o con dos argumentos (valores X e Y). Además, es extremadamente personalizable a través de parámetros como color, linestyle (para el estilo de línea, como 'solid', 'dashed', 'dotted'), marker (para la forma de los puntos de datos, como 'o' para círculos, '^' para triángulos) y linewidth (para el grosor de la línea).
¿Qué es el módulo pyplot?
pyplot es un módulo dentro de la librería Matplotlib que proporciona una interfaz de alto nivel para la creación de gráficos, similar a la de MATLAB. Es el módulo más comúnmente utilizado para empezar a graficar, ya que simplifica muchas operaciones, permitiendo crear figuras, ejes y dibujar datos con unas pocas líneas de código. Se suele importar como import matplotlib.pyplot as plt.
¿Puedo personalizar los colores y estilos de línea en mis gráficos?
¡Absolutamente! Matplotlib ofrece una capacidad de personalización muy granular. Puedes cambiar los colores de las líneas, barras o puntos utilizando el parámetro color (especificando nombres de colores, códigos hexadecimales o tuplas RGB). Los estilos de línea se modifican con linestyle (por ejemplo, 'solid', 'dashed', 'dotted'), y el grosor de la línea con linewidth. Además, puedes elegir entre una gran variedad de marcadores para los puntos de datos con el parámetro marker.
¿Matplotlib soporta gráficos 3D?
Aunque Matplotlib es principalmente conocida por sus capacidades de gráficos 2D, sí ofrece soporte para gráficos 3D a través de la extensión mplot3d. Esta extensión permite crear una variedad de visualizaciones tridimensionales, como gráficos de dispersión 3D, gráficos de superficie y gráficos de contorno 3D, aunque su uso es menos directo que las funciones 2D.
Conclusión
Matplotlib es mucho más que una simple librería de gráficos; es una herramienta esencial que empodera a los usuarios de Python para explorar, comprender y comunicar sus datos de una manera visualmente atractiva y efectiva. Su flexibilidad, la riqueza de sus opciones de personalización y su activa comunidad de desarrollo la convierten en un pilar fundamental en el ecosistema de la ciencia de datos. Dominar Matplotlib te permitirá transformar números en narrativas visuales convincentes, abriendo un nuevo nivel de comprensión y análisis en cualquier proyecto. ¡Anímate a explorar todas sus posibilidades y lleva tus visualizaciones de datos al siguiente nivel!
Si quieres conocer otros artículos parecidos a Matplotlib: La Librería Esencial para Gráficos en Python puedes visitar la categoría Librerías.
