Volver al catálogo
Season 36 5 Episodios 21 min 2026

Matplotlib

v3.10 — Edición 2026. Un completo curso en audio sobre Matplotlib, la biblioteca de visualización más popular de Python. Aprende la identidad principal, el ciclo de vida de un gráfico, diseños avanzados, tipos de gráficos y flujos de trabajo para usuarios avanzados en la versión 3.10.

Visualización de datos Ciencia de datos
Matplotlib
Reproduciendo ahora
Click play to start
0:00
0:00
1
La identidad principal: Figures, Axes e interfaces
Bienvenidos a Matplotlib. En este episodio, definimos el modelo mental que se encuentra en el corazón de la biblioteca de visualización más popular de Python. Aprende la diferencia entre un Figure y un Axes, y por qué la interfaz explícita Object-Oriented es tu mejor herramienta.
3m 38s
2
El ciclo de vida de un gráfico
Descubre cómo llevar un gráfico desde los datos sin procesar hasta una visualización formateada y con etiquetas. Repasamos el ciclo de vida de un gráfico sencillo, mostrándote exactamente cómo añadir etiquetas, títulos y tick formatters personalizados utilizando la interfaz explícita.
3m 59s
3
Dominando los diseños: Subplots y mosaicos
Aprende a gestionar múltiples gráficos en un solo lienzo sin que se superpongan. Este episodio cubre plt.subplots, el poder de subplot_mosaic para diseños semánticos y el uso de constrained layout para mantener todo ordenado.
4m 45s
4
Más allá de la línea: Explorando los tipos de gráficos principales
Ve más allá de las líneas básicas y los scatter plots. Trazamos un mapa de las categorías de gráficos de Matplotlib, contrastando los gráficos de distribución estadística con funciones de datos en cuadrícula como imshow y pcolormesh.
3m 59s
5
Flujos de trabajo para usuarios avanzados: Estilos y rcParams
Transforma el aspecto de tus gráficos al instante. En nuestro episodio final, exploramos cómo utilizar style sheets predefinidas y personalizar dinámicamente la configuración global usando rcParams.
4m 50s

Episodios

1

La identidad principal: Figures, Axes e interfaces

3m 38s

Bienvenidos a Matplotlib. En este episodio, definimos el modelo mental que se encuentra en el corazón de la biblioteca de visualización más popular de Python. Aprende la diferencia entre un Figure y un Axes, y por qué la interfaz explícita Object-Oriented es tu mejor herramienta.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. Matplotlib, episodio 1 de 5. Copias una solución de plotting de Stack Overflow, la pegas en tu código y, de repente, tu nuevo gráfico sobrescribe el anterior. El código parece correcto, pero se comporta como un monstruo de Frankenstein. Esto pasa porque la mayoría de los ejemplos online mezclan dos formas completamente diferentes de usar la librería sin explicar el porqué. Para solucionarlo, necesitas entender la identidad central: Figures, Axes e interfaces. Matplotlib es la base de la visualización en Python. Pandas, Seaborn y muchas otras librerías corren sobre ella. Pero los desarrolladores a menudo tropiezan con su arquitectura. Para escribir código de visualización limpio, tienes que separar el contenedor del contenido. En Matplotlib, esto significa entender la diferencia entre una Figure y un Axes. La Figure es tu canvas. Es el contenedor de nivel superior que engloba toda la ventana, el fondo y todos los elementos que hay dentro. Pero una Figure no dibuja datos. Para eso, necesitas un Axes. El Axes es el plot en sí. Es la región donde viven tus líneas, barras y scatter points. Una Figure puede contener múltiples Axes, como un grid de cuatro subplots. Ten en cuenta que Axes no es el plural de la palabra axis. Un objeto Axes contiene dos o tres objetos Axis individuales, que gestionan las líneas numéricas y los ticks específicos. Añades los datos al Axes, y el Axes se asocia a la Figure. Una vez que entiendes qué son estos objetos, tienes que decidir cómo interactuar con ellos. Aquí es donde empieza la confusión. Matplotlib te da dos formas distintas de montar un gráfico: la interfaz implícita y la interfaz explícita. La interfaz implícita se basa en un módulo llamado pyplot. Este rastrea el estado de tu programa por debajo. Cuando llamas directamente a una función de plotting, Matplotlib asume que quieres dibujar en la Figure y el Axes activos en ese momento. Si no existe ninguno, los crea por ti. Esto es súper cómodo para un script rápido de usar y tirar, donde solo necesitas inspeccionar unos datos rápidamente. Pero como depende de un estado global oculto, se vuelve impredecible en aplicaciones más grandes. La interfaz explícita, a menudo llamada interfaz orientada a objetos, elimina la incertidumbre. Instancias tus objetos desde el principio. Primero creas la Figure y el Axes juntos, y luego llamas a los métodos directamente sobre esos objetos específicos. Nunca dependes de que la librería adivine a qué plot estás apuntando. Si estás montando un dashboard reutilizable, usa siempre la interfaz explícita. Puedes escribir funciones helper que reciban un objeto Axes como argumento, pinten datos en él y lo devuelvan. A la función le da igual el estado global de la aplicación. Simplemente modifica el objeto que se le ha pasado. Esto hace que tu código sea modular y testable. Aquí está la clave. Puedes usar cualquiera de los dos métodos, pero nunca deberías mezclarlos. Usa la interfaz implícita de pyplot para una exploración rápida en un notebook, y usa la interfaz explícita orientada a objetos para código de producción. Si te gusta el programa y quieres apoyarnos, puedes encontrarnos buscando DevStoriesEU en Patreon. Eso es todo por este episodio. ¡Gracias por escuchar, y sigue programando!
2

