Sección 3.3

Gráficos de barras

El método plot de Pandas tiene un parámetro kind que nos ayuda a cambiar el tipo de gráfico que queremos dibujar. Vamos a ver algunos de los tipos de gráficos que podemos dibujar haciendo uso de este método con Pandas. Comenzaremos por los gráficos de barras.

Para representar los datos mediante diagramas de barras, solo es necesario indicar que el tipo de gráfico que queremos dibujar es de tipo bar. Esto lo haremos mediante el parámetro kind='bar'.

Vamos a hacer un ejemplo usando los datos del número de medallas de distintos países en los Juegos Olímpicos. El dataset contiene información del número de medallas de oro, plata y bronce de cada país. Además, los datos están ordenados por el número de medallas de oro.

In [1]:
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

df = pd.read_csv("../data/medals.csv", index_col="Country")

# Nos quedamos con los 10 primeros países (están por orden de número de medallas de oro)
muestra = df[:10].copy()
muestra
Out[1]:
GoldMedals SilverMedals BronzeMedals
Country
USA 2235 1252 1098
URS 838 627 584
GBR 546 621 553
ITA 476 416 404
GER 452 378 475
HUN 412 316 351
FRA 408 491 497
SWE 349 367 328
GDR 329 271 225
AUS 312 405 472
In [2]:
muestra.plot(kind = 'bar')
Out[2]:
<matplotlib.axes._subplots.AxesSubplot at 0x10df9ce80>
Cada vez que dibujamos un gráfico aparece antes de dicho gráfico un texto que indica lo que nos ha devuelto la última instrucción ejecutada. Para evitar que aparezca esto, escribiremos un punto y coma (;) al final de la última instrucción.
In [3]:
muestra.plot(kind = 'bar'); # Observa que hemos añadido ;

Como podemos observar, cada barra representa el valor de una columna del DataFrame. Además, los valores de cada una de las filas se agrupan produciendo un grupo de barras por cada uno de los países (que son el índice del DataFrame). Si no hay valores en una celda entonces no se dibuja la barra.

Podemos crear un diagrama de barras horizontales en lugar de un diagrama de barras verticales:

In [4]:
muestra.plot(kind = 'barh');

El grosor de las barras se calcula de manera automática. Sin embargo, podemos modificarlo usando el parámetro width. Se suele utilizar un valor entre 0 y 1 que indica cuál es el porcentaje de tamaño de cada grupo de barras con respecto al tamaño total que pueden ocupar. Por defecto, el valor es 0.5, lo que deja un gran espacio entre los grupos de barras. Podemos ver cómo queda con otros valores:

In [5]:
muestra.plot(kind = 'barh', width=1) # Cada grupo de barras ocupa todo el espacio que tiene asignado
Out[5]:
<matplotlib.axes._subplots.AxesSubplot at 0x10e328d68>
In [6]:
muestra.plot(kind = 'barh', width=0.8); # Generamos un pequeño espacio entre los grupos de barras

El parámetro stacked permite crear gráficos de barras apiladas. Además, podemos establecer cierto nivel de transparencia a los colores de las barras con el parámetro alpha, que toma valores entre 0 y 1, donde 0 representa un color completamente transparente y 1, un color completamente opaco:

In [7]:
muestra.plot(kind = 'bar', 
             stacked = 'True',          # Muestra las barras apiladas
             alpha = 0.4,               # nivel de transparencia
             width = 0.9,               # Grosor de las barras para dejar espacio entre ellas
             figsize=(9,4));            # Cambiamos el tamaño de la figura

Si queremos mostrar más de un gráfico de barras simultáneamente tendremos que crear una figura con múltiples paneles, cada uno de los cuales contiene un gráfico diferente. Esto lo realizaremos utilizando el parámetro subplots. Si establecemos este parámetro con valor True entonces dibujaremos un gráfico por cada una de las columnas de la tabla.

Si, por ejemplo, queremos mostrar un gráfico de barras por cada uno de los tipos de medallas escribiremos lo siguiente:

In [8]:
muestra.plot(kind = 'bar',
             width=0.8,
             subplots=True,
             figsize=(10,20));

Finalmente, podemos indicar qué colores queremos usar para cada serie mediante el parámetro color. Este parámetro puede recibir una lista de colores, codificados como veremos en el tema sobre estilos y colores en Matplotlib

In [9]:
# Colores (en HEX) para oro, plata y bronce, respectivamente
coloresMedallas = ['#FFD700','#C0C0C0','#8C7853']

muestra.plot(kind = 'bar',
             width=0.8,
             figsize=(10,4),
             color = coloresMedallas);