Want to make creations as awesome as this one?

Transcript

Anotaciones de texto en las gráficas

Cuando generamos gráficas, tanto Matplotlib, como Pandas y Seaborn, nos permiten manipular algunos elementos textuales por medio de las propiedades de ploteo; por ejemplo: las etiquetas en los ejes, el título del gráfico y las leyendas para las series. No obstante, se presentarán casos en los que sea necesario incorporar otras anotaciones para enfatizar o precisar ciertos elementos.

En los siguientes subtemas aprenderás cómo lograr lo anterior ingresando textos en el área de trazado e incorporando los datos numéricos que describen el comportamiento del gráfico en formato de tabla.

1

2

La inclusión de texto, sin referencia a una propiedad en particular del gráfico, es posible mediante la especificación de las coordenadas de ubicación del mismo. Esto permite incrementar la expresividad de la representación al resaltar zonas o dirigir la atención de los receptores a ciertos resultados.

Hay muchas propiedades del texto que pueden ser personalizadas. El siguiente código muestra algunas de ellas, pero puedes consultar la lista completa en https://matplotlib.org/3.3.4/tutorials/text/text_props.html

Tanto Pandas como Seaborn, utilizan la función text de matplotlib para incluir texto en sus gráficos, por lo que aplicaría todo lo anterior para ambas interfaces de trazado.

1. Texto en coordenadas

Texto con Pandas y Seaborn

Reflexiona

La función text de matplotlib recibe como parámetros la posición y la cadena de texto a escibir. Para ejemplificar su uso, leeremos en un dataframe (languages) el contenido del archivo world_table_language.csv y crearemos a partir de él, otro dataframe con el resultado de filtrar sobre el código del país (MEX) y dejaremos sólo dos columnas para que el código que escribe el texto resulte más legible. languagesMEX = languages.loc[languages['CountryCode'] == 'MEX', ['Language','Percentage']] languagesMEX.set_index('Language', inplace=True) Incluiremos en la gráfica del dataframe obtenido, el porcentaje de personas que hablan español en México (92.1%) plt.plot(languagesMEX) plt.text(3,92.1,'92.1%') Observe del código anterior que por defecto las coordenadas donde se ubica el texto están especificadas en coordenadas de datos: 3 en el eje horizontal porque Spanish está en la posición 3 (la serie inicia en 0) y 92.1 en el eje vertical, que se corresponde al porcentaje que queremos representar.

plt.plot(languagesMEX) plt.text(3,92.1,'92.1%', family='serif', fontsize=18, fontweight='bold', style='italic', color='red', horizontalalignment='center') El texto también puede resaltarse a través de un objeto bbox, que posee entre sus propiedades nivel de transparencia (alpha) y el espacio entre el contenido y el borde del elemento (pad) plt.plot(languagesMEX) plt.text(3,92.1,'92.1%', bbox=dict(facecolor='red', alpha=0.3, pad=5)) Para incluir los valores de todas las lenguas, es necesario hacer un recorrido por las filas del dataframe con un ciclo y extraer el porcentaje de cada lengua (languageMEX.iloc[i,0]) plt.plot(languagesMEX) for i in range(languagesMEX.shape[0]): plt.text(i,languagesMEX.iloc[i,0],str(languagesMEX.iloc[i,0])+'%')

El detalle de la información numérica que describe el comportamiento de una serie en una gráfica puede ser un factor importante en algunas ocasiones, pero su cantidad y complejidad puede rebasar la capacidad en el área de trazado que ocupa la función text. Es en estos casos cuando se recomienda incluir dicha información en formato tabular bajo el eje de coordenadas horizontal.

Lo anterior se facilita si se llama a la función plot desde la envoltura de Pandas, pues ésta posee un parámetro table para incluir la tabla de datos y los parámetros xticks y xlabel para ocultar los valores del eje x

La envoltura de Seaborn para lineplot, no posee parámetro que permita incluir una tabla de manera directa, por tanto se utiliza la función table de matplotlib.

2. Trazado de tablas

Tablas con Pandas

Tablas con Seaborn

Reflexiona

Retomando el dataframe languagesMEX, veamos cómo poner los valores en una tabla, en lugar de incluirlos como texto dentro de la gráfica. La función table de matplotlib recibe como parámetros el contenido para colocar en las celdas y los encabezados de la tabla. Sin embargo, el formato del dataframe, debe coincidir con la forma que adquirirá la tabla. Como en nuestro dataframe languagesMEX las filas y columnas están invertidas, aplicamos la transpuesta antes de ejecutar la función table. plt.plot(languagesMEX) plt.tick_params(labelbottom=False) languagesMEX_T = languagesMEX.T plt.table(cellText=languagesMEX_T.values, colLabels=languagesMEX_T.columns) Puedes revisar el resto de los parámetros de la función table en https://matplotlib.org/3.3.4/api/_as_gen/matplotlib.pyplot.table.html

languagesMEX.plot(table=True, xticks=[], xlabel='')