¿Cuál es la librería de Python para crear gráficos?

Matplotlib: La Librería Esencial para Gráficos en Python

02/12/2022

Valoración: 4.84 (10496 votos)

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.

¿Cuál es la librería de Python para crear gráficos?
La librería de Python más popular para crear gráficos es matplotlib. Esta librería es de bajo nivel y tiene una sintaxis similar a Matlab. En esta sección encontrarás montones de ejemplos con código reproducible Matplotlib proporciona muchas funciones para personalizar la apariencia de los gráficos.
Índice de Contenido

¿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:

  1. 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 alias plt para mayor comodidad.
  2. 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.
  3. 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.
  4. 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.
  5. Guardar el gráfico: Si deseas almacenar tu visualización, la función savefig() te permite hacerlo en varios formatos (PNG, PDF, SVG, etc.).
  6. 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.

¿Qué es pyplot y para qué sirve?
¿Qué es PyPlot? Pyplot es un módulo Matplotlib que propone varias funciones sencillas para añadir elementos tales como líneas, imágenes o textos a los ejes de un gráfico. Su interfaz es muy cómoda y, por ello, este módulo se utiliza mucho.
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.

¿Qué es la función pie en Matplotlib?
Matplotlib dispone de la función pie, cuya sintaxis depende del grado de personalización y control que se requiera sobre la gráfica de pastel a dibujar. Para ejemplificar el uso de esta función vamos a suponer que se tienen los siguientes datos sobre algunas personas que tienen cierta cantidad de manzanas en su poder:
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).

¿Qué es Matplotlib y para qué se utiliza?
Matplotlib es una librería de Python especializada en la creación de gráficos en dos dimensiones. Permite crear y personalizar los tipos de gráficos más comunes, entre ellos: y combinaciones de todos ellos.
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) y ax.set_ylabel(titulo): Añaden títulos a los ejes X e Y respectivamente.
  • ax.set_xlim([limite-inferior, limite-superior]) y ax.set_ylim([limite-inferior, limite-superior]): Establecen los límites de los rangos mostrados en los ejes.
  • ax.set_xticks(marcas) y ax.set_yticks(marcas): Permiten especificar las posiciones de las marcas (ticks) en los ejes.
  • ax.set_xscale(escala) y ax.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.

¿Cómo se puede apoyar financieramente a Matplotlib?
Si Matplotlib contribuye a un proyecto que conduce a una publicación científica, ¡reconoca este trabajo citando el proyecto! Si desea apoyar financieramente a Matplotlib, puede donar patrocinando a Matplotlib en GitHub o haciendo una donación deducible de impuestos (EE. UU.) a través de NumFOCUS .

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.

Subir