Consejos de Matplotlib para mejorar instantáneamente tus visualizaciones de datos – Según Storytelling with Data

Tips from Storytelling with Data to instantly improve your data visualizations using Matplotlib.

Recreando lecciones aprendidas del libro de Cole Nussbaumer Knaflic en Python usando Matplotlib

Tener la habilidad de comunicar efectivamente con datos es una habilidad relevante para cualquier persona que trabaje con datos, y no solo para científicos de datos y analistas de datos.

Uno de mis libros favoritos sobre este tema es “Storytelling with Data” de Cole Nussbaumer Knaflic. Está lleno de ejemplos prácticos de cómo mejorar tus visualizaciones de datos.

Storytelling with Data: Una guía de visualización de datos para profesionales de negocios

Storytelling with Data: Una guía de visualización de datos para profesionales de negocios [Nussbaumer Knaflic, Cole] en Amazon.com…

www.amazon.com

El único aspecto desafortunado del libro, en mi opinión, es que sus ejemplos se crean usando Microsoft Excel.

Levanta la mano si conoces a un ingeniero que le gusta crear visualizaciones de datos en Excel – Sí, yo tampoco.

“Podrías ser un ingeniero, pero no debería ser necesario tener una licenciatura en ingeniería para entender tu gráfico” – Cole Nussbaumer Knaflic en “Storytelling with Data”

Por eso, este artículo cubrirá los fragmentos de código de Matplotlib que he utilizado más desde que leí “Storytelling with Data” de Nussbaumer Knaflic.

import matplotlib.pyplot as plt

Este artículo asume que ya conoces los conceptos básicos de las visualizaciones de datos con Matplotlib y Seaborn, como crear diagramas de barras, diagramas de líneas o diagramas de dispersión, modificar paletas de colores y agregar etiquetas fundamentales. Este artículo también asume que eres consciente de cuándo usar cada tipo de gráfico.

En lugar de cubrir los conceptos básicos de Matplotlib, este artículo se centra en trucos menos conocidos, como:

  • Cómo eliminar el borde superior y derecho de un gráfico de Matplotlib
  • Cómo eliminar las marcas de graduación en un gráfico de Matplotlib
  • Cómo personalizar los colores individuales de las barras en un gráfico de Matplotlib
  • Cómo cambiar el color del eje x e y en un gráfico de Matplotlib
  • Cómo agregar anotaciones de texto a un gráfico de Matplotlib
  • Cómo agregar valores a un gráfico de barras en un gráfico de Matplotlib
  • Cómo hacer que todo o parte del texto sea negrita en la anotación de Matplotlib
  • Cómo colorear el texto en la anotación de Matplotlib

Comencemos con un ejemplo simple. Los siguientes datos son ficticios para que podamos centrarnos en las técnicas de visualización de datos:

import pandas as pd# Definir un dataframe con datos ficticiosdf = pd.DataFrame(          {'feature 1' : ['cat 1', 'cat 2', 'cat 3', 'cat 4'],           'feature 2' : [400, 300, 200, 100]          })

Creemos un gráfico de barras monocromático simple usando Seaborn con un título como punto de partida:

import seaborn as sns# Crear un gráfico de barras básico a partir del dataframe de ejemplofig, ax = plt.subplots(1,1, figsize = (6, 4))sns.barplot(data =  df,             x = 'feature 1',             y = 'feature 2',             color = 'tan')# Agregar títulosax.set_title('Título significativo')plt.show()

Eliminar el desorden

En el capítulo “¡El desorden es tu enemigo!” Nussbaumer Knaflic habla sobre cómo identificar y eliminar el desorden visual de tu visualización de datos – esta sección te mostrará cómo quitar el desorden visual en los gráficos de Matplotlib.

“[…] cada elemento agrega carga cognitiva por parte de tu audiencia.” – Cole Nussbaumer Knaflic en “Storytelling with Data”

Cómo eliminar el borde superior y derecho de una gráfica de Matplotlib

