Está en la página 1de 15

Tutorial: Creación de gráficas en Python

usando matplotlib
Python es un lenguaje de programación que cuenta con múltiples librerías o módulos para
realizar distintos procesos.

Ya sea en el ámbito laboral o académico a veces es necesario mostrar información o datos


de una manera mas entendible para otras personas, con ello hacemos uso de las gráficas.

En Python contamos principalmente con la librería matplotlib, con la cual podemos realizar
múltiples tipos de gráficas de una manera sencilla y con pocas lineas de código.

Si no la tienes instalada, puedes hacerlo con el siguiente comando ‘pip install matplotlib’ o
‘pip3 install matplotlib’

Para empezar a realizar los gráficos, necesitamos importar las librerías necesarias:

import matplotlib
import matplotlib.pyplot as plt
import numpy as np

1 import matplotlib
2 import matplotlib.pyplot as plt
3 import numpy as np

Estas librerías las usaremos en todos los ejemplos, así que recomiendo tenerlas siempre
presentes.

Grafica de Barras simple


En las gráficas de barras, buscamos siempre representar cantidades en función a valores,
por ejemplo la cantidad de hombres o mujeres en cierto día, cantidad de ventas, etc…

Para crear gráficas de barras en matplotlib, hacemos uso de la función ‘bar’, con la cual
señalamos que la gráfica final debe ser una gráfica de barras.

Lo primero que debe realizarse es definir listas o conjuntos de valores a representar en la


gráfica, en este caso se definen dos listas, una para representar ‘países’ y otra para
representar ‘ventas’