El ciclo de vida de un gráfico

3m 59s

Descubre cómo llevar un gráfico desde los datos sin procesar hasta una visualización formateada y con etiquetas. Repasamos el ciclo de vida de un gráfico sencillo, mostrándote exactamente cómo añadir etiquetas, títulos y tick formatters personalizados utilizando la interfaz explícita.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. Matplotlib, episodio 2 de 5. Formatear números en un eje puede parecer una pelea. Quieres un cien K limpio con el símbolo del dólar, pero terminas con notación científica o números enteros a secas saturando la pantalla. La solución es sorprendentemente sencilla una vez que aprendes a delegar el control de tu eje directamente a una función estándar de Python. Hoy, veremos el ciclo de vida de un plot usando la interfaz explícita de axes. La interfaz explícita trata la creación de gráficos como un proceso predecible y paso a paso. Siempre estás llamando métodos en un objeto específico. El ciclo de vida comienza creando un objeto figure y un objeto axes. El figure es el lienzo en blanco. El objeto axes representa el área real donde vivirán tus datos. Una vez que tienes ese objeto axes, cada personalización es simplemente otra llamada a un método aplicado a él. Considera un escenario donde tienes una lista de nombres de empresas y una lista de sus cifras de ingresos. Para mostrar estos datos en la pantalla, llamas a un método de plotting en el axes. Para un gráfico de barras horizontales, llamas a bar h y le pasas los nombres y los ingresos. En este punto, tienes un plot funcional, pero le falta contexto. La siguiente fase del ciclo de vida consiste en añadir ese contexto. Un enfoque común es establecer el title, el x label y el y label individualmente. Sin embargo, el objeto axes tiene un método set unificado. Puedes llamar a set y pasar keyword arguments para el title, el x label y el y label, todo a la vez. Esta única línea de código gestiona el texto estructural de tu gráfico. Si alguna vez necesitas inspeccionar lo que se está aplicando actualmente, puedes usar los métodos get correspondientes, como get x tick labels, para recuperar el estado actual antes de modificarlo. Esto nos lleva a la parte más crítica del ajuste fino: el formateo de los números del eje. Cuando haces el plot de los ingresos, los números grandes crean ejes desordenados. Matplotlib podría mostrar cien mil con todos sus ceros. Tú quieres que diga cien K con el símbolo del dólar. Aquí está la clave. No necesitas rebuscar en la compleja configuración de Matplotlib para solucionar esto. Simplemente escribes una función de Python normal y corriente. Defines una función que reciba dos argumentos: el valor del tick y su posición. Dentro de esta función, escribes la lógica estándar de Python. Compruebas si el valor está en los miles, lo divides entre mil y devuelves un string formateado con el signo del dólar y una K mayúscula. Para aplicar esto, le dices al objeto axes que utilice tu función para sus ticks. Accedes a la propiedad x-axis de tu objeto axes y luego llamas a un método llamado set major formatter. Le pasas tu función personalizada directamente a este método. Matplotlib se encarga del resto. Al dibujar el plot, pasa cada valor del tick del eje x a través de tu función de Python y muestra el string limpio que devolviste. La interfaz explícita elimina las conjeturas al personalizar gráficos, dividiéndolo en una secuencia fiable: creas el axes, mapeas los datos raw, aplicas tus labels mediante un único método set e interceptas el formateo de los ticks por completo con tu propia lógica. Eso es todo por este episodio. Gracias por escuchar, ¡y sigue construyendo!
3