Por defecto, las gráficas de Matplotlib tienen una caja de llamadas “espinas” alrededor de los bordes de la figura. Especialmente las espinas superiores y derechas pueden desordenar la visualización de los datos y, por lo tanto, deben ser removidas.

Simplemente puedes remover las espinas irrelevantes con el siguiente fragmento de código:

# Remover espinas superiores y derechasax.spines['right'].set_visible(False)ax.spines['top'].set_visible(False)

Usa 'bottom' y 'left' si quieres remover las otras espinas también. Y si quieres remover el borde, incluyendo todo el eje x e y, puedes usar ax.axis('off').

Cómo eliminar ticks de una gráfica de Matplotlib

Los ticks usualmente no se consideran desorden. Pero en algunos casos, como en este ejemplo, los ticks del eje x de un gráfico de barras son redundantes.

# Remover ticks en el eje xax.tick_params(bottom = False)

Usa left = False si quieres remover los ticks del eje y también.

Ahora, el ejemplo con el desorden removido se ve así:

Antes y después de remover el desorden en una gráfica de Matplotlib.

¿No te da una sensación mucho más tranquila la nueva gráfica debido a la eliminación del desorden visual?

Des-énfasis

En el capítulo “Piensa como un diseñador”, Nussbaumer Knaflic nos muestra cómo silenciar información necesaria pero relevante. Esta sección te muestra cómo cambiar los colores de partes menos importantes de una gráfica de Matplotlib.

“Manda los elementos necesarios pero que no impactan en el mensaje al fondo. […] El gris claro funciona bien para esto.” – Cole Nussbaumer Knaflic en “Storytelling with Data”

Cómo personalizar los colores individuales de barras en una gráfica de Matplotlib

Reemplaza el parámetro color del método sns.barplot con el parámetro palette para controlar el color de cada barra. Al hacer esto, puedes usar gris claro para des-énfasis en barras menos importantes y sólo resaltar la barra relevante con el color principal.

# Definir colores de barras individualescustom_colors = ['lightgrey', 'tan', 'lightgrey', 'lightgrey']# Des-énfasis en barras menos importantessns.barplot(data =  df,             x = 'feature 1',             y = 'feature 2',             palette = custom_colors) 

Cómo cambiar el color del eje x e y en una gráfica de Matplotlib

A continuación, también queremos silenciar los colores del eje x e y. Para hacerlo, necesitamos silenciar el color de la “espina” del eje, los ticks y las etiquetas:

# Silenciar colores de las espinasax.spines['left'].set_color('grey')   ax.spines['bottom'].set_color('grey')# Silenciar colores de los ticksax.tick_params(colors = 'grey')# Silenciar colores de las etiquetasax.set_xlabel('feature 1', color = 'grey')ax.set_ylabel('feature 2', color = 'grey')

Ahora, el ejemplo con información menos importante des-énfasis se ve así:

Antes y después de des-énfasis en información menos importante en una gráfica de Matplotlib.

El Texto Es Tu Amigo: Agregando Anotaciones

Nussbaumer Knaflic destaca que deberías agregar texto a tus visualizaciones de datos para resaltar los puntos clave. En esta sección, veremos el método ax.annotate() para agregar texto en las gráficas de Matplotlib.

“Si hay una conclusión a la que quieras que tu audiencia llegue, dilo con palabras.” — Cole Nussbaumer Knaflic en “Storytelling with Data”

Cómo agregar anotaciones de texto a una gráfica de Matplotlib

Para agregar texto a una figura de Matplotlib, puedes utilizar el método ax.annotate(), el cual toma el texto y su ubicación en la gráfica como argumentos. Además, puedes especificar aspectos como la alineación horizontal (ha) o vertical (va) o el tamaño de fuente.

# Agregar anotaciones de textoax.annotate('¡Mira "gato 2". \nEsto es importante!',             xy = (1.5, 360),               ha = 'center',              fontsize = 11,           )

Si deseas tener una flecha adicional para señalar algo, necesitas utilizar los siguientes parámetros:

  • xy: el punto a anotar, es decir, hacia donde apuntará tu flecha
  • xytext: dónde colocar el texto (y donde terminará la flecha)
  • arrowprops = {'arrowstyle' : '->'}: cómo debe verse la flecha

