En el proyecto del primer módulo trabajamos con gráficos utilizando el módulo matplotlib
, lo cual representa un primer encuentro con este módulo de Python. Ahora, parece obvia la necesidad de trabajar con gráficos una vez que hemos abordado los temas sobre los DataFrames, con lo cual conseguiremos información valiosa sobre nuestros datos visualizando gráficas.
Comencemos trabajando con el siguiente DataFrame
# Importamos los módulos necesarios
import random
import pandas as pd
# -------------------------------------------------------------------------------
# Creamos el diccionario
dict1 = {
# generamos una lista con los enteros del 1 al 27
'Índice': [i for i in range(1,28)],
'Letra': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
'M', 'N', 'Ñ', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
'Y', 'Z'],
# generamos una lista con números enteros aleatoriamente tomados del 1 al 11
# sumados a números tomados aleatoriamente del intervalo de números
# reales [0, 1)
'Frecuencia': [random.randint(1,11) + random.random() for i in range(0,27)]
}
# Creamos el DataFrame
d0 = pd.DataFrame(dict1)
# Modificamos el índice por defecto
d0.index = dict1['Índice']
# Omitimos la columna índice para evitar la redundancia
d1 = d0.loc[:, ['Letra', 'Frecuencia']]
d1
Letra | Frecuencia | |
---|---|---|
1 | A | 5.510506 |
2 | B | 3.023103 |
3 | C | 7.572313 |
4 | D | 6.815824 |
5 | E | 10.045809 |
6 | F | 2.713654 |
7 | G | 5.932424 |
8 | H | 1.903136 |
9 | I | 9.925171 |
10 | J | 3.637377 |
11 | K | 10.646375 |
12 | L | 11.936584 |
13 | M | 1.894791 |
14 | N | 4.966091 |
15 | Ñ | 1.567880 |
16 | O | 8.054657 |
17 | P | 4.699587 |
18 | Q | 3.201972 |
19 | R | 8.174890 |
20 | S | 6.015329 |
21 | T | 6.488306 |
22 | U | 11.562651 |
23 | V | 5.759587 |
24 | W | 6.120109 |
25 | X | 11.687305 |
26 | Y | 2.605731 |
27 | Z | 2.146040 |
Dentro del plano cartesiano graficaremos una serie de puntos y los conectaremos mediante líneas. Al gráfico resultante se le conoce como gráfica de líneas. Así, con la información de nuestro DataFrame buscaremos crear un Gráfico de líneas, donde el eje $x$ estará representado por las letras del alfabeto y el eje $y$ la su respectiva frecuencia.
Para ello utilizaremos plt.plot()
para crear la gráfica colocando como parámetros los valores correspondientes al eje $x$ y después los valores correspondientes al eje $y$. Recordemos que podemos acceder a los valores de una columna de un DataFrame usando d1['Nombre_de_la_columna']
, por lo que d1['Letra']
serán los valores que asignemos al eje $x$ y d1['Frecuencia']
los valores que asignemos al eje $y$. Esto es
# Realizamos la importanción necesaria
import matplotlib.pyplot as plt
# Creamos el gráfico
plt.plot(d1['Letra'], d1['Frecuencia'])
# Mostramos el gráfico
plt.show()
Aunque sabemos bien todo lo relacionado al gráfico anterior, debemos asegurarnos que la información o los gráficos puedan ser entendidos por más personas, y no sólo nosotros que hemos escrito el código. Por ende es necesario imprimir, al menos, en nuestro gráfico información clave que ayude a entenderlo mejor. Por ejemplo, podemos ponerle nombre a los ejes coordenados utilizando plt.xlabel()
o plt.ylabel()
como sigue
# Configuramos la etiqueta del eje x
plt.xlabel('Letras')
# Configuramos la etiqueta del eje y
plt.ylabel('Frecuencia')
# De manera similar podemos añadir un título
plt.title('Frecuencia de las letras')
# mostramos el gráfico
plt.plot(d1['Letra'], d1['Frecuencia'])
plt.show()
Por otro lado, podemos agregar más de un gráfico a nuestras gráficas, por ejemplo podemos agregar otra frecuencia obtenida de algunas letras del siguiente DataFrame
# Creamos el diccionario
dict2 = {
# generamos una lista con los enteros del 1 al 27
'Índice': [i for i in range(1,28)],
'Letra': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
'M', 'N', 'Ñ', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
'Y', 'Z'],
# generamos una lista con números enteros aleatoriamente tomados del 1 al 11
# sumados a números tomados aleatoriamente del intervalo de números
# reales [0, 1)
'Frecuencia': [random.randint(5,15) + random.random() for i in range(0,27)]
}
# Creamos el DataFrame
dat0 = pd.DataFrame(dict2)
# Modificamos el índice por defecto
dat0.index = dict2['Índice']
# Omitimos la columna índice para evitar la redundancia
d2 = dat0.loc[:, ['Letra', 'Frecuencia']]
luego, podemos mostrar los gráficos correspondientes a los dos DataFrames como sigue
# Configuramos la etiqueta del eje x
plt.xlabel('Letras')
# Configuramos la etiqueta del eje y
plt.ylabel('Frecuencia')
# De manera similar podemos añadir un título
plt.title('Frecuencia de las letras')
#------------------------------------------------------------
# Frecuencias del primer DataFrame
plt.plot(d1['Letra'], d1['Frecuencia'])
# Frecuenicia del segundo DataFrame
plt.plot(d2['Letra'], d2['Frecuencia'])
# Vemos la gráfica
plt.show()
donde Python en automático cambia el color de los gráficos para poder distinguirlos. Ahora, de acuerdo a la gráfica anterior podemos ver que no es claro qué gráfico corresponde a cada DataDrame, por ello es que recurrimos al uso de las legendas. Para ello modificamos el código anterior escribiendo
# Configuramos la etiqueta del eje x
plt.xlabel('Letras')
# Configuramos la etiqueta del eje y
plt.ylabel('Frecuencia')
# De manera similar podemos añadir un título
plt.title('Frecuencia de las letras')
#------------------------------------------------------------
# Frecuencias del primer DataFrame, agregamos label='DataFrame 1'
plt.plot(d1.Letra, d1['Frecuencia'], label='DataFrame 1')
# Frecuenicia del segundo DataFrame, agregamos label='DataFrame 2'
plt.plot(d2.Letra, d2['Frecuencia'], label='DataFrame 2')
# Vemos las legendas
plt.legend()
# Vemos la gráfica
plt.show()
Asimismo, podemos agregar texto arbitrario dentro de nuestra gráfica valiéndonos de coordenadas y escribiendo plt.text(coord_x, coord_y, texto)
. Por ejemplo
# Configuramos la etiqueta del eje x
plt.xlabel('Letras')
# Configuramos la etiqueta del eje y
plt.ylabel('Frecuencia')
# De manera similar podemos añadir un título
plt.title('Frecuencia de las letras')
#------------------------------------------------------------
plt.text(5,9, 'Hola', color='red')
plt.text(13,9, '¿Qué hace?', color='red')
#------------------------------------------------------------
# Creamos la gráfica
plt.plot(d1['Letra'], d1['Frecuencia'])
# Vemos la gráfica
plt.show()
donde podemos notar cómo hemos cambiando el color de la letra utilizando color='red'
. Podemos modificar el texto cambiando el tamaño de la letra y la fuente
# Modificando el tamaño de la letra utilizando fontsize
# * Configuramos la etiqueta del eje x y eje y
plt.xlabel('Letras', fontsize=17)
plt.ylabel('Frecuencia', fontsize=17)
# * Título
plt.title('Frecuencia de las letras', fontsize=20)
#------------------------------------------------------------
# Modificando el color
# Texto arbitrario
plt.text(5,9, 'Hola', color='red')
#------------------------------------------------------------
# Modificando la fuente del texto utilizando fontfamily
plt.text(12,9, '¿Qué hace?', fontfamily='Arial', fontsize=17)
#------------------------------------------------------------
# Creamos la gráfica
plt.plot(d1['Letra'], d1['Frecuencia'])
# Vemos la gráfica
plt.show()