Dominando los diseños: Subplots y mosaicos

4m 45s

Aprende a gestionar múltiples gráficos en un solo lienzo sin que se superpongan. Este episodio cubre plt.subplots, el poder de subplot_mosaic para diseños semánticos y el uso de constrained layout para mantener todo ordenado.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. Matplotlib, episodio 3 de 5. Necesitas crear un dashboard con un gráfico de cabecera ancho y dos gráficos más pequeños debajo. Antes, esto implicaba calcular fracciones del grid y colocar los ejes manualmente. Ahora, puedes crear ese layout exacto escribiendo un string de arte ASCII. Esto es Dominando los Layouts: Subplots y Mosaics. La mayoría de las visualizaciones de datos empiezan con un grid básico. Cuando necesitas un layout de dos por dos, llamas a la función estándar subplots, especificas el número de filas y columnas, y Matplotlib te devuelve un objeto figure y un array multidimensional que contiene tus ejes individuales. Usas la indexación estándar de arrays para seleccionar un eje específico y dibujar tus datos. Eso funciona perfectamente hasta que añades texto. Por defecto, Matplotlib posiciona los ejes basándose en proporciones fijas del tamaño de la figura. No tiene en cuenta el espacio físico que ocupan tus títulos, las etiquetas de los ejes o los tick marks. Como resultado, las etiquetas del eje X de tu fila superior a menudo se superpondrán con los títulos de tu fila inferior. En lugar de escribir ajustes de espaciado personalizados, deberías gestionar esto en la fase de creación de la figura. Pásale el argumento layout con el valor constrained. Constrained layout es un motor de optimización. Justo antes de que se dibuje la figura, mide los bounding boxes de todos tus elementos de texto y separa los ejes lo justo para evitar colisiones. Los subplots estándar y los constrained layouts cubren grids simétricos. Pero los dashboards rara vez son simétricos. A menudo necesitas gráficos que ocupen varias filas o columnas. Esto nos lleva de vuelta al gráfico de cabecera ancho que ocupa la fila superior, con dos gráficos más pequeños uno al lado del otro justo debajo. En lugar de lidiar con objetos de especificación de grid de bajo nivel, puedes usar un método semántico llamado subplot mosaic. Llamas a subplot mosaic directamente sobre tu objeto figure. Acepta una representación visual de tu layout, escrita completamente con strings. Cada carácter único que escribes representa un gráfico independiente. Si un carácter se repite en filas o columnas, ese gráfico se estira para llenar esos espacios. Para construir el layout de nuestro dashboard, puedes pasar un único string donde las filas están separadas por punto y coma. Para la fila superior, escribes la letra A mayúscula dos veces. Luego un punto y coma. Para la fila inferior, escribes la letra B mayúscula, y luego la letra C mayúscula. El string completo es simplemente A A punto y coma B C. Matplotlib parsea este string y ve que A ocupa dos columnas en la primera fila, así que crea un eje ancho que ocupa la parte superior. Ve que B y C ocupan una columna cada uno en la segunda fila, así que crea dos ejes más pequeños debajo. Aquí está la clave. Como los arrays estándar pierden sentido en layouts complejos, subplot mosaic no devuelve un array. Devuelve un diccionario estándar de Python. Las keys de este diccionario son los caracteres exactos del string que mapeaste en tu diseño. Si quieres dibujar un gráfico de líneas en tu cabecera ancha, simplemente accedes al diccionario usando la key A. Si quieres poner un scatter plot en la parte inferior derecha, accedes al diccionario usando la key C. Tu código de ploteo queda completamente desacoplado de las coordenadas del grid. También puedes usar este sistema para crear espacio en blanco intencionado. Si quieres un hueco vacío en tu grid, pones un carácter de punto en tu string de layout. Matplotlib lee el punto y deja esa celda específica del grid completamente en blanco. Las matemáticas complejas de grid son cosa del pasado. El diseño moderno de layouts es simplemente escribir la forma visual que quieres y dejar que el diccionario mapee tus datos al espacio exacto en la pantalla. Eso es todo por este episodio. Gracias por escuchar, y ¡sigue creando!
4