Cómo agregar valores a un gráfico de barras en una gráfica de Matplotlib

Para agregar el valor a cada barra individual, necesitamos iterar sobre ax.patches. Para cada barra, puedes utilizar los métodos get_height(), get_width() y get_x() para colocar el valor encima de la barra.

# Anotar gráfico de barras con valoresfor bar in ax.patches:    ax.annotate(int(bar.get_height()),                xy = (bar.get_x() + bar.get_width() / 2, bar.get_height()),                 ha = 'center',                 va = 'center',                xytext = (0, 8),                textcoords = 'offset points'                )

Ahora, el ejemplo con anotaciones de texto agregadas se ve así:

Antes y después de agregar anotaciones de texto en la gráfica de Matplotlib.

Enfatizar

En el capítulo “Enfoca la atención de tu audiencia”, Nussbaumer Knaflic habla sobre cómo aprovechar los atributos preatentivos para guiar la atención de tu audiencia hacia lo que deseas que vean. En esta sección, discutiremos algunos ajustes simples que puedes aplicar a las anotaciones de texto en las gráficas de Matplotlib para aprovechar los atributos preatentivos en el texto.

“[…] si usamos atributos preatentivos estratégicamente, nos pueden ayudar a permitir que nuestra audiencia vea lo que queremos que vean antes de que siquiera sepan que lo están viendo.” — Cole Nussbaumer Knaflic en “Storytelling with Data”

Cómo hacer que todo o partes del texto estén en negrita en la anotación de Matplotlib

Usar texto en negrita puede ayudar a resaltar partes importantes de tu visualización de datos. Si quieres resaltar solo una parte de tu anotación, puedes usar $\\bf{}$ en tu cadena y colocar el texto a enfatizar entre las llaves. Si deseas resaltar toda la anotación, simplemente agrega el parámetro fontweight = 'bold'.

# Hacer que solo una parte del texto esté en negritaax.annotate('¡Mira "gato 2". \nEsto es $\\bf{importante}$!',             #...           )# Hacer que todo el texto esté en negritaax.annotate('¡Mira "gato 2". \nEsto es importante!',             #...            fontweight='bold',           )

Cómo cambiar el color del texto en la anotación de Matplotlib

Para asociar textos específicos con elementos específicos en la visualización de datos, puede aprovechar la asociación por el mismo color. Para darle color a la anotación de texto, simplemente agregue el parámetro color al método ax.annotate().

# Eliminar las marcas en el eje xax.tick_params(bottom = False)# Agregar una conclusión importante a la gráficaax.annotate('¡Mire "gato 2". \nEsto es $\\bf{importante}$!', # Hacer énfasis en términos importantes            xy = (1.5, 360),             ha = 'center',            color = 'tan',             fontsize = 11,           )

Ahora, el ejemplo con información importante destacada se ve de la siguiente manera:

Antes y después de enfatizar información importante en la gráfica de Matplotlib.

Resumen

A continuación, puede ver la diferencia que hacen estos pequeños trucos de Matplotlib en la visualización de datos. Simplemente eliminando el desorden, agregando anotaciones de texto, y desenfatizando información menos importante y en su lugar, enfatizando información importante, puede ver instantáneamente una gran diferencia en la legibilidad de la visualización de datos de ejemplo.

Antes y después de aplicar información importante en la gráfica de Matplotlib.

A continuación, puede ver el código que crea la visualización final de datos.