Atención: En estos casos tanto la lista ‘países’ y ‘ventas’ deben contener la misma cantidad
de valores, en caso contrario ocurrirá un error
#Definimos una lista con paises
paises = ['Estados Unidos', 'Esp
#Definimos una lista con ventas
ventas = [25, 32, 34, 20, 25]

1 #Definimos una lista con paises como string


2 paises = ['Estados Unidos', 'España', 'Mexico', 'Rusia', 'Japon']
3 #Definimos una lista con ventas como entero
4 ventas = [25, 32, 34, 20, 25]

Recuperamos un par de valores de la función ‘subplots’, esto nos ayudara a añadir diversas
características a la gráfica.

Podemos añadir ‘etiquetas’ a la gráfica, esto ayuda a entender mejor los valores incluidos,
esto lo hacemos en base a las funciones ‘set_xlabel’ o ‘set_ylabel’ para añadir etiquetas en
los ejes X o Y, y ‘set_title’ para añadir un titulo al gráfico.

fig, ax = plt.subplots()
#Colocamos una etiqueta en el e
ax.set_ylabel('Ventas')
#Colocamos una etiqueta en el e

1 fig, ax = plt.subplots()
2 #Colocamos una etiqueta en el eje Y
3 ax.set_ylabel('Ventas')
4 #Colocamos una etiqueta en el eje X
5 ax.set_title('Cantidad de Ventas por Pais')

Finalmente, construimos la gráfica usando los valores de ‘paises’ y ‘ventas’ como el eje X
y Y, esto se realiza con el método ‘bar’ que recibe como parámetros los valores antes
mencionados. Mostramos la gráfica con el método ‘show’. El código completo queda a
continuación y la gráfica resultante:

import matplotlib
import matplotlib.pyplot as plt
import numpy as np

1 import matplotlib
2 import matplotlib.pyplot as plt
3 import numpy as np
4
5 #Definimos una lista con paises como string
6 paises = ['Estados Unidos', 'España', 'Mexico', 'Rusia', 'Japon']
7 #Definimos una lista con ventas como entero
8 ventas = [25, 32, 34, 20, 25]
9
10 fig, ax = plt.subplots()
11 #Colocamos una etiqueta en el eje Y
12 ax.set_ylabel('Ventas')
13 #Colocamos una etiqueta en el eje X
14 ax.set_title('Cantidad de Ventas por Pais')
15 #Creamos la grafica de barras utilizando 'paises' como eje X y 'ventas' como eje y.
16 plt.bar(paises, ventas)
17 plt.savefig('barras_simple.png')
18 #Finalmente mostramos la grafica con el metodo show()
19 plt.show()

Grafica de barras simple

Grafica de Barras Horizontal


Una gráfica de barras horizontal, es similar a la de barras, a excepción de que las barras
están orientadas de manera horizontal y los valores de X y Y están intercalados. Para este
ejemplo buscaremos mostrar en una gráfica la popularidad de varios lenguajes de
programación en base al numero de usuarios que tienen.

Primero definimos el conjunto de datos: ‘lenguajes’ que contiene varios lenguajes de


programación, y ‘cantidad_usos’ que son los usuarios que tiene cada lenguaje. Recuerda
siempre que ambos conjuntos de datos deben tener el mismo tamaño o numero de valores.
Ademas también obtenemos un ‘y_pos’ que contiene la posición de cada lenguaje.

lenguajes = ['Python', 'C++', 'Jav


#Obtenemos una lista con las p
y_pos = np.arange(len(lenguaje

1 lenguajes = ['Python', 'C++', 'Java', 'Perl', 'Scala', 'Lisp']


2 #Obtenemos una lista con las posiciones de cada lenguaje, ejemplo 0, 1, 2, 3.....
3 y_pos = np.arange(len(lenguajes))
4
5 #Ahora obtenemos la cantidad de usos de cada lenguaje
6 cantidad_usos = [10,8,6,4,2,1]

Teniendo lo básico, pasamos a crear la gráfica, en este caso usamos el método ‘barh’ que
permite crear la gráfica de barras en posición horizontal. Pasamos los parámetros donde Y
es igual a las posiciones de menor a mayor de cada lenguaje, y X es la cantidad de usuarios,
el parámetro ‘align’ permite alinear los valores al centro

#Creamos la grafica pasando lo


plt.barh(y_pos, cantidad_usos,

#Creamos la grafica pasando los valores en el eje X, Y, donde X = cantidad_usos y Y =


1
lenguajes
2
plt.barh(y_pos, cantidad_usos, align='center', alpha=0.5)

Finalmente podemos añadir etiquetas para representar los valores. Y posterior a esto
mostrar la gráfica.

Añadimos la etiqueta de nombre


plt.yticks(y_pos, lenguajes)
#añadimos una etiqueta en el ej
plt.xlabel('Usuarios')

1 Añadimos la etiqueta de nombre de cada lenguaje en su posicion correcta


2 plt.yticks(y_pos, lenguajes)
3 #añadimos una etiqueta en el eje X
4 plt.xlabel('Usuarios')
5 #Y una etiqueta superior
6 plt.title('Lenguajes Mas Usados En El Año')
7 plt.savefig('barras_horizontal.png')
8 plt.show()
El código completo y la gráfica resultante queda de la siguiente manera:

lenguajes = ['Python', 'C++', 'Jav


#Obtenemos una lista con las p
y_pos = np.arange(len(lenguaje

lenguajes = ['Python', 'C++', 'Java', 'Perl', 'Scala', 'Lisp']


1
#Obtenemos una lista con las posiciones de cada lenguaje, ejemplo 0, 1, 2, 3.....
2
y_pos = np.arange(len(lenguajes))
3
4
#Ahora obtenemos la cantidad de usos de cada lenguaje
5
cantidad_usos = [10,8,6,4,2,1]
6
7
#Creamos la grafica pasando los valores en el eje X, Y, donde X = cantidad_usos y Y =
8
lenguajes
9
plt.barh(y_pos, cantidad_usos, align='center', alpha=0.5)
10
#Añadimos la etiqueta de nombre de cada lenguaje en su posicion correcta
11
plt.yticks(y_pos, lenguajes)
12
#añadimos una etiqueta en el eje X
13
plt.xlabel('Usuarios')
14
#Y una etiqueta superior
15
plt.title('Lenguajes Mas Usados En El Año')
16
plt.savefig('barras_horizontal.png')
17
plt.show()
Grafica de barras horizontal

Grafica de Barras Doble


La gráfica de barras dobles nos permite, ademas de mostrar de manera gráfica un conjunto
de datos, realizar una comparación entre dos pares de valores.

Para este ejemplo, buscaremos mostrar la asistencia de hombres y mujeres de lunes a


viernes en dos conjuntos de barras diferentes.

Generamos los conjuntos de datos:

asistencia = ['Lunes', 'Martes', 'M


men_means = [20, 34, 30, 35, 2
w omen_means = [25, 32, 34, 20

1 asistencia = ['Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes']


2 men_means = [20, 34, 30, 35, 27]
3 women_means = [25, 32, 34, 20, 25]
4
5 #Obtenemos la posicion de cada etiqueta en el eje de X
6 x = np.arange(len(asistencia))
7 #tamaño de cada barra
8 width = 0.35

Creamos las ‘barras’ para hombres y mujeres:

#Generamos las barras para el


rects1 = ax.bar(x - w idth/2, men
#Generamos las barras para el
rects2 = ax.bar(x + w idth/2, w o

1 #Generamos las barras para el conjunto de hombres


2 rects1 = ax.bar(x - width/2, men_means, width, label='Hombres')
3 #Generamos las barras para el conjunto de mujeres
4 rects2 = ax.bar(x + width/2, women_means, width, label='Mujeres')

Ademas de añadir las etiquetas de siempre, añadiremos una ‘leyenda’ esta es un pequeño
recuadro que permite entender los elementos en la gráfica de una manera mas simple.

#Añadimos las etiquetas de iden


ax.set_ylabel('Asistencia')
ax.set_title('Asistencia de Homb
ax.set_xticks(x)

1 #Añadimos las etiquetas de identificacion de valores en el grafico


2 ax.set_ylabel('Asistencia')
3 ax.set_title('Asistencia de Hombres y Muejes')
4 ax.set_xticks(x)
5 ax.set_xticklabels(asistencia)
6 #Añadimos un legen() esto permite mmostrar con colores a que pertence cada valor.
7 ax.legend()

Añadimos una función que nos permite añadir etiquetas de manera individual a cada barra:

def autolabel(rects):
"""Funcion para agregar una
for rect in rects:
height = rect.get_height()

1 def autolabel(rects):
2 """Funcion para agregar una etiqueta con el valor en cada barra"""
3 for rect in rects:
4 height = rect.get_height()
5 ax.annotate('{}'.format(height),
6 xy=(rect.get_x() + rect.get_width() / 2, height),
7 xytext=(0, 3), # 3 points vertical offset
8 textcoords="offset points",
9 ha='center', va='bottom')

Graficamos:

#Añadimos las etiquetas para c


autolabel(rects1)
autolabel(rects2)
fig.tight_layout()

1 #Añadimos las etiquetas para cada barra


2 autolabel(rects1)
3 autolabel(rects2)
4 fig.tight_layout()
5 plt.savefig('doble_barra.png')
6 #Mostramos la grafica con el metodo show()
7 plt.show()

El código final y la gráfica resultante queda de la siguiente manera:

asistencia = ['Lunes', 'Martes', 'M


men_means = [20, 34, 30, 35, 2
w omen_means = [25, 32, 34, 20

1 asistencia = ['Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes']


2 men_means = [20, 34, 30, 35, 27]
3 women_means = [25, 32, 34, 20, 25]
4
5 #Obtenemos la posicion de cada etiqueta en el eje de X
6 x = np.arange(len(asistencia))
7 #tamaño de cada barra
8 width = 0.35
9
10 fig, ax = plt.subplots()
11
12 #Generamos las barras para el conjunto de hombres
13 rects1 = ax.bar(x - width/2, men_means, width, label='Hombres')
14 #Generamos las barras para el conjunto de mujeres
15 rects2 = ax.bar(x + width/2, women_means, width, label='Mujeres')
16
17 #Añadimos las etiquetas de identificacion de valores en el grafico
18 ax.set_ylabel('Asistencia')
19 ax.set_title('Asistencia de Hombres y Muejes')
20 ax.set_xticks(x)
21 ax.set_xticklabels(asistencia)
22 #Añadimos un legen() esto permite mmostrar con colores a que pertence cada valor.
23 ax.legend()
24
25 def autolabel(rects):
26 """Funcion para agregar una etiqueta con el valor en cada barra"""
27 for rect in rects:
28 height = rect.get_height()
29 ax.annotate('{}'.format(height),
30 xy=(rect.get_x() + rect.get_width() / 2, height),
31 xytext=(0, 3), # 3 points vertical offset
32 textcoords="offset points",
33 ha='center', va='bottom')
34
35 #Añadimos las etiquetas para cada barra
36 autolabel(rects1)
37 autolabel(rects2)
38 fig.tight_layout()
39 plt.savefig('doble_barra.png')
40 #Mostramos la grafica con el metodo show()
41 plt.show()

Grafica de barras dobles


Grafica Lineal
La gráfica lineal es de una manera, mas sencilla de graficar, ademas de poder representar
valores en series de tiempo o en función a otro valor. En este ejemplo, podemos representar
valores matemáticos como funciones de X.

Generamos los valores intermedios ente 0 y 2, entre mas valores existan mas ‘suave’ se
vera la recta.

x = np.linspace(0, 2, 100)

1 x = np.linspace(0, 2, 100)

Creamos la gráfica pasando los valores al método ‘plot’ con el cual realizamos las gráficas
lineales. En este caso los valores de Y, se modifican para representar valores distintos.
Finalmente etiquetamos y graficamos:

x = np.linspace(0, 2, 100)
#Generamos una grafica lineal p
plt.plot(x, x, label='linear')
#Generamos otra grafica lineal

1 x = np.linspace(0, 2, 100)
2 #Generamos una grafica lineal para una recta en X
3 plt.plot(x, x, label='linear')
4 #Generamos otra grafica lineal para una X cuadratica
5 plt.plot(x, x**2, label='quadratic')
6 #Generamos una grafica lineas para una X Cubica
7 plt.plot(x, x**3, label='cubic')
8 #Agregamos las etiquetas y añadimos una leyenda.
9 plt.xlabel('Eje X')
10 plt.ylabel('Eje Y')
11 plt.title("Simple Plot")
12 plt.legend()
13 plt.savefig('grafica_lineal.png')
14 plt.show()
Grafica lineal

Grafica Lineal con Funciones Matemáticas


También podemos representar de manera gráfica otras funciones matemáticas, como en este
caso un sen(x).

x = np.arange(0, 10, 0.2)


#Generamos valores en el eje Y
y = np.sin(x)
fig, ax = plt.subplots()

1 x = np.arange(0, 10, 0.2)


2 #Generamos valores en el eje Y de seno
3 y = np.sin(x)
4 fig, ax = plt.subplots()
5 #Creamos la Grafica
6 ax.plot(x, y)
7 plt.savefig('grafica_lineal_seno.png')
8 plt.show()
Grafica lineal

Grafica Tipo Pastel


Algo mas ‘colorido’ y representativo para mostrar datos en base a una segmentación, son
las gráficas tipo pastel, para este ejemplo buscamos representar que medio de transporte es
el mas usado por un conjunto de 100 personas.

Como en cada ejemplo, definimos un conjunto de datos ‘medios_transporte’ y ‘sizes’.


Ademas, añadimos un nuevo conjunto llamado explode, con el cual podemos ‘señalar’ cual
conjunto de datos se puede resaltar.

medios_transporte = 'Vehiculos
#Declaramos el tamaño de cada
sizes = [45, 30, 15, 10]
#En este punto señalamos que

1 medios_transporte = 'Vehiculos', 'Motocicletas', 'Bicicleta', 'Metro'


2 #Declaramos el tamaño de cada 'rebanada' y en sumatoria todos deben dar al 100%
3 sizes = [45, 30, 15, 10]
4 #En este punto señalamos que posicion debe 'resaltarse' y el valor, si se coloca 0, se
5 omite
explode = (0.1, 0, 0, 0)

Añadimos las etiquetas correspondientes y leyenda. Hacemos uso del método ‘pie’ con el
cual generamos las gráficas tipo pastel, pasamos los parámetros de los conjuntos de datos y
graficamos.

El código completo y la gráfica resultante queda de la siguiente manera:

medios_transporte = 'Vehiculos
#Declaramos el tamaño de cada
sizes = [45, 30, 15, 10]
#En este punto señalamos que

medios_transporte = 'Vehiculos', 'Motocicletas', 'Bicicleta', 'Metro'


1
#Declaramos el tamaño de cada 'rebanada' y en sumatoria todos deben dar al 100%
2
sizes = [45, 30, 15, 10]
3
#En este punto señalamos que posicion debe 'resaltarse' y el valor, si se coloca 0, se
4
omite
5
explode = (0.1, 0, 0, 0)
6
7
fig1, ax1 = plt.subplots()
8
#Creamos el grafico, añadiendo los valores
9
ax1.pie(sizes, explode=explode, labels=medios_transporte, autopct='%1.1f%%',
10
shadow=True, startangle=90)
11
#señalamos la forma, en este caso 'equal' es para dar forma circular
12
ax1.axis('equal')
13
plt.title("Principal Medio de Transporte")
14
plt.legend()
15
plt.savefig('grafica_pastel.png')
16
plt.show()
Grafica de Pastel

Grafica de Dispersión
Otro de los múltiples gráficos que podemos realizar con matplotlib son los gráficos de
dispersión, que ayudan a entender el despliegue de varios conjuntos de datos y la relación
entre ellos.

#Grafico de dispersion
#Definimos un area de tipo elips
rx, ry = 3., 1.
area = rx * ry * np.pi

1 #Grafico de dispersion
2 #Definimos un area de tipo elipse, para dibujar.
3 rx, ry = 3., 1.
4 area = rx * ry * np.pi
5 theta = np.arange(0, 2 * np.pi + 0.01, 0.1)
6 verts = np.column_stack([rx / area * np.cos(theta), ry / area * np.sin(theta)])
7
8 x, y, s, c = np.random.rand(4, 30)
9 s *= 10**2.
10
11 fig, ax = plt.subplots()
12 ax.scatter(x, y, s, c, marker=verts)
13 plt.savefig('grafica_dispersion.png')
14 plt.show()

Grafica de dispersion

Podemos realizar múltiples gráficos para representar datos de una manera sencilla y con
pocas lineas de código. Ademas también podemos realizar gráficas en 3D pero esto ya sera
en otro tutorial.

También podría gustarte