Más allá de la línea: Explorando los tipos de gráficos principales

3m 59s

Ve más allá de las líneas básicas y los scatter plots. Trazamos un mapa de las categorías de gráficos de Matplotlib, contrastando los gráficos de distribución estadística con funciones de datos en cuadrícula como imshow y pcolormesh.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. Matplotlib, episodio 4 de 5. Tienes diez mil data points, los metes en un scatter plot y acabas con una mancha de tinta gigante e ilegible donde los puntos superpuestos ocultan el patrón real. Elegiste una herramienta pairwise para un problema de densidad. Para ir más allá del line chart por defecto, necesitas saber cómo relacionar la forma de tus datos con la herramienta visual adecuada, que es precisamente lo que abordamos en Más allá de la línea: Explorando los tipos de plots principales. Matplotlib organiza sus plots principales en categorías generales según la estructura de tus datos. Las tres categorías fundamentales son datos pairwise, distribuciones estadísticas y datos en grid. La forma más básica es pairwise. Tienes un array de valores X y un array correspondiente de valores Y. Usas la función plot cuando estos puntos tienen una secuencia lógica, como una serie temporal, donde dibujar una línea continua entre ellos muestra una tendencia. Si los puntos son observaciones independientes, usas la función scatter para colocar marcadores individuales. Pero los scatter plots fallan cuando tienes una alta densidad. Esto nos lleva a la segunda categoría, que maneja distribuciones estadísticas. Aquí está la clave. Cuando tienes diez mil puntos superpuestos, en realidad no te importa la coordenada exacta del punto número cuatro mil. Lo que te importa es dónde se agrupan los puntos. Aquí es donde entra en juego una función como hexbin. Toma los mismos arrays X e Y que un scatter plot, pero agrupa el área geométrica en bins hexagonales, coloreándolos según la densidad de puntos para revelar el patrón oculto. Ahora considera un solo array que contiene las edades en bruto de todos tus clientes. Plotearlas una por una como puntos te da un ruido inútil. En cambio, le pasas esa única lista plana a la función hist. Un histograma agrupa automáticamente las edades individuales en rangos y te muestra el volumen de clientes en la veintena en comparación con los de la cincuentena. Si necesitas comparar esas distribuciones de edad en cinco tiendas diferentes unas junto a otras, cambias a un boxplot. El boxplot resume claramente los rangos, las medianas y los outliers. Si necesitas más detalle del que ofrece un boxplot, un violinplot dibuja la forma curva completa del perfil de densidad para cada tienda. La tercera categoría principal son los datos en grid. Esto se aplica cuando tus datos son una matriz bidimensional y necesitas visualizar un valor continuo en un área. Piensa en un mapa de temperatura bidimensional sobre un grid geográfico. Cada posición tiene una coordenada X, una coordenada Y y un valor de temperatura. No quieres líneas ni puntos dispersos para representar esto. Quieres una superficie sólida y coloreada. Matplotlib proporciona imshow y pcolormesh para este propósito. Usas imshow cuando tus datos se encuentran en un grid perfectamente regular, como los píxeles de una fotografía digital. Asume un espaciado uniforme entre cada data point y se renderiza muy rápidamente. Si las coordenadas de tu grid son irregulares, por ejemplo, si los límites de medición se deforman o comprimen cerca de ciertas características geográficas, usas pcolormesh. Calcula y dibuja cuadriláteros individuales para cada celda, ajustándose exactamente a la forma distorsionada de tus arrays de coordenadas. Al decidir a qué función de Matplotlib llamar, ignora cómo quieres que se vea la imagen final y fíjate estrictamente en la forma matemática de tus arrays de entrada: ¿son pares secuenciales, listas planas o matrices bidimensionales? Eso es todo por este episodio. Gracias por escuchar, ¡y sigue construyendo!
5