import matplotlib.pyplot as pltimport seaborn as sns# Definir la paleta de coloreshighlight_color = 'tan'muted_color = 'dimgrey'muted_color2 = 'lightgrey'custom_colors = [muted_color2, 'tan', muted_color2, muted_color2]# Crear un gráfico de barras básico a partir del marco de datos de ejemplofig, ax = plt.subplots(1,1, figsize = (6, 4))sns.barplot(data =  df,             x = 'característica 1',             y = 'característica 2',             palette = custom_colors) # Desenfatizar barras menos importantes# Agregar títuloax.set_title('Título significativo')# Desvanecer los colores de las etiquetasax.set_xlabel('característica 1', color = muted_color)ax.set_ylabel('característica 2', color = muted_color)# Quitar las espinas no importantes y desvanecer el color de las espinas restantesax.spines['right'].set_visible(False)      # Quitar las espinas superior y derechaax.spines['top'].set_visible(False)        # Quitar las espinas superior y derecha ax.spines['left'].set_color(muted_color)   # Desvanecer los colores de las espinasax.spines['bottom'].set_color(muted_color) # Desvanecer los colores de las espinas# Quitar las marcas en el eje x y desvanecer los colores de las marcasax.tick_params(bottom = False,        # Quitar las marcas en el eje x    colors = muted_color,             # Desvanecer los colores de las marcas)# Anotar gráfico de barras con valoresfor i, bar in enumerate(ax.patches):    ax.annotate(int(bar.get_height()),    xy = (bar.get_x() + bar.get_width() / 2, bar.get_height()),     ha = 'center',     va = 'center',    xytext = (0, 8),    textcoords = 'offset points',    color = custom_colors[i])# Agregar una conclusión importante a la gráficaax.annotate('¡Mire "gato 2". \nEsto es $\\bf{importante}$!', # Hacer énfasis en términos importantes            xy = (1.5, 360),             ha = 'center',            color = highlight_color,             fontsize = 11,           )     plt.show()

“Storytelling with Data” de Cole Nussbaumer Knaflic es uno de mis libros favoritos sobre visualizaciones de datos. Si está interesado en cómo llevar sus visualizaciones de datos al siguiente nivel, definitivamente recomiendo este libro.

Si está interesado en más trucos de Matplotlib, en este repositorio, Andre Gaskov ha recreado muchas visualizaciones del libro en Python utilizando Matplotlib:

GitHub – empathy87/storytelling-with-data: Gráficas del libro “Storytelling with data”…

Gráficos del libro “Storytelling with data” implementación con Python y matplotlib – GitHub…

github.com

¿Disfrutó de esta historia?

Suscríbase gratis para ser notificado cuando publique una nueva historia.

¿Quiere leer más de 3 historias gratis al mes? — Conviértase en miembro de Zepes por 5 $/mes. Puede apoyarme utilizando mi enlace de referencia cuando se registre. Recibiré una comisión sin costo adicional para usted.

Como miembro de Zepes, una parte de su cuota de membresía va a los escritores que lee, y obtiene acceso completo a cada historia…

Zepes.com

¡Encuéntrame en LinkedIn, Twitter y Kaggle!

Referencias

Referencias de imagen

Si no se indica lo contrario, todas las imágenes son creadas por el autor.

Literatura y Web

Knaflic, Cole. Storytelling With Data: A Data Visualization Guide for Business Professionals, Wiley, © 2015.

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

Investigadores del MIT presentan LILO un marco neuro-simbólico para aprender bibliotecas interpretables para la síntesis de programas

Los grandes modelos de lenguaje (LLMs) se están volviendo cada vez más expertos en programación en varios contextos, ...

Inteligencia Artificial

Cómo usar Langchain? Guía paso a paso

LangChain es un marco de inteligencia artificial diseñado para programadores que deseen desarrollar aplicaciones util...

Inteligencia Artificial

6 Visualizaciones Avanzadas en Tableau

Tableau es una herramienta de visualización de datos utilizada para crear visualizaciones de datos, paneles y relatos...

Inteligencia Artificial

Cómo las industrias están cumpliendo las expectativas de los consumidores con la IA de voz

Gracias a los rápidos avances tecnológicos, los consumidores se han acostumbrado a un nivel sin precedentes de comodi...

Inteligencia Artificial

Monitoreo de datos no estructurados para LLM y NLP

Una vez que implementas una solución basada en NLP o LLM, necesitas una forma de controlarla. Pero ¿cómo monitoreas l...