- Aprender
- Informática
- Ciencia de datos e IA
- Análisis de datos con Python
- Visualización con Matplotlib y Seaborn
Visualización con Matplotlib y Seaborn
IntermedioUnidad 7 de 8 del curso Curso de Análisis de datos con Python
Lo que aprenderás
- Crea una figura y sus áreas de trazado con la interfaz orientada a objetos de Matplotlib, dibuja en ellas gráficos de líneas, dispersión y barras, y controla títulos, etiquetas, marcas de graduación, límites, leyendas y estilos.
- Configura una figura y sus áreas de trazadoComprende cómo se construye un gráfico de Matplotlib a partir de una figura, una o varias áreas de trazado y los elementos dibujados en ellas, y elige entre las formas pyplot y orientada a objetos de escribir código para gráficos.
- Dibuja gráficos de líneas y diagramas de dispersiónDibuja valores a lo largo de un eje ordenado con
ax.ploty observaciones individuales conax.scatter, y controla el color, el estilo de línea, los marcadores, su tamaño y la transparencia. - Compara categorías mediante gráficos de barrasDibuja gráficos de barras verticales, horizontales, agrupadas y apiladas con
ax.baryax.barh, y añade a las barras etiquetas con sus valores. - Añade etiquetas y configura la escala y el estilo de un gráficoEstablece títulos, etiquetas de ejes, límites, marcas de graduación, formatos de sus etiquetas, escalas, leyendas y cuadrículas, y cambia el aspecto general de los gráficos con hojas de estilos y ajustes.
- Configura una figura y sus áreas de trazado
- Dibuja gráficos directamente desde Series y DataFrames con el método
plotde pandas, y agrega, ordena y reestructura primero las tablas para que cada gráfico muestre los valores deseados.- Utiliza el método plot de pandasCrea gráficos de líneas, barras, histogramas, diagramas de caja y bigotes, gráficos de áreas, circulares y de dispersión a partir de una Series o un DataFrame, y personaliza las áreas de trazado de Matplotlib que devuelven.
- Reestructura los datos antes de representarlosAgrega, cuenta, ordena y convierte una tabla a formato ancho o largo para que contenga exactamente los valores que debe mostrar un gráfico, en el formato que espera pandas o seaborn.
- Utiliza el método plot de pandas
- Utiliza seaborn para asociar columnas de un DataFrame con posiciones, colores y estilos, muestra relaciones entre variables numéricas con resúmenes de tendencia y compara grupos mediante gráficos categóricos.
- Asocia columnas con características visuales del gráfico en seabornIndica las columnas del DataFrame para la posición, el color, el estilo y el tamaño, distingue las funciones a nivel de área de trazado de las funciones a nivel de figura, y establece temas y paletas de seaborn.
- Muestra relaciones entre variables numéricasDibuja diagramas de dispersión, gráficos de líneas agregadas con bandas de incertidumbre, rectas de regresión y matrices de gráficos por pares con seaborn, e interpreta qué muestran y qué no muestran las bandas y las líneas.
- Compara grupos mediante gráficos categóricosCompara una variable numérica entre categorías con gráficos de barras, frecuencias absolutas, puntos, puntos por categorías y enjambre, y elige su estimador, barras de error, orden y orientación.
- Asocia columnas con características visuales del gráfico en seaborn
- Muestra cómo se distribuye una variable numérica con histogramas, curvas de densidad, diagramas de caja y bigotes y diagramas de violín, y representa una tabla de valores o correlaciones como un mapa de calor.
- Muestra una distribución mediante histogramas y curvas de densidadCrea histogramas en Matplotlib, pandas y seaborn, elige intervalos de clase y escalas, y añade o compara curvas de densidad suavizadas.
- Resume y compara distribuciones mediante diagramas de caja y bigotesInterpreta y dibuja diagramas de caja y bigotes a partir de los cuartiles y la regla de 1,5 × IQR, compara grupos con ellos y utiliza diagramas de violín y de puntos por categorías para mostrar lo que oculta una caja.
- Representa una cuadrícula de valores como un mapa de calorConvierte una tabla dinámica o una matriz de correlaciones en un mapa de calor con seaborn o Matplotlib, y controla las anotaciones, los formatos numéricos, las escalas de colores y sus límites.
- Muestra una distribución mediante histogramas y curvas de densidad
- Organiza gráficos múltiples en pequeños paneles con subgráficos de Matplotlib y facetas de seaborn, destaca lo importante con texto, flechas y líneas de referencia, y guarda las figuras en el formato y tamaño adecuados para informes y para la web.
- Organiza varios gráficos en una figuraCrea cuadrículas de áreas de trazado con
plt.subplots, comparte escalas entre paneles, rellena los paneles en un bucle, ajusta el espaciado y los títulos, y crea paneles de distinto tamaño. - Representa datos por facetas con seabornDivide un gráfico en paneles según una o dos variables categóricas con los argumentos
col,rowycol_wrapde las funciones a nivel de figura o conFacetGrid, y personaliza la cuadrícula resultante. - Añade anotaciones y líneas de referenciaColoca texto, flechas, líneas de referencia, intervalos sombreados y etiquetas de valores en un gráfico, en coordenadas de los datos o en coordenadas relativas al área de trazado.
- Guarda figuras para informes y para la webExporta figuras con
savefigen formatos de mapa de bits o vectoriales, controla el tamaño, la resolución, los márgenes y el fondo, y guárdalas en el momento adecuado en scripts, cuadernos interactivos y bucles.
- Organiza varios gráficos en una figura
Guía de estudio de Visualización con Matplotlib y Seaborn
1Crea gráficos con figuras y áreas de trazado de Matplotlib
Un comando de representación necesita un lugar donde dibujar. Matplotlib hace explícito ese lugar: una figura contiene una o varias áreas de trazado, y cada área contiene las marcas y las etiquetas. Empieza con un área y luego utiliza los mismos objetos para añadir líneas, puntos, barras y ajustes útiles. Asignar un nombre a la figura y a cada área de trazado facilita modificar el gráfico adecuado cuando un cuaderno crece o una figura contiene varios paneles.
1.1 Configura una figura y sus áreas de trazado
Matplotlib es la biblioteca estándar de gráficos para Python, y tanto pandas como seaborn dibujan con ella. Por convención se importa como import matplotlib.pyplot as plt. En un cuaderno de Jupyter, un gráfico aparece debajo de la celda que lo dibuja; en un script, plt.show() muestra las figuras abiertas y, en un script normal, espera hasta que se cierren sus ventanas.
Una figura es el lienzo completo: la imagen que se muestra o se guarda. Un área de trazado es una zona de la figura donde se representan datos, con sus propios datos, título, etiquetas de los ejes y límites; una figura puede contener varias. Un eje es una de las rectas numéricas de un área de trazado, el eje x o el eje y, con sus marcas y etiquetas de graduación. Cada elemento visible, como una línea, un marcador, un texto o una barra, se llama objeto gráfico.
fig, ax = plt.subplots() crea una figura con un área de trazado y devuelve ambos objetos. figsize=(width, height) establece el tamaño de la figura en pulgadas. El valor predeterminado es 6,4 × 4,8 pulgadas a 100 puntos por pulgada, por lo que una figura predeterminada ocupa 640 × 480 píxeles en pantalla; plt.subplots(figsize=(8, 4)) crea una figura más ancha y baja.
Matplotlib ofrece dos estilos. En el estilo orientado a objetos se llaman métodos sobre objetos explícitos: ax.plot(...), ax.set_title(...). En el estilo pyplot, funciones como plt.plot(...) y plt.title(...) actúan sobre el área de trazado «actual», normalmente la última creada. Ambos dibujan los mismos gráficos; el estilo orientado a objetos resulta más claro en cuanto una figura tiene más de un área de trazado o el código de representación se incluye en una función, por lo que este curso lo utiliza.
Los dos estilos utilizan nombres distintos para los mismos ajustes: plt.title, plt.xlabel y plt.xlim corresponden a ax.set_title, ax.set_xlabel y ax.set_xlim. Un error frecuente es ax.title("Rainfall"): en un área de trazado, title es un atributo que contiene un objeto de texto, por lo que llamarlo produce TypeError: 'Text' object is not callable. Utiliza ax.set_title("Rainfall").
months = [1, 2, 3, 4, 5, 6]; temp_c = [3, 5, 9, 13, 17, 20], seguido de
fig, ax = plt.subplots(figsize=(8, 4))
ax.plot(months, temp_c)
ax.set_title("Mean monthly temperature")
ax.set_xlabel("Month")
ax.set_ylabel("Temperature (°C)")
.
Las llamadas de dibujo añaden elementos a un área de trazado; no sustituyen lo que ya hay. Una segunda llamada a ax.plot(...) sobre el mismo ax añade una segunda línea al mismo gráfico. Para obtener un gráfico separado, crea una figura nueva con otra llamada a plt.subplots() o dibuja en otra área de trazado de una figura con varios paneles.
pyplot mantiene abiertas todas las figuras que ha creado hasta que se cierran con plt.close(fig) o plt.close("all"). Las figuras abiertas consumen memoria y, cuando hay más de 20 abiertas, Matplotlib muestra una advertencia. El código que crea figuras en un bucle debe cerrar cada figura después de guardarla.
Puntos clave
- Una figura es el lienzo; un área de trazado es una zona donde se representan datos.
- Llama a los métodos del área de trazado que debe recibir el cambio.
- Dibujar de nuevo en la misma área de trazado añade objetos gráficos.
- Cierra las figuras guardadas dentro de los bucles.
1.2 Dibuja gráficos de líneas y diagramas de dispersión
ax.plot(x, y) dibuja marcadores o segmentos rectos que unen los puntos en el orden en que se proporcionan. Un gráfico de líneas es adecuado para una magnitud medida a lo largo de una variable ordenada, como el tiempo o la distancia. Con un argumento, ax.plot(y), los valores predeterminados de x son 0, 1, 2, ….
Como los puntos se unen en el orden proporcionado, los valores de x sin ordenar producen un zigzag que va y viene por el gráfico. Para x = [3, 1, 2], la línea va de x = 3 hacia atrás hasta x = 1 y luego hacia adelante hasta x = 2. Ordena primero los datos por x, por ejemplo con df.sort_values("x").
Argumentos de estilo: color (un nombre como "black" o "tab:orange", o un código hexadecimal como "#1f77b4"), linestyle ("-" continua, "--" discontinua, ":" punteada, "-." de raya y punto), linewidth, marker ("o" círculo, "s" cuadrado, "^" triángulo) y markersize. Una cadena de formato breve combina el marcador y el estilo de línea: ax.plot(x, y, "o--") dibuja círculos unidos por una línea discontinua. Sin un color, cada línea nueva toma el siguiente color del ciclo predeterminado, que comienza con "tab:blue" y "tab:orange".
Asigna un label a cada línea y llama a ax.legend() para mostrar una leyenda:
ax.plot(months, north, marker="o", label="North")
ax.plot(months, coast, linestyle="--", label="Coast")
ax.legend()
. Si ningún objeto gráfico tiene etiqueta, ax.legend() no dibuja nada y Matplotlib advierte que no encontró objetos gráficos con etiquetas.
ax.scatter(x, y) dibuja un marcador sin conectar por cada observación y es adecuado para representar la relación entre dos variables numéricas. Ejemplo: temperatura diaria [12, 15, 18, 21, 24, 27, 30, 22] °C y alquileres de bicicletas [180, 220, 260, 310, 330, 360, 340, 250]; ax.scatter(temp_c, rentals) muestra que los alquileres aumentan en general con la temperatura, y la correlación entre las dos listas es de aproximadamente 0,92.
En ax.scatter, s establece el área de cada marcador en puntos cuadrados; el valor predeterminado es 36, el área de un marcador de 6 puntos de ancho. Al duplicar s se duplica el área, por lo que el ancho del marcador solo aumenta por un factor de aproximadamente 1,4. s puede ser un número o un valor por punto, lo que permite representar una tercera variable mediante el tamaño de los marcadores.
c da color a los puntos: un color para todos o un número por punto que se asigna mediante un mapa de colores como cmap="viridis". Conserva el objeto devuelto y añade una barra de colores: sc = ax.scatter(temp_c, rentals, c=rain_mm, cmap="viridis"); fig.colorbar(sc, ax=ax, label="Rain (mm)").
Cuando se superponen muchos puntos, las zonas densas se convierten en manchas sólidas que ocultan cuántos puntos contienen. Reduce la opacidad con alpha=0.3, utiliza marcadores más pequeños o muestra la densidad, por ejemplo con un gráfico de agrupación en celdas hexagonales (df.plot.hexbin) o un histograma bidimensional.
ax.plot(x, y, "o"), con un marcador y sin línea, también dibuja puntos y es más rápido para un número muy grande de puntos porque todos los marcadores comparten tamaño y color. Utiliza ax.scatter cuando el tamaño o el color deban variar de un punto a otro.
Puntos clave
- Las líneas conectan los puntos en el orden proporcionado.
- El tamaño de los marcadores de dispersión es un área en puntos cuadrados.
- Una correspondencia numérica de colores necesita una barra de colores.
- Utiliza etiquetas y una leyenda para identificar las series.
- La transparencia ayuda a distinguir observaciones superpuestas.
1.3 Compara categorías mediante gráficos de barras
ax.bar(categories, heights) dibuja una barra vertical por categoría; ax.barh(categories, widths) dibuja barras horizontales, que dejan espacio para nombres de categorías largos. Cuando las categorías son cadenas de texto, Matplotlib las sitúa a distancias iguales en el orden proporcionado y las utiliza como etiquetas de graduación. Cuando son números, las barras se sitúan en esas posiciones numéricas sobre un eje numérico ordinario.
De forma predeterminada, las barras parten de una línea de base de 0, por lo que su longitud muestra su valor. El argumento width se mide en unidades del eje x y su valor predeterminado es 0,8. Las categorías de texto se sitúan a una unidad de distancia, por lo que el valor predeterminado deja un espacio de 0,2 entre barras, y width=1 hace que las barras vecinas se toquen.
Se preguntó a 200 personas cómo se desplazan habitualmente: coche 84, autobús 52, bicicleta 38, a pie 26. ax.barh(["Car", "Bus", "Bike", "Walk"], [84, 52, 38, 26]) dibuja cuatro barras horizontales. Las proporciones son 42 %, 26 %, 19 % y 13 %, que suman 100 %.
ax.barh sitúa la primera categoría en la parte inferior del eje, porque el eje y crece hacia arriba. Para leer una lista ordenada desde arriba, como en el ejemplo de los desplazamientos, llama a ax.invert_yaxis() o invierte tanto las categorías como sus valores antes de representarlos, de modo que cada valor permanezca con su categoría.
Las barras agrupadas sitúan varias series una junto a otra en cada categoría. Utiliza posiciones numéricas y desplaza cada serie la mitad del ancho de una barra:
x = np.arange(3)
ax.bar(x - 0.2, north, width=0.4, label="North")
ax.bar(x + 0.2, coast, width=0.4, label="Coast")
ax.set_xticks(x, labels=["Jan", "Feb", "Mar"])
ax.legend()
. Las barras de North están en −0,2, 0,8 y 1,8, y las de Coast en 0,2, 1,2 y 2,2, centradas en cada marca de graduación.
Las barras apiladas dibujan una segunda serie encima de la primera con bottom=: ax.bar(days, car); ax.bar(days, bus, bottom=car). Si un día hay 40 viajes en coche y 25 en autobús, el segmento del autobús va de 40 a 65 y la altura total de la barra es 65.
bars = ax.bar(...) devuelve un contenedor de barras; ax.bar_label(bars) escribe cada valor al final de su barra. fmt controla el texto: fmt="%.1f" escribe 3,14 como «3.1», y fmt="{:.0f} km" lo escribe como «3 km».
Matplotlib dibuja las barras en el orden de los datos, no por tamaño. Para obtener un gráfico ordenado por valor, ordena primero los valores, por ejemplo con sorted() sobre pares o con sort_values() en pandas. El argumento yerr= añade barras de error de una longitud determinada a cada barra, y ax.errorbar(x, y, yerr=...) hace lo mismo para puntos.
Un gráfico de barras compara valores de categorías separadas, por lo que sus barras están separadas por espacios. En cambio, un histograma muestra cómo se distribuye una variable numérica en intervalos contiguos y sus barras se tocan. Representar las mediciones con una barra por fila de datos produce un gráfico de barras de valores sin resumir, no un histograma.
Puntos clave
- Mantén cada categoría junto a su valor al ordenar.
- Las barras agrupadas utilizan desplazamientos alrededor de las marcas de las categorías.
- Las barras apiladas utilizan bases acumuladas.
- Las etiquetas de las barras corresponden al contenedor devuelto.
1.4 Añade etiquetas y configura la escala y el estilo de un gráfico
Establece el texto con ax.set_title("..."), ax.set_xlabel("...") y ax.set_ylabel("..."), o con una sola llamada: ax.set(title="Monthly rainfall", xlabel="Month", ylabel="Rainfall (mm)"). Pon la unidad en la etiqueta del eje, por ejemplo «Precipitación (mm)» o «Distancia (km)», para que cada valor de las marcas de graduación tenga significado.
Matplotlib elige los límites de los ejes a partir de los datos y añade un pequeño margen. Establécelos tú con ax.set_xlim(1, 12) y ax.set_ylim(0, 120), o fija solo un extremo con ax.set_ylim(bottom=0). ax.set(xlim=(1, 12), ylim=(0, 120)) hace lo mismo en una sola llamada.
ax.set_xticks([1, 4, 7, 10]) elige las posiciones de las marcas de graduación, y ax.set_xticks([1, 2, 3], labels=["Jan", "Feb", "Mar"]) también sustituye sus etiquetas. Gira las etiquetas amontonadas con ax.tick_params(axis="x", labelrotation=45). Los formateadores de etiquetas de graduación cambian cómo se escriben los valores: ax.yaxis.set_major_formatter(PercentFormatter(xmax=1, decimals=0)), con PercentFormatter importado de matplotlib.ticker, etiqueta el valor 0,25 como «25%».
ax.set_yscale("log") establece una escala logarítmica en el eje y, donde distancias iguales representan razones iguales: el paso de 10 a 100 tiene la misma longitud que el paso de 100 a 1000. Es adecuada para valores que abarcan varios órdenes de magnitud, como las poblaciones de las ciudades. Un eje logarítmico no puede mostrar el cero ni valores negativos.
ax.legend() coloca la leyenda donde cubre menos puntos (loc="best", el valor predeterminado para la leyenda de un área de trazado). Elige una posición con loc="upper left", añade un encabezado con title="Station" y distribuye las entradas en columnas con ncols=2. ax.legend(bbox_to_anchor=(1.02, 1), loc="upper left") coloca la leyenda justo fuera del borde derecho del área de trazado.
ax.grid(True, alpha=0.3) añade líneas de cuadrícula tenues en las marcas de graduación; ax.grid(axis="y") dibuja solo las horizontales, lo que facilita la lectura de las alturas de las barras.
Las hojas de estilos cambian el aspecto predeterminado de todos los gráficos posteriores: plt.style.use("ggplot"). plt.style.available enumera los estilos instalados; los estilos similares a seaborn incluidos con Matplotlib se llaman, por ejemplo, "seaborn-v0_8-whitegrid". Para aplicar un estilo solo a un bloque de código, utiliza with plt.style.context("ggplot"):.
Los ajustes predeterminados individuales se encuentran en plt.rcParams, por ejemplo plt.rcParams["font.size"] = 12 o plt.rcParams["figure.figsize"] = (8, 4). Se aplican a las figuras creadas después, y plt.rcdefaults() restaura los valores predeterminados de Matplotlib.
fig, ax = plt.subplots(figsize=(8, 4))
ax.plot([1, 2, 3, 4], [62, 48, 55, 40], marker="o", label="North")
ax.set(title="Monthly rainfall, January to April", xlabel="Month", ylabel="Rainfall (mm)", ylim=(0, 70))
ax.set_xticks([1, 2, 3, 4], labels=["Jan", "Feb", "Mar", "Apr"])
ax.legend()
ax.grid(axis="y", alpha=0.3)
.
En una figura con varias áreas de trazado, las funciones de pyplot como plt.title o plt.xlabel solo modifican el área actual, normalmente la última creada, por lo que un título puede aparecer en el panel equivocado. Llamar a los métodos del área de trazado deseada, como axes[0].set_title(...), evita este problema.
Puntos clave
- El formato de las marcas de graduación cambia las etiquetas sin cambiar los valores.
- Las escalas logarítmicas muestran razones iguales como distancias iguales.
- Los estilos y rcParams establecen valores predeterminados para gráficos posteriores.
2Representa datos directamente desde pandas
Una tabla de pandas a menudo ya contiene las etiquetas y los valores que necesita un gráfico. Sus métodos de representación utilizan esas etiquetas para crear un gráfico de Matplotlib, que luego puedes completar con los mismos métodos que un gráfico creado manualmente. El trabajo importante suele ocurrir antes de dibujar: decidir qué representa una fila, calcular el resumen adecuado y organizar la tabla para que los grupos, las series y su orden correspondan a la pregunta.
2.1 Utiliza el método plot de pandas
Crea la tabla de precipitaciones en formato ancho con una columna por estación:
import pandas as pd
wide = pd.DataFrame({
"North": [62, 48, 55, 40],
"Coast": [110, 95, 80, 60],
"Valley": [20, 15, 30, 45]
}, index=pd.Index(["Jan", "Feb", "Mar", "Apr"], name="month"))
Todas las Series y todos los DataFrames de pandas tienen un método .plot que dibuja con Matplotlib y devuelve el área de trazado de Matplotlib en la que dibujó. df.plot(kind="bar") y df.plot.bar() son la misma llamada. Los tipos son "line" (el predeterminado), "bar", "barh", "hist", "box", "kde" o "density", "area", "pie", "scatter" y "hexbin".
De forma predeterminada, el índice pasa a ser el eje x y cada columna numérica se convierte en una línea, con una leyenda creada a partir de los nombres de las columnas. Una Series representa sus valores frente a su índice. Para elegir columnas, pasa x="month" y y="rain_mm", o una lista como y=["North", "Coast"].
Una tabla wide con el índice Jan, Feb, Mar, Apr y las columnas North [62, 48, 55, 40], Coast [110, 95, 80, 60] y Valley [20, 15, 30, 45], todos en milímetros de precipitación. ax = wide.plot(marker="o", figsize=(8, 4), title="Monthly rainfall"); ax.set_ylabel("Rainfall (mm)") dibuja tres líneas etiquetadas en un área de trazado y luego establece la etiqueta del eje y con un método ordinario de Matplotlib.
Argumentos habituales de .plot: title, xlabel, ylabel, xlim, ylim, figsize, color, legend=False, rot (rotación de las etiquetas de graduación en grados), grid=True y logy=True. ax= dibuja en un área de trazado existente, por ejemplo un panel de plt.subplots(1, 2), en lugar de hacerlo en una figura nueva.
subplots=True dibuja cada columna en su propia área de trazado y devuelve un arreglo de NumPy de áreas de trazado en lugar de una sola; layout=(2, 2) las organiza en una cuadrícula y sharey=True les asigna una escala y común. Para la tabla de tres estaciones, wide.plot(subplots=True, layout=(1, 3), sharey=True) produce un panel por estación.
Los diagramas de dispersión y los gráficos de celdas hexagonales solo existen para DataFrames y necesitan tanto x como y: days.plot.scatter(x="temp_c", y="rentals", c="rain_mm", colormap="viridis") colorea los puntos según la precipitación. Una Series no tiene gráfico de dispersión, por lo que s.plot.scatter() produce un error. df.plot.hist(bins=5) y df.plot.box() producen un histograma y un diagrama de caja y bigotes de cada columna numérica.
s.plot.pie() dibuja un sector por valor, cuyo tamaño depende de su proporción del total. Como los gráficos circulares necesitan una Series de partes no negativas de un mismo total, una columna de recuentos como s.value_counts() es una entrada habitual.
Los gráficos de barras de pandas tratan el índice como categorías y colocan las barras en las posiciones 0, 1, 2, …, sean cuales sean los valores del índice. Los gráficos de líneas utilizan los valores reales del índice cuando son números o fechas. Por tanto, una línea y unas barras de pandas dibujadas en la misma área de trazado solo se alinean cuando los valores x de la línea coinciden con las posiciones de las barras, como ocurre con un índice predeterminado 0, 1, 2, …; para años como 2020 a 2023, la línea queda muy a la derecha de las barras. Representa ambos con las mismas posiciones al combinarlos.
Con un DatetimeIndex, .plot() coloca las fechas en el eje x y las etiqueta automáticamente. Los datos diarios suelen resultar más claros después de un remuestreo temporal, por ejemplo a medias mensuales con s.resample("MS").mean().plot().
.plot solo representa columnas numéricas. Si los números se leyeron como texto, por ejemplo porque una columna contiene «12 mm», la columna se omite y, cuando no quedan datos numéricos, pandas produce TypeError: no numeric data to plot. Convierte primero la columna, por ejemplo con pd.to_numeric(...).
Puntos clave
- Pandas representa datos numéricos y utiliza el índice de forma predeterminada.
- Pasa un área de trazado con
ax=para reutilizar un panel. - Los subgráficos separados devuelven un arreglo de áreas de trazado.
- Las barras y las líneas numéricas de pandas utilizan reglas de posición diferentes.
2.2 Reestructura los datos antes de representarlos
Un gráfico representa los valores que hay en la tabla, así que resúmelos primero. Ejemplo: una tabla en formato largo rain con 12 filas, una por estación y mes, y las columnas month, station y rain_mm. rain.groupby("station")["rain_mm"].mean() da una media por estación: Coast 86,25 mm, North 51,25 mm y Valley 27,5 mm. Al añadir .plot.bar() se dibujan tres barras.
Representar por error las filas sin resumir muestra mediciones individuales en lugar de las medias solicitadas: rain.plot.bar(x="station", y="rain_mm") dibuja 12 barras con nombres de estaciones repetidos en lugar de tres medias.
Ordena antes de representar para obtener barras ordenadas por valor: means.sort_values(ascending=False).plot.bar() coloca la media mayor a la izquierda. Para un gráfico horizontal, means.sort_values().plot.barh() coloca la mayor arriba, porque el primer valor se dibuja abajo.
s.value_counts() cuenta cuántas veces aparece cada categoría y muestra los recuentos de mayor a menor frecuencia. Para los medios de transporte «autobús», «coche», «autobús», «bicicleta», «autobús», «coche» da autobús 3, coche 2, bicicleta 1, listo para .plot.bar(). Utiliza .sort_index() o .reindex([...]) cuando las categorías tengan un orden natural, como los días de la semana.
Un DataFrame en formato ancho, con una columna por serie, produce en pandas una línea o un color de barra por columna. Convierte una tabla en formato largo con rain.pivot(index="month", columns="station", values="rain_mm"). Cuando algún par de índice y columna aparece más de una vez, pivot produce un error; utiliza en su lugar pivot_table(..., aggfunc="mean") o groupby(["month", "station"])["rain_mm"].mean().unstack().
pivot y pivot_table ordenan el nuevo índice, por lo que los meses expresados como cadenas aparecen en orden alfabético, Apr, Feb, Jan, Mar, y un gráfico de líneas recorre entonces los meses en un orden incorrecto. Restablece el orden real con wide.reindex(["Jan", "Feb", "Mar", "Apr"]), o almacena el mes como una variable categórica ordenada o como un número de mes antes de convertir a formato ancho.
En una tabla en formato ancho, wide.plot.bar() dibuja barras agrupadas, un grupo por etiqueta del índice y un color por columna, mientras que wide.plot.bar(stacked=True) apila las columnas. La transpuesta wide.T.plot.bar() intercambia los papeles: un grupo por estación y un color por mes.
Para obtener las proporciones dentro de cada grupo, normaliza una tabla de contingencia: pd.crosstab(trips["region"], trips["mode"], normalize="index") divide cada recuento entre el total de su fila, de modo que cada fila suma 1. Si la región N tiene dos viajes en coche y uno en autobús, su fila contiene coche 0,67 y autobús 0,33 (redondeados). .plot.bar(stacked=True) dibuja entonces barras de igual altura total que muestran la composición de cada región.
seaborn funciona mejor con datos en formato largo y ordenado: una fila por observación y una columna por variable. wide.reset_index().melt(id_vars="month", var_name="station", value_name="rain_mm") convierte la tabla ancha de 4 × 3 de nuevo en 12 filas con tres columnas, de modo que station puede utilizarse para el color o las facetas.
Puntos clave
- Agrega las filas antes de representar el resumen solicitado.
- Un par duplicado al convertir a formato ancho requiere una regla de agregación.
- Los datos en formato ancho se adaptan a series en columnas; los datos en formato largo, a correspondencias semánticas.
- Restablece un orden significativo de las categorías después de reestructurar.
- Normaliza cada fila para comparar las proporciones de los grupos.
3Crea gráficos estadísticos con seaborn
Los gráficos estadísticos relacionan columnas de una tabla con características visuales y a menudo calculan un resumen al dibujarse. seaborn se ocupa de ambas tareas mediante argumentos con nombre. Una llamada breve puede mostrar grupos en distintos colores, promediar observaciones repetidas o dividir una tabla en paneles. Examina estos valores predeterminados con atención: un gráfico de observaciones individuales y otro de medias de grupos pueden partir de las mismas filas, pero responder a preguntas distintas.
3.1 Asocia columnas con características visuales del gráfico en seaborn
seaborn es una biblioteca de gráficos construida sobre Matplotlib que trabaja directamente con DataFrames de pandas y calcula por sí misma resúmenes estadísticos habituales. Por convención se importa como import seaborn as sns. Una llamada típica indica la tabla y sus columnas: sns.scatterplot(data=days, x="temp_c", y="rentals").
Además de x e y, las columnas pueden asociarse con otras características mediante correspondencias semánticas: hue establece el color, style el marcador o el patrón de líneas discontinuas, y size el tamaño del marcador o el ancho de la línea. seaborn elige los colores y crea la leyenda por sí mismo. Una columna categórica para hue recibe colores distintos; una numérica recibe un degradado.
Cada correspondencia necesita una columna en formato largo. Con la tabla de precipitaciones en formato largo, sns.lineplot(data=rain, x="month", y="rain_mm", hue="station", marker="o") dibuja una línea de color por estación con una leyenda. Si hue indica una columna que no está en la tabla, seaborn produce un ValueError que señala que no pudo interpretar el valor.
Cuando x contiene cadenas, seaborn coloca las categorías en el orden en que aparecen por primera vez en los datos, de modo que los meses almacenados como «Jan», «Feb», «Mar» en ese orden de filas conservan el orden del calendario. Las funciones categóricas, como barplot, boxplot y countplot, aceptan order=["Mon", "Tue", "Wed"] para establecer el orden de las categorías, y hue_order establece el orden de los grupos codificados por color en todas las funciones que tienen hue. lineplot no tiene argumento order: para fijar ahí el orden de los nombres de los meses, convierte la columna x en una variable categórica ordenada, por ejemplo pd.Categorical(rain["month"], categories=["Jan", "Feb", "Mar", "Apr"], ordered=True).
Las funciones a nivel de área de trazado, como scatterplot, lineplot, histplot, boxplot, barplot y heatmap, dibujan en un área de trazado de Matplotlib, aceptan ax= para elegirla y la devuelven. Las funciones a nivel de figura, relplot, displot, catplot y lmplot, crean su propia figura, pueden dividirla en paneles con col y row, y devuelven un objeto FacetGrid de seaborn.
Las funciones a nivel de figura establecen el tamaño por panel: height es la altura de cada panel en pulgadas y aspect su relación entre ancho y alto, por lo que cada panel tiene height × aspect pulgadas de ancho; los valores predeterminados son 5 y 1. Como crean su propia figura, no pueden dibujar en un área de trazado existente: relplot, displot y catplot muestran una advertencia e ignoran ax=, y lmplot lo rechaza con un TypeError. Sitúan la leyenda fuera de los paneles.
sns.set_theme() cambia todos los gráficos posteriores, incluidos los de Matplotlib sin seaborn, al aspecto de seaborn: el estilo «darkgrid», el contexto «notebook» y la paleta predeterminada de seaborn. style puede ser «darkgrid», «whitegrid», «dark», «white» o «ticks»; context puede ser «paper», «notebook», «talk» o «poster» y ajusta la escala de fuentes y líneas, por ejemplo de una fuente base de 12 puntos para «notebook» a 18 puntos para «talk».
palette elige los colores de hue, por ejemplo palette="colorblind", "Set2" o "viridis". En seaborn 0.13, pasar palette sin hue está en desuso; para colorear las barras por categoría, asigna a hue la misma columna que a x y añade legend=False: sns.barplot(data=rain, x="station", y="rain_mm", hue="station", legend=False).
El resultado se puede completar con Matplotlib:
ax = sns.scatterplot(...)
ax.set(xlabel="Temperature (°C)", ylabel="Rentals per day", title="Rentals and temperature")
. Para un resultado a nivel de figura, utiliza los métodos de la cuadrícula, como g.set_axis_labels("Temperature (°C)", "Rentals per day"), y g.figure.suptitle("...") para un título general.
Puntos clave
- Las correspondencias semánticas relacionan columnas con características visuales.
- Las funciones a nivel de área de trazado aceptan un área existente.
- Las funciones a nivel de figura crean sus propios paneles y establecen su tamaño.
- Los temas afectan a los gráficos posteriores de ambas bibliotecas.
3.2 Muestra relaciones entre variables numéricas
sns.scatterplot(data=days, x="temp_c", y="rentals", hue="weekday", size="rain_mm") dibuja un punto por fila, con color y tamaño determinados por otras columnas. Combinar hue y style con la misma columna da a cada grupo un color y un marcador distintos, que siguen siendo distinguibles en escala de grises.
sns.lineplot agrega de forma predeterminada: cuando varias filas comparten un valor de x, dibuja la línea pasando por la media de sus valores de y y sombrea una banda para el intervalo de confianza del 95 % de esa media, calculado mediante remuestreo bootstrap. Ejemplo resuelto: para x = 1 los valores de y son 10, 12 y 14; para x = 2 son 20, 21 y 25; la línea pasa por 12 y 22.
La banda predeterminada muestra la incertidumbre de cada media, no el rango de los datos. errorbar="sd" sombrea en su lugar una desviación estándar por encima y por debajo de la media, errorbar=None elimina la banda y estimator=None (junto con units=) dibuja cada serie individual sin promediar. Con una fila por valor de x no hay nada que promediar ni se muestra una banda.
sns.regplot(data=days, x="temp_c", y="rentals") dibuja un diagrama de dispersión con una recta de mínimos cuadrados y una banda de confianza sombreada del 95 % para esa recta; order=2 ajusta en su lugar una curva cuadrática. sns.lmplot hace lo mismo como función a nivel de figura, por lo que también puede dividir los datos por hue, col o row.
Una línea de ajuste resume los datos con el modelo que elegiste. Se puede dibujar una recta sobre datos curvos, así que observa los puntos alrededor de la línea antes de confiar en ella. Una tendencia fuerte muestra que las variables están asociadas en estos datos, sin establecer una causa.
sns.pairplot(df) dibuja una cuadrícula con un diagrama de dispersión para cada par de columnas numéricas y la distribución de cada columna en la diagonal: histogramas de forma predeterminada y curvas de densidad cuando se establece hue. Cuatro columnas numéricas producen una cuadrícula de 4 × 4 con 16 paneles. corner=True conserva solo el triángulo inferior y vars=[...] limita las columnas. Devuelve un PairGrid.
sns.jointplot(data=days, x="temp_c", y="rentals") dibuja un diagrama de dispersión con el histograma de cada variable en sus bordes; kind="hex" sustituye los puntos por celdas hexagonales, lo que ayuda con conjuntos de datos grandes.
sns.relplot(..., kind="scatter") y sns.relplot(..., kind="line") son las versiones a nivel de figura de scatterplot y lineplot; el tipo predeterminado es el de dispersión. Utilízalas cuando la misma relación deba mostrarse en paneles separados para cada grupo.
sns.regplot(data=days, x="temp_c", y="rentals") muestra que los alquileres aumentan de 180 a 12 °C hasta aproximadamente 350 en los días más cálidos, con una correlación de aproximadamente 0,92. El día de 30 °C tiene menos alquileres (340) que el de 27 °C (360), por lo que los puntos se nivelan en la parte superior; se puede comparar un ajuste cuadrático (order=2) con la recta.
Puntos clave
- Las líneas predeterminadas de seaborn promedian las observaciones repetidas.
- Una banda de confianza describe la incertidumbre de una estimación.
- Utiliza units y ningún estimador para conservar las trayectorias individuales.
- Inspecciona tanto los puntos como las líneas de ajuste.
- Las matrices de gráficos por pares comparan variables y sus distribuciones.
3.3 Compara grupos mediante gráficos categóricos
Las funciones categóricas de seaborn sitúan cada categoría en las posiciones 0, 1, 2, … del eje categórico. Incluso los números se tratan como etiquetas: los años 2020, 2021 y 2023 se dibujan a distancias iguales, sin dejar un espacio para 2022. native_scale=True conserva un eje numérico con las distancias reales.
sns.barplot(data=rain, x="station", y="rain_mm") dibuja una barra por estación cuya altura es la media de sus filas, con una barra de error para el intervalo de confianza del 95 % de esa media. Con la tabla de precipitaciones, las barras son Coast 86,25, North 51,25 y Valley 27,5 mm. estimator="median" o estimator="sum" cambia el resumen; errorbar="sd" o errorbar=None cambia o elimina las barras de error.
sns.countplot(data=trips, x="mode") cuenta las filas de cada categoría y no necesita una columna numérica; sns.barplot resume una columna numérica. Utiliza countplot para «cuántos» y barplot para «cuánto en promedio».
sns.pointplot muestra la media de cada grupo como un punto con una barra de error y une con una línea los puntos de cada grupo definido por hue. Facilita la comparación de cambios entre categorías, por ejemplo la precipitación media de tres estaciones en cada uno de cuatro meses.
Una barra de medias oculta la dispersión y el número de observaciones: una media de 3 filas parece tan sólida como una media de 300. A menudo es mejor mostrar los datos: sns.stripplot dibuja cada observación como un punto con un pequeño desplazamiento aleatorio, y sns.swarmplot organiza los puntos para que no se superpongan. Se puede dibujar un diagrama de puntos por categorías sobre un diagrama de caja y bigotes o un gráfico de barras en la misma área de trazado.
Con hue, los diagramas de barras, caja y violín sitúan de forma predeterminada los grupos uno junto a otro dentro de cada categoría mediante un desplazamiento lateral. Los diagramas de puntos, puntos por categorías y enjambre dibujan los grupos en la misma posición salvo que se establezca dodge=True, por lo que sus puntos pueden superponerse. Establece el orden de las categorías con order=[...] y el de los grupos con hue_order=[...].
La orientación depende de los datos: coloca las categorías en el eje y y los números en el eje x, sns.barplot(data=rain, x="rain_mm", y="station"), para obtener barras horizontales con etiquetas largas legibles. orient="y" (o "h") lo indica de forma explícita.
sns.catplot es la función a nivel de figura para todos los gráficos categóricos. Su kind puede ser «strip» (el predeterminado), «swarm», «box», «violin», «boxen», «point», «bar» o «count», y col o row divide el gráfico en paneles.
Puntos clave
- Los gráficos de frecuencias absolutas cuentan filas; los de barras resumen valores numéricos.
- Los diagramas de puntos por categorías y de enjambre muestran las observaciones.
- El desplazamiento lateral separa los grupos codificados por color dentro de una categoría.
4Visualiza distribuciones y cuadrículas de valores
Un gráfico de distribución describe un conjunto de mediciones, mientras que un mapa de calor describe una tabla mediante colores. Estos gráficos condensan muchos valores, por lo que sus ajustes afectan a lo que puedes interpretar. Los límites de clase determinan qué observaciones se cuentan juntas; los cuartiles y los bigotes resumen distintas partes de una muestra; una escala de colores asigna tonos a los números. Revisa esos cálculos antes de interpretar la imagen terminada.
4.1 Muestra una distribución mediante histogramas y curvas de densidad
Un histograma divide el rango de una variable numérica en intervalos contiguos llamados intervalos de clase y dibuja sobre cada uno una barra cuya altura es el número de observaciones que contiene. Muestra la forma de una distribución: dónde se centran los valores, cuánto se dispersan, si son asimétricos y si hay huecos o valores inusuales.
counts, edges, patches = ax.hist(data, bins=5) dibuja el histograma y devuelve el recuento de cada intervalo de clase y sus límites. Si se proporciona un entero, los intervalos tienen la misma amplitud desde el mínimo hasta el máximo; el valor predeterminado es 10 intervalos. Cada intervalo incluye su límite izquierdo y excluye el derecho, salvo el último, que incluye ambos.
20 tiempos de desplazamiento en minutos: 12, 15, 18, 20, 22, 22, 25, 27, 28, 30, 31, 33, 35, 38, 40, 42, 45, 50, 55, 62. Con bins=5 los límites son 12, 22, 32, 42, 52 y 62, y los recuentos son 4, 7, 4, 3 y 2. El valor 22 cae en el segundo intervalo porque los intervalos excluyen su límite derecho, y 62 se cuenta en el último porque este lo incluye.
El número y la posición de los intervalos cambian la imagen. Los mismos 20 tiempos con límites [10, 20, 30, 40, 50, 60, 70] dan los recuentos 3, 6, 5, 3, 2 y 1. Demasiados pocos intervalos ocultan la forma; demasiados producen un gráfico irregular con muchos intervalos casi vacíos. Prueba varios ajustes y prefiere límites redondos que los lectores puedan interpretar, como pasos de 10 minutos.
density=True en Matplotlib, o stat="density" en seaborn, escala las barras para que su área total sea 1: cada altura es recuento ÷ (n × amplitud del intervalo). Para los datos de desplazamientos con cinco intervalos de 10 minutos, la altura de la segunda barra es 7 ÷ (20 × 10) = 0,035 por minuto. Una altura de densidad no es una probabilidad; altura × amplitud del intervalo es la proporción de observaciones del intervalo.
sns.histplot(data=commutes, x="minutes") dibuja un histograma con seaborn; bins y binwidth controlan los intervalos. stat elige la altura: «count» (predeterminado), «probability» o «proportion» (las alturas suman 1), «percent» (las alturas suman 100) y «density» (área 1). Para los cinco intervalos de desplazamiento, «probability» da 0,2, 0,35, 0,2, 0,15 y 0,1.
Para comparar grupos, sns.histplot(data=commutes, x="minutes", hue="mode") superpone un histograma por grupo; multiple="stack" los apila, multiple="dodge" los coloca uno junto a otro y element="step" dibuja contornos cuya superposición se lee con mayor facilidad. Los grupos de distintos tamaños se comparan de forma equitativa con stat="density", common_norm=False, que escala cada grupo a un área de 1.
Una estimación de densidad por núcleos es una curva suave que estima la forma de la distribución; el área bajo ella es 1. sns.kdeplot(data=commutes, x="minutes") la dibuja y sns.histplot(..., kde=True) la añade a un histograma. Un bw_adjust superior a 1 hace que la curva sea más suave; inferior a 1, más detallada.
Una curva KDE se extiende más allá de los valores mínimo y máximo, por lo que puede mostrar densidad por debajo de 0 minutos para tiempos que no pueden ser negativos. cut=0 detiene la curva en los límites de los datos. En muestras pequeñas, la curva puede sugerir una forma que los datos no respaldan.
En pandas, commutes["minutes"].plot.hist(bins=5, edgecolor="white") dibuja un histograma (10 intervalos de forma predeterminada), y df.hist() dibuja un histograma por columna numérica en una cuadrícula. En seaborn, sns.displot es la versión a nivel de figura: kind="hist" (predeterminado), kind="kde" o kind="ecdf", donde una ECDF muestra para cada valor la proporción de observaciones menores o iguales a él.
Puntos clave
- Los límites del histograma determinan a qué intervalo pertenece cada observación.
- La densidad utiliza el área para representar una proporción.
- Una KDE suaviza una distribución y depende del ancho de banda.
- Normaliza los grupos por separado para comparar sus formas.
4.2 Resume y compara distribuciones mediante diagramas de caja y bigotes
Un diagrama de caja y bigotes resume una distribución: la caja va del primer cuartil (Q1) al tercer cuartil (Q3), una línea en su interior marca la mediana, los bigotes se extienden hacia los valores típicos más pequeño y más grande, y los puntos más allá de los bigotes se dibujan individualmente como posibles valores atípicos. El rango intercuartílico IQR = Q3 − Q1 es la longitud de la caja y abarca la mitad central de los datos.
De forma predeterminada, Matplotlib, pandas y seaborn utilizan whis=1.5: los límites de detección de valores atípicos son Q1 − 1,5 × IQR y Q3 + 1,5 × IQR. Cada bigote termina en el valor observado más extremo dentro de su límite, no en el propio límite, y cada valor fuera de los límites se dibuja como un punto separado.
11 tiempos de entrega en minutos: 14, 16, 17, 18, 19, 20, 21, 22, 24, 25, 41. Matplotlib calcula Q1 = 17,5, mediana = 20 y Q3 = 23, por lo que IQR = 5,5. Los límites son 17,5 − 8,25 = 9,25 y 23 + 8,25 = 31,25. El bigote inferior termina en 14, el superior en 25, y 41 se dibuja como un punto atípico.
Los cuartiles dependen del método. Las bibliotecas de gráficos utilizan interpolación lineal entre los valores ordenados (el método predeterminado de NumPy y pandas), que da 17,5 y 23 en el ejemplo anterior. El método manual de tomar las medianas de las mitades inferior y superior sin la mediana general da Q1 = 17 y Q3 = 24 para los mismos datos. Ambos son válidos; las pequeñas diferencias entre un cálculo manual y un gráfico se deben a esto.
Dibuja el resumen con la biblioteca que estés utilizando: ax.boxplot([north, coast], tick_labels=["North", "Coast"]) en Matplotlib (el argumento se llamaba labels antes de la versión 3.9); rain.boxplot(column="rain_mm", by="station") en pandas, que también añade el título general «Boxplot grouped by station»; sns.boxplot(data=rain, x="station", y="rain_mm") en seaborn, con hue para una segunda agrupación. whis=(0, 100) extiende los bigotes hasta el mínimo y el máximo, y showfliers=False oculta los puntos atípicos.
Los diagramas de caja y bigotes colocados uno junto a otro permiten comparar grupos de un vistazo: compara las medianas, las longitudes de las cajas (la dispersión de la mitad central) y la superposición de las cajas. Una mediana cercana a un extremo de la caja, o un bigote mucho más largo que el otro, indica una distribución asimétrica.
Una caja muestra solo cinco números y los valores atípicos. No muestra el número de observaciones, y distribuciones de formas muy distintas pueden tener la misma caja: una distribución con dos picos separados y otra con un solo pico pueden compartir Q1, la mediana y Q3. Superponer los puntos, sns.stripplot(data=rain, x="station", y="rain_mm", color="black", alpha=0.5), o utilizar un diagrama de violín permite verlo.
sns.violinplot(data=rain, x="station", y="rain_mm") dibuja una curva de densidad reflejada para cada grupo con un pequeño diagrama de caja y bigotes dentro (inner="box", el valor predeterminado); inner="quart" marca en su lugar los cuartiles con líneas. Con un hue de dos niveles, split=True coloca un grupo a cada lado del violín. Al igual que una KDE, el violín puede extenderse más allá de los datos; cut=0 lo detiene en el mínimo y el máximo observados.
Un punto señalado por la regla de 1,5 × IQR es inusual con respecto al resto de los datos, una razón para investigar el valor. Compruébalo: puede ser un error de entrada de datos o un valor real e importante, como una entrega retrasada por el cierre de una carretera. Eliminar puntos solo porque el gráfico los señala distorsiona el análisis.
Puntos clave
- La longitud de la caja es el IQR.
- Los bigotes terminan en observaciones situadas dentro de los límites.
- Los métodos de cálculo de cuartiles pueden diferir.
- Los puntos atípicos ocultos permanecen en los datos originales.
- Los puntos y los violines muestran información que una caja oculta.
4.3 Representa una cuadrícula de valores como un mapa de calor
Un mapa de calor muestra una tabla de números como una cuadrícula de celdas coloreadas: las filas y las columnas son dos categorías (o variables agrupadas en intervalos), y el color de cada celda representa su valor. Es adecuado para observar patrones en tablas de doble entrada, como visitantes por día y franja horaria, y en matrices de correlaciones.
sns.heatmap(table) toma una tabla en formato ancho, utiliza su índice como etiquetas de fila y sus columnas como etiquetas de columna, y añade una barra de colores como referencia. La tabla suele proceder de pivot_table: visits.pivot_table(index="day", columns="slot", values="visitors", aggfunc="mean").
Un museo cuenta los visitantes por cada medio día. Sábado por la mañana 120 y 140, sábado por la tarde 200; domingo por la mañana 90, domingo por la tarde 160; lunes por la mañana 40, lunes por la tarde 70 y 90. La tabla dinámica de medias contiene Mon 40 y 80, Sat 130 y 200, Sun 90 y 160 (mañana y tarde). sns.heatmap(pt, annot=True, fmt=".0f", cmap="Blues") muestra la celda con más visitantes, el sábado por la tarde, como la más oscura. La conversión a formato ancho ordena los días alfabéticamente (Mon, Sat, Sun); pt.reindex(["Sat", "Sun", "Mon"]) restablecería el orden elegido.
annot=True escribe cada valor en su celda y fmt establece el formato numérico. El valor predeterminado ".2g" conserva dos cifras significativas, por lo que 43,25 se muestra como «43» y 1234 como «1.2e+03». Utiliza fmt=".0f" para números enteros o fmt=".2f" para dos decimales; fmt="d" solo funciona con datos enteros y produce un ValueError con números de coma flotante.
Un mapa de calor de correlaciones parte de corr = df.corr(numeric_only=True), una tabla cuadrada y simétrica cuyos coeficientes definidos van de −1 a 1. Las columnas numéricas no constantes tienen 1 en la diagonal; las columnas constantes tienen correlaciones no definidas. En pandas 2 y versiones posteriores, el valor predeterminado de numeric_only es False, por lo que df.corr() produce un error cuando la tabla tiene una columna de texto. Dibújalo con sns.heatmap(corr, annot=True, fmt=".2f", cmap="vlag", vmin=-1, vmax=1, center=0).
Ocho días con temperatura (°C), alquileres de bicicletas, precipitación (mm) y viento (km/h). La matriz de correlaciones da temperatura y alquileres 0,92, alquileres y precipitación −0,82, precipitación y viento 0,75, y temperatura y viento −0,38. Con el mapa de colores «vlag», el par con una correlación positiva fuerte aparece en rojo intenso, el par con una correlación negativa fuerte en azul intenso y el par débil de temperatura y viento en un tono pálido cercano al centro blanco.
Sin vmin y vmax, los colores se extienden desde el valor mínimo hasta el máximo de esa tabla, por lo que el mismo color puede representar valores distintos en dos mapas de calor. Fija los límites para comparar mapas de calor y utiliza vmin=-1, vmax=1 para correlaciones. Un mapa de colores secuencial como «rocket» (el predeterminado de seaborn), «viridis» o «Blues» es adecuado para valores que van de bajos a altos; uno divergente como «vlag», «coolwarm» o «RdBu_r», con center en el punto medio significativo, es adecuado para valores por encima y por debajo de una referencia como 0. Si se establece center y no se indica cmap, seaborn utiliza el mapa divergente «icefire».
Opciones útiles: linewidths=0.5 dibuja líneas finas entre las celdas, square=True hace que las celdas sean cuadradas, cbar_kws={"label": "Visitors"} etiqueta la barra de colores y los valores faltantes (NaN) se dejan en blanco. mask=np.triu(np.ones_like(corr, dtype=bool)) oculta el triángulo superior y la diagonal de una matriz de correlaciones, que repiten el triángulo inferior.
En Matplotlib, im = ax.imshow(values, cmap="viridis"); fig.colorbar(im, ax=ax) dibuja un mapa de calor de un arreglo de 2 dimensiones, con la fila 0 arriba; «viridis» es el mapa de colores predeterminado de Matplotlib. imshow etiqueta los ejes con números de fila y columna, así que establece tú los nombres: ax.set_xticks(range(len(cols)), labels=cols). ax.pcolormesh es una alternativa cuando las celdas tienen tamaños distintos.
Un coeficiente de correlación mide únicamente la intensidad de una asociación lineal. Una correlación cercana a 0 no descarta una relación curva fuerte, y un solo valor atípico puede aumentar o disminuir mucho un coeficiente. Comprueba los diagramas de dispersión correspondientes, por ejemplo con una matriz de gráficos por pares, antes de interpretar un mapa de calor de correlaciones.
Puntos clave
- Los colores de un mapa de calor representan los valores de la tabla.
- Fija los límites de colores para comparar distintos gráficos.
- Las escalas de correlación van de −1 a 1.
- Comprueba los diagramas de dispersión antes de interpretar las correlaciones.
5Crea figuras con varios paneles, añade anotaciones y expórtalas
Una figura útil suele necesitar varias vistas de los mismos datos. Los paneles permiten comparar grupos, las anotaciones relacionan una afirmación con un valor concreto y los ajustes de exportación convierten el resultado en una imagen adecuada para su destino. Mantén el control de la figura durante todo este proceso. El objeto que contiene tus gráficos también contiene su tamaño general y es la forma más fiable de guardar exactamente el resultado que has creado.
5.1 Organiza varios gráficos en una figura
Los gráficos múltiples en pequeños paneles son un conjunto de gráficos del mismo tipo, uno por cada subconjunto de datos, dibujados con las mismas escalas y colocados uno junto a otro para poder comparar los subconjuntos. En Matplotlib se construyen como una cuadrícula de áreas de trazado en una figura.
fig, axes = plt.subplots(2, 3, figsize=(12, 6)) devuelve una figura y un arreglo de NumPy de 2 × 3 áreas de trazado. axes[0, 0] es el panel superior izquierdo y axes[1, 2] el inferior derecho. Con una fila o una columna, el arreglo es unidimensional, por lo que plt.subplots(1, 3) da axes[0], axes[1] y axes[2]. axes.flat recorre todos los paneles fila por fila.
El propio arreglo no puede dibujar: axes.plot(...) produce AttributeError: 'numpy.ndarray' object has no attribute 'plot'. Selecciona primero un panel mediante su índice, como en axes[0, 1].plot(...).
sharex=True y sharey=True dan a todos los paneles los mismos límites de x o de y, de modo que alturas iguales representan valores iguales en todos los paneles y solo los paneles exteriores muestran etiquetas de graduación. Sin ejes compartidos, cada panel ajusta su escala a sus propios datos y un rango pequeño puede parecer tan grande como uno amplio.
fig, axes = plt.subplots(2, 2, sharey=True, layout="constrained"), seguido de for ax, (name, grp) in zip(axes.flat, rain.groupby("station")): ax.plot(grp["month_num"], grp["rain_mm"], marker="o"); ax.set_title(name). Las tres estaciones ocupan tres de los cuatro paneles; axes[1, 1].axis("off") oculta el cuarto, que está vacío.
Las etiquetas de paneles vecinos pueden superponerse. layout="constrained" en plt.subplots o plt.figure ajusta el espaciado automáticamente; fig.tight_layout(), llamado después de dibujar, es la alternativa más antigua. fig.suptitle("Monthly rainfall by station") añade un título para toda la figura, y fig.supxlabel(...) y fig.supylabel(...) añaden etiquetas de ejes compartidas.
Paneles de distintos tamaños: plt.subplots(1, 2, gridspec_kw={"width_ratios": [2, 1]}) hace que el panel izquierdo tenga el doble de ancho que el derecho. fig, axd = plt.subplot_mosaic([["top", "top"], ["left", "right"]]) devuelve un diccionario de áreas de trazado, en este caso un panel ancho axd["top"] sobre dos más pequeños.
Los gráficos de pandas y las funciones de seaborn a nivel de área de trazado pueden rellenar paneles elegidos con ax=: wide["North"].plot(ax=axes[0, 0]) o sns.histplot(data=commutes, x="minutes", ax=axes[0, 1]). Así se combinan gráficos de las tres bibliotecas en una figura.
Puntos clave
- Selecciona un área del arreglo de áreas de trazado mediante su índice antes de dibujar.
- Las escalas compartidas permiten comparar paneles.
- La distribución con restricciones deja espacio para las etiquetas.
5.2 Representa datos por facetas con seaborn
La representación por facetas dibuja el mismo gráfico una vez por cada nivel de una variable categórica, cada uno en su propio panel, con ejes compartidos. Las funciones de seaborn a nivel de figura lo hacen con col= (paneles uno junto a otro), row= (paneles apilados) y col_wrap= (iniciar una nueva fila después de ese número de columnas).
sns.relplot(data=rain, x="month_num", y="rain_mm", col="station", col_wrap=2, kind="line", height=3, aspect=1.5) dibuja tres paneles, dos en la primera fila y uno en la segunda. Cada panel tiene 3 pulgadas de alto y 3 × 1,5 = 4,5 pulgadas de ancho, por lo que la figura mide aproximadamente 9 × 6 pulgadas.
row y col juntos crean una cuadrícula con un panel por cada combinación de niveles: dos estaciones del año como filas y tres estaciones de medición como columnas dan 2 × 3 = 6 paneles. col_wrap no se puede combinar con row.
Los mismos argumentos funcionan para todo tipo de gráficos: sns.displot(data=commutes, x="minutes", col="mode") produce un histograma por medio de transporte, y sns.catplot(data=rain, x="station", y="rain_mm", col="season", kind="box") produce diagramas de caja y bigotes por estación del año.
Los paneles comparten sus ejes x e y de forma predeterminada, por lo que se pueden comparar las alturas entre paneles. Permitir que cada panel ajuste su escala a sus propios datos muestra detalles dentro de grupos pequeños, pero hace que las comparaciones entre paneles resulten engañosas a primera vista. Con relplot y displot, pasa facet_kws={"sharey": False}; catplot acepta sharey=False directamente, y pasarlo también en facet_kws produce un TypeError.
sns.FacetGrid crea la cuadrícula directamente y luego dibuja en cada panel: g = sns.FacetGrid(commutes, col="mode", height=3); g.map_dataframe(sns.histplot, x="minutes"); g.add_legend(). g.map(plt.scatter, "temp_c", "rentals") pasa las columnas indicadas como argumentos posicionales a una función de representación.
Personaliza la cuadrícula con sus métodos: g.set_titles("{col_name}") establece los títulos de los paneles a partir de los nombres de los niveles, g.set_axis_labels("Month", "Rainfall (mm)") etiqueta todos los ejes y g.set(ylim=(0, 120)) aplica un ajuste del área de trazado a cada panel. g.axes_dict["Coast"] o g.axes.flat permite acceder a áreas de trazado individuales, y g.figure.suptitle("Rainfall by station", y=1.02) añade un título general encima de los paneles.
hue y col dividen los datos según una variable. hue superpone los grupos en una sola área de trazado, lo que facilita la comparación directa de unos pocos grupos; col los separa, lo que mantiene la legibilidad cuando las líneas o los puntos se superpondrían o cuando hay muchos grupos. Ambos pueden utilizarse a la vez, por ejemplo col="station", hue="season".
Las funciones a nivel de figura no dibujan en un área de trazado existente (relplot, displot y catplot ignoran ax= con una advertencia, y lmplot lo rechaza) y no aceptan figsize de Matplotlib (pasarlo produce un error): establece el tamaño de la cuadrícula con height y aspect. Para colocar un gráfico por facetas junto a otros gráficos en una figura de Matplotlib, crea los paneles con plt.subplots y funciones a nivel de área de trazado.
Puntos clave
- Las facetas dividen las filas en paneles por grupo.
- Las dimensiones de los paneles utilizan height y aspect.
- Los métodos de la cuadrícula personalizan toda la representación.
- Los gráficos a nivel de figura no pueden rellenar un área de trazado existente.
5.3 Añade anotaciones y líneas de referencia
ax.text(x, y, "text") escribe texto en un punto indicado en coordenadas de los datos, las mismas unidades que los valores representados. ha («left», «center», «right») y va («top», «center», «bottom») alinean el texto con ese punto; fontsize y color establecen su estilo.
Con transform=ax.transAxes, las posiciones son fracciones del área de trazado: (0, 0) es la esquina inferior izquierda y (1, 1) la superior derecha. ax.text(0.02, 0.95, "n = 20", transform=ax.transAxes, va="top") mantiene una nota en la esquina superior izquierda independientemente de los datos y los límites. El texto en coordenadas de los datos se mueve cuando cambian los límites y puede terminar fuera del área de trazado.
ax.annotate("Wettest month", xy=(1, 110), xytext=(2, 115), arrowprops=dict(arrowstyle="->")) escribe el texto en xytext y dibuja una flecha hacia el punto xy; ambos están en coordenadas de los datos de forma predeterminada. textcoords="offset points" convierte xytext en un desplazamiento desde xy en puntos, por ejemplo xytext=(10, 10) para 10 puntos a la derecha y hacia arriba.
Las líneas de referencia atraviesan toda el área de trazado: ax.axhline(50, color="gray", linestyle="--", label="Target") dibuja una línea horizontal en y = 50, y ax.axvline(...) una vertical. ax.axvspan(6, 8, alpha=0.2) sombrea el intervalo de x = 6 a x = 8, por ejemplo un período de vacaciones. ax.hlines(y, xmin, xmax) dibuja líneas horizontales en un intervalo limitado.
En el histograma de los 20 tiempos de desplazamiento, la media es 650 ÷ 20 = 32,5 minutos y la mediana 30,5 minutos. ax.axvline(32.5, color="black", linestyle="--"); ax.text(33.5, 6.5, "mean 32.5 min") marca la media, que está a la derecha de la mediana porque unos pocos desplazamientos largos la elevan.
Valores de las barras: ax.bar_label(bars, fmt="%.0f") etiqueta las barras devueltas por ax.bar. Para las barras dibujadas por pandas o seaborn, las barras se almacenan en ax.containers, por lo que ax.bar_label(ax.containers[0]) etiqueta la primera serie. padding=3 aleja las etiquetas 3 puntos de los extremos de las barras.
Las formas proceden de matplotlib.patches: ax.add_patch(Rectangle((x, y), width, height, fill=False, edgecolor="red")) dibuja el contorno de una región en coordenadas de los datos, y Circle y Polygon funcionan del mismo modo.
El texto se puede calcular a partir de los datos con cadenas f, de modo que las etiquetas sigan siendo correctas cuando cambien los datos: ax.text(..., f"mean {commutes['minutes'].mean():.1f} min"). Las anotaciones se dibujan encima de los datos; colócalas en zonas vacías y utiliza pocas para que destaquen lo importante.
Puntos clave
- Las coordenadas de los datos anclan el texto a las mediciones.
- Las coordenadas del área de trazado anclan el texto al panel.
- Una anotación separa el punto señalado de la posición del texto.
- Calcula a partir de los datos las etiquetas que cambian.
5.4 Guarda figuras para informes y para la web
fig.savefig("rainfall.png") guarda la figura; la extensión del archivo determina el formato: PNG y JPEG son imágenes de mapa de bits compuestas por píxeles, mientras que SVG y PDF son gráficos vectoriales compuestos por formas. format="pdf" establece el formato de manera explícita.
Las imágenes de mapa de bits tienen un número fijo de píxeles y se desenfocan al ampliarlas; los archivos vectoriales se mantienen nítidos a cualquier tamaño y son adecuados para informes, impresión y documentos. PNG es un buen formato de mapa de bits para gráficos en la web y en presentaciones. La compresión JPEG tiene pérdida y desenfoca las líneas finas y el texto, por lo que es una mala opción para gráficos.
Tamaño en píxeles = tamaño de la figura en pulgadas × dpi (puntos por pulgada). fig, ax = plt.subplots(figsize=(8, 5)) guardado con dpi=150 da 8 × 150 por 5 × 150 = 1200 × 750 píxeles. Sin dpi, savefig utiliza los dpi propios de la figura, 100 de forma predeterminada, por lo que la misma figura pasa a tener 800 × 500 píxeles. En los formatos vectoriales, los dpi solo afectan a las partes de mapa de bits incrustadas.
El tamaño del texto y el ancho de las líneas se establecen en puntos (1 punto = 1/72 de pulgada), en relación con las pulgadas de la figura. Aumentar los dpi añade píxeles sin cambiar el tamaño aparente del texto respecto al gráfico; en cambio, aumentar figsize hace que el texto sea relativamente más pequeño. Elige figsize según el tamaño final de visualización y dpi según la nitidez.
bbox_inches="tight" recorta los márgenes vacíos e incluye los elementos que sobresalen de la figura, como una leyenda situada fuera del área de trazado; la imagen guardada resulta entonces un poco más pequeña o más grande que el tamaño de la figura × dpi. pad_inches=0.1 establece el margen que se conserva alrededor.
transparent=True guarda sin fondo, lo que resulta adecuado para diapositivas con un fondo de color; facecolor="white" fuerza un fondo blanco, lo que importa cuando un tema oscuro del cuaderno se trasladaría de otro modo al archivo.
plt.savefig guarda la figura actual, así que llámalo antes de una llamada bloqueante a plt.show(): una vez cerrada la ventana, pyplot deja de mantener la referencia a esa figura y una llamada posterior a plt.savefig(...) guarda una figura nueva y vacía. En un cuaderno de Jupyter, pyplot también deja de mantener la figura al final de la celda, por lo que plt.savefig en una celda posterior guarda una imagen vacía. Conservar la figura en una variable evita ambos problemas: fig.savefig(...) sigue funcionando después de plt.show() o en una celda posterior del cuaderno.
Los resultados de seaborn se guardan del mismo modo: un gráfico a nivel de área de trazado mediante su figura, ax.figure.savefig("box.png", dpi=200), y una cuadrícula a nivel de figura con g.savefig("facets.png", dpi=200), que utiliza cajas delimitadoras ajustadas de forma predeterminada.
for name, grp in rain.groupby("station"):
grp = grp.sort_values("month_num")
fig, ax = plt.subplots(figsize=(6, 4))
ax.plot(grp["month_num"], grp["rain_mm"], marker="o")
ax.set(title=name, xlabel="Month", ylabel="Rainfall (mm)")
fig.savefig(f"rain_{name}.png", dpi=150, bbox_inches="tight")
plt.close(fig)
. Cerrar cada figura mantiene bajo el uso de memoria y evita la advertencia sobre más de 20 figuras abiertas.
Puntos clave
- Guarda el objeto de figura que has creado.
- Las pulgadas multiplicadas por los dpi dan las dimensiones del mapa de bits sin recortar.
- Las cajas delimitadoras ajustadas cambian los bordes de la imagen exportada.
- La salida vectorial conserva las formas.
- Cierra cada figura después de exportarla por lotes.
Ejemplos de Visualización con Matplotlib y Seaborn
1Crea gráficos con figuras y áreas de trazado de Matplotlib
15 pasos
- 1IntroducciónCrea un gráfico cada vez
Un comando de representación necesita un lugar donde dibujar. Matplotlib hace explícito ese lugar: una figura contiene una o varias áreas de trazado, y cada área contiene las marcas y las etiquetas. Empieza con un área y luego utiliza los mismos objetos para añadir líneas, puntos, barras y ajustes útiles. Asignar un nombre a la figura y a cada área de trazado facilita modificar el gráfico adecuado cuando un cuaderno crece o una figura contiene varios paneles.
- 2ExplicaciónConserva una referencia al lienzo
Una figura contiene la imagen completa. Un área de trazado contiene un gráfico y sus ejes de coordenadas. Crea ambas de forma explícita para que los comandos posteriores tengan un destino claro.
import matplotlib.pyplot as plt fig, ax = plt.subplots(figsize=(7, 4))El ancho y el alto se expresan en pulgadas. La variable
axapunta al área de trazado dentro defig; es el objeto que recibirá la línea y sus etiquetas. - 3EjemploDibuja en esa área
Añade una serie breve de temperaturas al área de trazado que acabas de crear. Cada par se convierte en un punto de la línea.
ax.plot([1, 2, 3], [8, 11, 10]) ax.set(title="Daily temperature", xlabel="Day", ylabel="Temperature (°C)")Llamar de nuevo a
ax.plotañadiría otra línea a esta misma área. En un script,plt.show()muestra la figura; un cuaderno normalmente la muestra debajo de la celda. - 4DesafíoCorrige una llamada al título
La llamada
ax.title("Daily temperature")produce un error «Text object is not callable». ¿Cómo debe cambiarse?---reveal---
Utiliza
ax.set_title("Daily temperature"). El atributotitledel área de trazado ya es un objeto de texto;set_titlees el método que lo cambia. El equivalente de pyplot esplt.title(...), pero actúa sobre el área de trazado que esté seleccionada en ese momento. - 5ExplicaciónMantén las observaciones emparejadas
Una línea conecta los puntos en el orden de entrada. Si la columna de distancia contiene 4, 1, 3 km, la línea retrocede antes de avanzar. Ordena las observaciones completas por distancia, conservando cada elevación junto a su distancia original.
route = route.sort_values("distance_km") ax.plot(route["distance_km"], route["elevation_m"])Un diagrama de dispersión no necesita un orden de conexión porque cada marcador es una observación separada.
- 6EjemploDa a cada serie una referencia
Los estilos de línea y de marcador pueden identificar las series, al igual que el color. Añade una etiqueta al dibujar y luego pide al área de trazado que cree su leyenda.
ax.plot([1, 2, 3], [4, 8, 7], "o--", label="East") ax.plot([1, 2, 3], [6, 7, 9], "s-", label="West") ax.legend(title="Site")En un diagrama de dispersión, los valores numéricos de
cnecesitan una barra de colores que explique su degradado. Reducealphacuando los puntos superpuestos oculten la muestra. - 7DesafíoPredice un cambio de tamaño
Un marcador de dispersión utiliza
s=25. Lo cambias as=100con la misma forma de marcador. ¿Cómo cambia su ancho?---reveal---
El ancho se duplica. El área ha aumentado por un factor de cuatro, y las dimensiones lineales aumentan por la raíz cuadrada de ese factor. La
sde dispersión se mide en puntos cuadrados; interpretarla como un ancho llevaría a predecir incorrectamente un aumento de cuatro veces. - 8ExplicaciónColoca categorías y valores
Las barras utilizan posiciones de categoría separadas. Empieza con un número por categoría; las cadenas se convierten en etiquetas equidistantes en el orden proporcionado. Un gráfico horizontal deja espacio para nombres largos.
fig, ax = plt.subplots() bars = ax.barh(["Bus", "Rail", "Walk"], [48, 37, 25]) ax.invert_yaxis() ax.bar_label(bars)La inversión coloca la primera categoría arriba. Invertir solo los nombres asignaría los valores a las categorías equivocadas.
- 9EjemploConstruye una barra apilada desde su base
Supón que los viajes de un día laborable consisten en 32 viajes en autobús y 18 en tren. El segundo segmento de la barra debe comenzar en la parte superior del primero.
ax.bar(["Weekday"], [32], label="Bus") ax.bar(["Weekday"], [18], bottom=[32], label="Rail") ax.legend()El segmento del tren tiene una altura de 18 y termina en 50. Si se añade un tercer medio de transporte, su línea de base es el total acumulado de los dos segmentos ya dibujados.
- 10DesafíoSitúa las barras agrupadas
Dos barras tienen cada una un ancho de 0,4 y deben quedar centradas juntas en la posición de categoría 1. ¿Dónde deben estar sus centros?
---reveal---
Utiliza 0,8 y 1,2, a medio ancho de barra a cada lado de la marca de graduación. Sus bordes interiores se encuentran en 1 y el par queda centrado en la categoría. Utilizar las posiciones 1 y 1,4 también produciría un par de barras contiguas, pero desplazaría su centro conjunto fuera de la marca de la categoría.
- 11ExplicaciónSepara las posiciones de las etiquetas
Las marcas de graduación señalan posiciones de coordenadas; sus etiquetas son el texto que se muestra en ellas. Proporciona ambas juntas al sustituir posiciones numéricas de meses por nombres.
ax.set_xticks([1, 2, 3], labels=["Jan", "Feb", "Mar"]) ax.set_ylabel("Rainfall (mm)") ax.grid(axis="y", alpha=0.3)Un formateador cambia cómo se muestran los números existentes. No cambia la escala de los datos, así que comprueba si los porcentajes se almacenan como fracciones o como números de 0 a 100.
- 12EjemploElige una escala con sentido
Los pasos iguales en una escala lineal representan diferencias iguales. Los pasos iguales en una escala logarítmica representan razones iguales.
ax.set_yscale("log")Los valores 5, 50 y 500 están a distancias iguales porque cada uno es diez veces el valor anterior. El cero y los valores negativos no pueden aparecer en una escala logarítmica ordinaria. Los estilos controlan el aspecto por separado: utiliza un contexto de estilo cuando un aspecto diferente deba aplicarse solo a un bloque de código.
- 13DesafíoEtiqueta el panel deseado
Una figura de dos paneles necesita un título en el primero, pero
plt.title(...)cambia el segundo. ¿Cómo puede el código dirigirse al primer panel de forma fiable?---reveal---
Llama a
axes[0].set_title(...). El área de trazado indicada es explícita, por lo que el estado actual de pyplot ya no decide el destino. Esto importa siempre que una figura tenga varios paneles o una función auxiliar cree o seleccione otra área de trazado. - 14DesafíoExplica una escala numérica de colores
Un diagrama de dispersión utiliza el color de los puntos para la cantidad de lluvia y el área de los marcadores para el volumen de alquileres. Su leyenda nombra las estaciones, pero no proporciona una escala numérica de colores. ¿Qué necesita aún la figura?
---reveal---
Añade una barra de colores vinculada al resultado del diagrama de dispersión y etiquétala «Precipitación (mm)». La leyenda de estaciones explica los grupos, mientras que la barra de colores explica los tonos numéricos. Conservar el objeto devuelto por el gráfico de dispersión permite que
fig.colorbarutilice la misma correspondencia que los puntos representados. - 15RepasoComprueba el resultado que has creado
Un gráfico tiene un lienzo, un área de trazado y objetos gráficos vinculados a esa área. Comprueba que cada serie conserve los pares de observaciones deseados, que las etiquetas identifiquen las variables y las unidades, y que las correspondencias numéricas de colores tengan una referencia. Cuando un cambio afecte al lugar equivocado, inspecciona qué área de trazado recibió la llamada al método. Cuando una forma parezca incorrecta, inspecciona el orden y las coordenadas de los datos antes de cambiar su estilo.
2Representa datos directamente desde pandas
9 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónDeja que la tabla proporcione el gráfico
- 2ExplicaciónUtiliza las etiquetas de la tabla
- 3EjemploElige columnas numéricas
- 4DesafíoAlinea líneas y barras
- 5ExplicaciónResume antes de dibujar
- 6EjemploElige una estructura para la siguiente biblioteca
- 7DesafíoCorrige un par repetido al convertir a formato ancho
- 8DesafíoResume y reestructura conjuntamente
- 9RepasoComprueba el resultado que has creado
3Crea gráficos estadísticos con seaborn
12 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónInterpreta lo que calcula la función
- 2ExplicaciónAsocia variables con características
- 3EjemploElige quién controla la distribución
- 4DesafíoAdapta la función a la distribución
- 5ExplicaciónInterpreta el estimador de la línea
- 6EjemploConserva cada trayectoria
- 7DesafíoInterpreta una banda estrecha
- 8ExplicaciónCuenta filas o resume valores
- 9EjemploMuestra las observaciones
- 10DesafíoElige el resumen
- 11DesafíoExplica las diferencias entre las barras
- 12RepasoComprueba el resultado que has creado
4Visualiza distribuciones y cuadrículas de valores
12 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónInterpreta con cuidado los datos resumidos
- 2ExplicaciónCuenta correctamente las observaciones de un intervalo
- 3EjemploConvierte un recuento en densidad
- 4DesafíoCompara intervalos de distinta amplitud
- 5ExplicaciónCalcula los límites a partir de la caja
- 6EjemploEncuentra el extremo observado del bigote
- 7DesafíoMira dentro de una caja idéntica
- 8ExplicaciónParte de la cuadrícula numérica
- 9EjemploFija el significado del color
- 10DesafíoDiagnostica tonos coincidentes
- 11DesafíoComprueba dos resúmenes conjuntamente
- 12RepasoComprueba el resultado que has creado
5Crea figuras con varios paneles, añade anotaciones y expórtalas
16 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónPrepara una figura para compartir
- 2ExplicaciónCrea paneles a los que puedas acceder
- 3EjemploRellena la cuadrícula con grupos
- 4DesafíoMantén comparables las escalas
- 5ExplicaciónDeja que seaborn divida la tabla
- 6EjemploPersonaliza la cuadrícula como conjunto
- 7DesafíoCambia la escala compartida con el argumento adecuado
- 8ExplicaciónElige qué ancla el texto
- 9EjemploVincula una etiqueta a un máximo
- 10DesafíoMantén correcta una etiqueta después de filtrar
- 11ExplicaciónElige las dimensiones antes que los píxeles
- 12EjemploGuarda la figura conservada
- 13DesafíoCombina decisiones de distribución y exportación
- 14DesafíoCompleta un proceso por lotes reproducible
- 15ConsejoInspecciona el resultado guardado
- 16RepasoComprueba el resultado que has creado
Ejercicios de Visualización con Matplotlib y Seaborn
Set 1: Interpreta gráficos y comprueba los conceptos básicos10 Preguntas de Práctica
Pregunta 1 de 10
df.plot(y="depth_mm") cuando dibuja un panel?Mostrar respuestaOcultar respuesta
set_ylabel. No devuelve la figura completa; accede a ella mediante el atributo figure del área de trazado cuando necesites guardar la imagen.Pregunta 2 de 10
plt.subplots(2, 3), ¿cómo seleccionas el panel inferior derecho?Mostrar respuestaOcultar respuesta
axes[1, 2]. Utilizar 2 y 3 cuenta desde uno y apunta fuera de los límites de este arreglo.Pregunta 3 de 10
Mostrar respuestaOcultar respuesta
Pregunta 4 de 10
Mostrar respuestaOcultar respuesta
xmax=1, una unidad completa representa el 100 %, por lo que 0,32 se muestra como 32%. Establecer xmax=100 sería adecuado para valores ya almacenados en una escala de 0 a 100; con fracciones etiquetaría 0,32 como 0.32%.Pregunta 5 de 10
Mostrar respuestaOcultar respuesta
errorbar="sd"; tiene una interpretación distinta.Pregunta 6 de 10
Mostrar respuestaOcultar respuesta
Pregunta 7 de 10
Mostrar respuestaOcultar respuesta
catplot para facetas categóricas y pasa sharey=False directamente. A diferencia de relplot y displot, catplot proporciona este argumento a su cuadrícula, por lo que incluirlo también mediante facet_kws produce un error de argumento duplicado. Un solo diagrama de caja a nivel de área de trazado no puede crear facetas mediante col.Pregunta 8 de 10
Mostrar respuestaOcultar respuesta
Pregunta 9 de 10
Mostrar respuestaOcultar respuesta
.0f muestra cero decimales y funciona con medias almacenadas como números de coma flotante. El formato entero d requiere datos enteros y puede producir un error incluso para 26,0. Dar formato al texto mostrado no cambia los valores de la tabla.Pregunta 10 de 10
Mostrar respuestaOcultar respuesta
Set 2: Aplica decisiones de representación a datos nuevos10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
ax.scatter(x, y, s=64), ¿qué especifica 64?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
[0, 5, 10, 15], ¿qué intervalo contiene el valor 5?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
[4, 1, 3] km y elevaciones emparejadas [90, 40, 75] m. ¿Qué orden debe utilizar una línea que avance?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Set 3: Relaciona tablas, resúmenes y gráficos10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
ax.plot(...) en un área de trazado existente?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
fig en una celda. Una celda posterior necesita guardar ese gráfico exacto después de que pyplot haya dejado de mantener su referencia. ¿Qué llamada es fiable?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
plt.title("Depth") después de crear una segunda figura. El título debe pertenecer al área de trazado de la primera figura, almacenada como first_ax. ¿Cómo debe establecerse el título?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
xy y xytext con textcoords="offset points"?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Set 4: Diagnostica ajustes y comparaciones de gráficos10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
mode. ¿Qué produce el número de viajes por medio de transporte?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
height_cm, mass_kg y species. ¿Cómo puede un diagrama de dispersión identificar las especies tanto por color como por forma del marcador?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Set 5: Resuelve problemas de representación y exportación10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
¿Te atascas con una pregunta tuya? Ayuda con Tareas
Términos Clave
Á
Área de trazado
Área del marcador
A
Accesor de gráficos
Agregación
Ancho de banda
Anotación
Arreglo de áreas de trazado
B
Banda de desviación estándar
Barra de colores
Bigote
C
Caja delimitadora ajustada
Codificación por color
Columna numérica
Contenedor de barras
Conversión a formato ancho
Conversión a formato largo
Coordenadas de los datos
Coordenadas del área de trazado
Correspondencia semántica
Cuadrícula de facetas
Cuartil
D
Densidad de probabilidad
Desplazamiento lateral de grupos
Diagrama de dispersión
Diagrama de enjambre
Diagrama de puntos por categorías
Diagrama de violín
Distribución con restricciones
Distribución de facetas en varias filas
E
Eje
Eje compartido
Escala logarítmica
Escala original de los datos
Estimación de densidad por núcleos
Estimador
F
Faceta
Figura
Formateador de etiquetas de graduación
Formato ancho
Formato largo
Función a nivel de área de trazado
Función a nivel de figura
Función de distribución empírica acumulada
G
Gráfico de barras agrupadas
Gráfico de barras apiladas
Gráfico de frecuencias absolutas
Gráfico de líneas
Gráfico vectorial
Gráficos múltiples en pequeños paneles
H
Histograma
Hoja de estilos
I
Imagen de mapa de bits
Interfaz orientada a objetos
Intervalo de confianza
Í
Índice
Índice de fechas y horas
L
Límite de clase
Límite de detección de valores atípicos
Límites de la escala de colores
Línea de base
Línea de referencia
M
Mapa de calor
Mapa de colores divergente
Mapa de colores secuencial
Marca de graduación
Matriz de correlaciones
Matriz de gráficos por pares
Mosaico de subgráficos
N
Normalización por filas
O
Objeto gráfico
P
Punto atípico fuera de los bigotes
Puntos por pulgada
R
Rango intercuartílico
Recta de regresión
Referencia a una figura
Relación de aspecto
S
Superposición de puntos o marcas
T
Tema
Sobre esta unidad
Crea tus propios Materiales de Estudio
Convierte tus notas, diapositivas y documentos en Guías de Estudio, Preguntas de Práctica, Flashcards y 6 herramientas más.