Flujos de trabajo para usuarios avanzados: Estilos y rcParams

4m 50s

Transforma el aspecto de tus gráficos al instante. En nuestro episodio final, exploramos cómo utilizar style sheets predefinidas y personalizar dinámicamente la configuración global usando rcParams.

Descargar
Hola, soy Alex de DEV STORIES DOT EU. Matplotlib, episodio 5 de 5. A menudo ves a gente escribir veinte líneas de código repetitivo ajustando tick labels, grid lines y fuentes para cada plot que hacen. Un solo comando puede aplicar todos esos cambios al instante en todo un proyecto. Este episodio trata sobre workflows de power-user: Styles y rcParams. El aspecto estándar de Matplotlib es muy reconocible, pero actualizar manualmente cada elemento por plot para que coincida con una estética específica es ineficiente. En su lugar, usas style sheets. Matplotlib incluye varios estilos integrados. Llamas a una función llamada style punto use del módulo pyplot y le pasas un string, como ggplot o classic. Si estás preparando una visualización para una diapositiva de presentación con tema oscuro, no necesitas cambiar manualmente el fondo a negro, los ejes a blanco y el texto a gris claro. Ejecutas style punto use con dark underscore background al principio de tu script. Cada figura generada después de esa línea hereda al instante ese aspecto específico. Incluso puedes combinar style sheets. Si pasas una lista de nombres de estilo, Matplotlib los aplica en orden de izquierda a derecha. Los estilos de la derecha sobrescribirán los settings superpuestos de los estilos de la izquierda. Aquí está la clave. Llamar a style punto use cambia el estado global para el resto de tu sesión de Python. Si solo quieres un estilo específico para un chart en particular, usas un context manager llamado style punto context. Abres el contexto, especificas el nombre del estilo y escribes tu código de plotting dentro de ese bloque. Una vez que finaliza el bloque, tus plots vuelven a cualquier estilo global que estuviera activo antes. Por debajo de estas style sheets hay un enorme diccionario de configuración llamado rcParams. La r y la c significan runtime configuration. Cada propiedad por defecto que Matplotlib usa para renderizar una figura vive en este diccionario. Los tamaños de fuente, los grosores de línea, las dimensiones por defecto de la figura y los estilos de los marcadores están mapeados a string keys específicas. Cuando aplicas una style sheet, básicamente estás actualizando en bloque el diccionario rcParams en segundo plano. Pero también puedes interactuar con él directamente para hacer ajustes granulares y dinámicos. Imagina que aplicaste un estilo que te gusta, pero el grosor de línea por defecto es demasiado fino para lo que necesitas. Accedes al diccionario rcParams, especificas la key para lines punto linewidth y le asignas un nuevo valor numérico. A partir de ese momento, cada línea dibujada en tu sesión tendrá ese grosor mayor por defecto. Matplotlib también proporciona una función de conveniencia llamada rc para gestionar esto. En lugar de modificar el diccionario key por key, llamas a rc, pasas un nombre de grupo de nivel superior como font, y luego proporcionas keyword arguments para las propiedades específicas como weight o size. Es una forma mucho más limpia de actualizar varios settings relacionados a la vez. También puedes definir tus propios estilos personalizados. Una style sheet es simplemente un archivo de texto con una extensión punto mplstyle. En su interior, contiene una lista simple de pares key-value de rcParams. Guardas este archivo, pasas su ruta a style punto use, y tu branding corporativo personalizado se aplica al instante a cualquier plot sin ensuciar tu código de datos real. El verdadero poder de la personalización de Matplotlib es desacoplar tu lógica de datos de tus decisiones estéticas. Establecer reglas globalmente mantiene tus funciones de plotting ligeras y asegura la coherencia visual en todo tu codebase. Te animo a explorar la documentación oficial para ver la lista completa de runtime configurations disponibles y a intentar crear una style sheet personalizada tú mismo, o a visitar devstories punto eu para sugerir temas para futuras series. Gracias por pasar unos minutos conmigo. Hasta la próxima, que te vaya bien.