Matplotlib
January 22, 2026
1 MatplotLib - Seaborn
Representación Gráfica
• matplotlib básico podrá hacer plot, legend, decoradores y anotaciones, guardar gráficas
• Dibujo con Pandas (tipos de gráficos)
• Introducción a seaborn [Link]
Referencias
• [Link]
1
• [Link]
• [Link]
• [Link]
• [Link]
• [Link]
• [Link]
2 Matplotlib
Es una librería estándar de representación gráfica, es de bajo nivel, es decir, fácil de usar pero difícil
de dominar y puede hacer gráficas y diagramas
2.0.1 Elementos de Visualización
• Gráfico = Tipo de representación dentro de una subfigura o figura. Existen gran cantidad
de tipos de gráficos como: Barras, Líneas, Tarta, etc
• Subfigura = Representación dentro de una figura
• Figura = Marco donde se representan de manera conjunta el gráfico
[2]: #Importamos la Librería de Matplotlib
import [Link] as plt
import numpy as np
import pandas as pd
Para poder añadir el gráfico usamos plot(data) = es para crear un gráfico con los datos que
queramos show() = para mostrar el gráfico
[3]: #Con esto, podremos ver que nomás podemos hacer con esta librería
%matplotlib --list
Available matplotlib backends: ['agg', 'auto', 'cairo', 'gtk3', 'gtk3agg',
'gtk3cairo', 'gtk4', 'gtk4agg', 'gtk4cairo', 'inline', 'macosx', 'nbagg',
'notebook', 'osx', 'pdf', 'pgf', 'ps', 'qt', 'qt5', 'qt5agg', 'qt5cairo', 'qt6',
'qtagg', 'qtcairo', 'svg', 'template', 'tk', 'tkagg', 'tkcairo', 'webagg', 'wx',
'wx', 'wxagg', 'wxcairo']
[4]: #Esto es necesario apra poder visualizar gráficos en jupyter de modo no␣
↪interactivo
%matplotlib inline
[9]: #Hagamos un ejemplo
#1) Creamos una matriz de 3x3 generando números randoms menores a 100
data = [Link](100,size=(3,3))
#2) Visualizamos los datos de Pandas
display(data)
print()
print("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-")
2
#3) Ahora vamos a crear el gráfico con [Link](datos de la gráfica)
[Link](data)
#4) Utilizamos el [Link]() para mostrar el gráfico de manera entendible
[Link]()
array([[45, 1, 73],
[67, 5, 56],
[70, 77, 55]], dtype=int32)
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
[11]: #Ahora vamos activar el modo interactivo
%matplotlib notebook
#Esto sirve para que podamos evitar que se sobreescriban los gráficos
[Link]()
#volvemos al modo no interactivo
%matplotlib inline
3
[13]: #Ahora vamos hacer un ejemplo pero especificando los valores de la gráfica
#1) Creamos los datos que colocaremos en en eje x y en el eje y
#ES IMPORTANTE QUE AMBOS TENGAN LA MISMA CANTIDAD
datos_para_x = [Link](75,100) #1D = 25 VALORES
#Creamos 25 números random menores a 80
datos_para_y = [Link](80,size=(25))
print(datos_para_x, datos_para_y)
print("----------------------------------------")
print()
#2) Creamos una validación de error en caso que la cantidad de valores sea␣
↪distinta
if datos_para_x.size == datos_para_y.size:
#3) Creamos la gráfica en caso que sean iguales
#Creamos la gráfica (filas , columnas)
[Link](datos_para_x, datos_para_y)
[Link]()
else:
print(f"{x_data.size} no tienen las mismas dimensiones {y_data.size}")
[75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
99] [57 4 53 26 7 10 70 35 38 63 49 24 21 34 25 23 28 67 58 26 7 30 58 42
0]
----------------------------------------
4
2.0.2 Figura y Ejes (Figure and Axes)
• Figura (Figures): Objeto en el que residen todos los gráficos (uno o más)
• Ejes (Axes): Son cada uno de los subplots(o gráficos) dentro de la Figura
[15]: #1) Creamos múltiples figuras dentro de un mismo marco
#subplots(2 filas de gráficos, 3 columnas de gráficos)
figura, ejes = [Link](3,2) #filas x col
print(type(ejes))
print([Link])
<class '[Link]'>
(3, 2)
5
[18]: #Vamos hacer un ejemplo utilizando subplots
#1) Vamos a generar los datos para las gráficas
altura_hombres = [Link](0,20)
altura_mujeres = [Link](-20,0)
peso_hombres = [Link](100,size=(20))
peso_mujeres = [Link](300,size=(20))
#2) Vamos a crear el marco y las figuras
marco, ejes = [Link](1,2) #1 fila, 2 col
#3) Ahora vamos a colocar los datos según la figura
#Se coloca mediante los índices
ejes[0].plot(altura_hombres, peso_hombres)
ejes[1].plot(altura_mujeres, peso_mujeres)
#4) Ahora mostramos la gráfica
[Link]()
6
[19]: #Ahora vamos a crear un nuevo eje con el eje x compartido
#Básicamente sirve para compartir 2 gráficas en un mismo eje
#1) Creamos la figura
figura, eje = [Link](1,1) #una gráfica
#2) Creamos el primer valor para eje x
eje_x = [Link](12) #tendrá 12 valores
[Link](eje_x, 'r') #la r es del color, es "red"
#3) Creamos el enlace para compartir 2 valores en un eje
eje2 = [Link]()#Con esto,creamos un eje "y" y comparte el x
#4) Creamos el segundo valor para el mismo eje
[Link](eje_x ** 2, "b") #Hacemos que la gráfica sea el doble que la primera,␣
↪de color azúl
[Link]()
7
[25]: #Vamos a crear un ejemplo parecido a una gráfica real
#1) Creamos el marco y las figuras
marco, ejes = [Link](1,2) #2 gráficas
#2) Preparamos dos gráficas
ejes[0].plot(altura_hombres, peso_hombres)
ejes[1].plot(altura_mujeres, peso_mujeres)
#3) Tanto los ejes como las figuras pueden modificarse a través de funciones
ejes[0].set_ylim(0,60)
ejes[0].set_xlim(-2,22)
ejes[0].set_xlabel("Altura")
ejes[0].set_ylabel("Peso")
ejes[0].set_ylim(0,100)
ejes[0].set_xlim(-10,2)
ejes[1].set_xlabel("Altura")
#loc es para poner la gráfica de manera central y labelpad es para ajustar el␣
↪texto a una ubicación relevante
8
ejes[1].set_ylabel("Peso", loc="center", labelpad= -300)
#4) Mostramos la gráfica
[Link]()
Se pueden visualizar más métodos por aquí métodos
2.1 .plot()
Se pueden poner mútiples parámetros
Su estructura es: [Link](eje x, eje y, estilo, label, linewidth=1, alpha=1) - Estilo
= Es el string donde ponemos el color como ‘r’, ‘b’, ‘g’, rojo azul y verde - Label = Es la referencia
que se tendrá para la leyenda (básicamente el nombre del gráfico) - Linewidth = Es el grosor de
la línea - Alpha: Es la opacidad/transparencia que tendrá la línea
Otros marcadores que podrás visualizar marcadores
2.1.1 Tipos de estilo (cheatsheet)
Color Descripción
b blue
g green
r red
c cyan
m magenta
9
Color Descripción
y yellow
k black
w white
Marcador Descripción
. point marker
, pixel marker
o circle marker
v triangle_down marker
^ triangle_up marker
< triangle_left marker
> triangle_right marker
1 tri_down marker
2 tri_up marker
3 tri_left marker
4 tri_right marker
s square marker
p pentagon marker
* star marker
h hexagon1 marker
H hexagon2 marker
+ plus marker
x x marker
D diamond marker
d thin_diamond marker
_ hline marker
Línea Descripción
- solid line style
– dashed line style
-. dash-dot line style
: dotted line style
[28]: #Vamos hacer el primer ejercicio
#1) Creamos los datos
x_data = [Link](10)
y_data = [Link](100,size=(10))
#2) Comenzamos a estructurar nuestra gráfica
marco, ejes = [Link](1,1) #1 fila, 1 col
10
#en los estilos puedes poner color forma y forma de las uniones
#red, triangle, rayas --
[Link](x_data, y_data, 'rv--',label= "dólares",linewidth=1, alpha=0.6)
#3) escribir "best" asegura que matplotlib coloque de la mejor manera el título␣
↪de la gráfica
[Link](loc="best")
#4) mostrar gráfica
[Link]()
2.1.2 Representar más de un Gráfico en una Subfigura
Básicamente quiere decir poner dos gráficos dentro de una imagen estadística
[32]: #1) Creamos los datos
datos_financieros = [Link](10)
figura, ejes = [Link](1,1)
#2) Configuramos la estructura de la primera gráfica
11
[Link](datos_financieros, [Link](100,size=(10)), 'gD-.',␣
↪label="Primera", linewidth= 1, alpha = 1)
#3) Ahora creamos el segundo
[Link](datos_financieros, [Link](100,size=(10)), 'rD-.', label =␣
↪"Segunda", linewidth = 1)
#4) Ahora creamos la tercera gráfica
[Link](datos_financieros, [Link](50,80, size=(10)),'cD-.', label␣
↪= "Tercera",linewidth=2, alpha=0.4)
#5) Ordenamos el título dentro del cuadro
[Link](loc='best')
#6) Hacemos una cuadrícula (literal por los jaja's)
[Link]()
#7) Mostramos el gráfico con [Link]
[Link]()
12
2.1.3 Decoradores
Cambian el aspecto general de la figura, unos ejemplos son:
• axes.set_xticks(lista)= Define las posiciones de las marcas (ticks) del eje X
• axes.set_title(‘titulo’)= Establece el título del gráfico
• axes.set_ylabel(‘label’)= Asigna una etiqueta al eje Y
• axes.set_frame_on(bool)= Activa o desactiva el marco (bordes) del gráfico
Puedes encontrar más métodos por aquí
2.2 Anotaciones
Formas de añadir información sobre el gráfico - [Link](datos_x, datos_y, 'texto que
escribir') - [Link](datos_x , datos_y , xytext, xycoords, arrowprops)
Puedes buscar más métodos de esto aquí
[48]: #Hagamos un ejercicio para ponerlo en práctica
#Cuidado con las dimensiones absolutas
#1) Creamos los datos para "x" y para "y"
datos_y = [Link](100,size=(10))
datos_x = [Link](10)
#2) Creamos la estructura del gráfico
marco, ejes = [Link](1,1) #habrá un gráfico
#3) Insertamos los datos en el gráfico
[Link](datos_x, datos_y)
#4) Ponemos solo el mensaje
#[Link](x_data[1],y_data[1],'Low income')
#4.2) Ponemos el mensaje completo
#La estructura es xy=(valor_x[valor 1], valor_y[valor 1])
#luego xytext=(en qué punto de "x" y "y" se pondrá el mensaje)
#Luego hacemos un arrowprops=dict(facecolor = color de la flecha y shrink es el␣
↪grosor de la flecha)
[Link]('Menor valor', xy=(datos_x[1], datos_y[1]), xytext=(5,10),␣
↪arrowprops= dict(facecolor='green', shrink = 1.0))
[Link]()
13
2.3 Tipos de Gráficos
Ejemplos disponibles como referencia por aquí
[58]: #Ahora vamos hacer Barras Horizontales
#1) Creamos la estructura (por default es 1x1)
marco, ejes = [Link]()
#2) Creamos datos de ejemplo
cargo = ('PhD', 'MSc', 'BSc', 'N/A')
posicion_y = [Link](len(cargo))
personas_cargo = [5,45,25,25]
#3) Como so barras horizontales, nos enfocaremos en el eje Y
[Link](posicion_y, personas_cargo, align= 'center', color='blue', edgecolor␣
↪= 'red')
#4) Definimos las posiciones que tendrá Y
ejes.set_yticks(posicion_y)
#5) Colocamos las etiquetas de los cargos para las barras
14
ejes.set_yticklabels(cargo)
#6) Invertimos los datos (se leen al revés de como deberían ser)
#ejes.invert_yaxis()
#7) Métemos una etiqueta para la parte horizontal
ejes.set_xlabel('Percentage of workforce')
#8) Título del marco
ejes.set_title('Nivel de Educación en la Compañía')
[Link]()
[63]: # Ahora vamos hacer con un ejemplo más completo
#1) Creamos los datos
ls_count = (284487, 244560, 208493, 196764)
15
cities = ('Madrid', 'Barcelona', 'Sevilla', 'Valencia')
data = [Link](ls_count)/1000
y_pos = [Link]([Link])
#2) Creamos valores default para la gráfica (por el momento solo son variables␣
↪xd)
width = 0.35 #este lo usaremos para el ancho de las barras
opacity = 0.7 #este lo usaremos para el alpha
#3) Creamos la estructura de la gráfica
figura, ejes = [Link]()
rects1 = [Link](y_pos, data, width, alpha=opacity) #aquí se aplican las␣
↪variables
#4) Vamos a poner el color en cada una de las barras
rects1[0].set_color('#6ade30')
rects1[1].set_color('#d6ee39')
rects1[2].set_color('#ffcb59')
rects1[3].set_color('#872f29')
#5) Vamos a definir bien las posiciones de "y" y vamos a colocar una etiqueta␣
↪en "y" que es para ciudades
ejes.set_yticks(y_pos)
ejes.set_yticklabels(cities)
#6) Vamos añadir etiquetas para hacer referencia a los campos de "x" y "y"
ejes.set_ylabel('Ciudades')
ejes.set_xlabel('Km de carril bici')
#7) Vamos a crear la leyenda de todas las ciudades
#estructura [Link]((grafica[0], grafica[1], etc), nombre_ciudades)
[Link]((rects1[0], rects1[1],rects1[2],rects1[3]), cities)
[Link]()
16
[69]: # Ahora vamos hacer el stack plot
#1) Creamos los datos
x = [2008, 2009, 2010, 2011, 2012]
iOS = [35, 25, 20, 17, 18]
Android = [0, 15, 35, 45, 60]
WindowsPhone = [1, 3, 5, 5, 2]
Others = [64,57,40,33,20]
#2) Esto serviría para poner a todos dentro de una matriz
#cada dato sería una fila
y = [Link]([iOS, Android, WindowsPhone,Others])
print(y)
print("------------------------------------------")
#3) Creamos etiquetas para cada uno
labels = ["iOS ", "Android", "WindowsPhone", "Others"]
#4) Creamos la estructura para la gráfica
figura, ejes = [Link]()
17
#5) Creamos un stack para que dibuje dibuja áreas rellenas
#una encima de otra para mostrar cómo contribuyen varias
#series al total a lo largo del eje X
#estructura: (x, cada uno de los datos, labels=labels creados en esa lista)
[Link](x, iOS, Android, WindowsPhone, Others,labels=labels)
# 6) Esto es para aplicarlo en "x" y "y"
#[Link](x, y, labels=labels)
#7) Definimos las posiciones de x
ejes.set_xticks(x)
#8) Creamos la leyenda que dirá que esté arriba a la izquierda
[Link](loc='upper left')
#9) Mostrar la gráfica
[Link]()
[[35 25 20 17 18]
[ 0 15 35 45 60]
[ 1 3 5 5 2]
[64 57 40 33 20]]
------------------------------------------
18
[71]: #Ahora vamos hacer el Scatter plot
from [Link] import rand
#1) Creamos la esctructura de la gráfica
figura, ejes = [Link]()
#2) Creamos una variable para indicar cuántos puntos aleatorios
#se van a generar y dibujar por cada color
n = 700
#3) Creamos un for para recorrer la lista de color y
#en cada vuelta del bucle, asigna un color distinto a la variable
for color in ["red","green","blue"]:
#genera n números aleatorios para x = 2 y "y" = n
x,y = rand(2,n)
#generamos la escala
scale = 25.0 * rand(n) #Cada punto tendrá un tamaño diferente
[Link](x, y, c=color, s=scale, label=color, alpha=0.3,␣
↪edgecolors='none')
[Link]()
[Link]()
19
2.3.1 Guardar la Gráfica
[Link](<filename>,dpi=None, facecolor=’w’, edgecolor=’w’, format=None,
bbox_inches=None)
[73]: #Ahora vamos a guardar una figura
import os
ruta = [Link]("figuras", "figura_guardada.png")
#El nombre del [Link](ruta, formato)
[Link](ruta, format='png') #Acepta varios formatos como pdf, png, svg,␣
↪eps, etc
2.4 Representación Gráfica en Pandas
Pandas ofrece interfaz para poder dibujar con Series o DataFrames, se puede utilizar matplotlib
internamente y es fácil de utilizar
[76]: #Primero vamos a crear una matriz 2D 10x3
matriz_random = [Link](100,size=(10,3)) #10 filas x 3 col
#print(matriz_random)
20
#2) Vamos a crear un data frame de la matriz, y las col se llamaran A, X, C
frame = [Link] (matriz_random, columns= list('AXC'))
#3) Creamos una gráfica default
[Link]()
#4) Mostramos la gráfica
[Link]()
#5) Mostramos el dataframe (solo se ven los datos gracias al pandas)
display(frame)
A X C
0 25 56 19
1 24 46 3
2 73 80 43
3 40 82 84
4 21 87 24
5 83 30 17
6 19 23 25
7 33 6 47
8 2 99 51
9 70 19 44
21
2.5 [Link]()
la estructura es: [Link](valor_x, valor_y, label=<Series>,
ax,style,kind,xticks,yticks,title,subplots)
• (Solo para Series) label = referencia para la leyenda
• ax = subfigura para dibujar los datos
• style = estilo de la línea
• kind: tipo de gráfico (barra, pastel, area, densidad, kde, etc)
• xticks and yticks= valores en los ejes “X” y “Y”
• title: string como título
• (Solo para DataFrame) subplots: boolean si se desean subfiguras separadas para cada
columna
• (Solo para DataFrame) “x” y “y” se pueden usar para seleccionar columnas para cada eje
Puedes visualizar la lista de argumentos aqui
[84]: #Vamos a crear nuestro primer ejercicio de esto
#1) Creamos una matriz random de 30 números menores a 100, 10 filas x 3 col
matriz_random = [Link](100,size=(10,3))
#2) Creamos el Dataframe para poder verlo mejor
frame = [Link](matriz_random, columns=list("ABC"))
#3) Creamos la estructura de la gráfica
#el xticks hace que el rango de la gráfica sea de -2 a 11
[Link](style=['r-','g-','b-'], xticks= range(-2,12), title= "Líneas␣
↪random", subplots = True)
#4) Colocamos la leyenda en la primera fila (arriba a la izquierda)
[Link]()
display(frame)
22
A B C
0 55 96 75
1 46 73 98
2 33 68 93
3 63 50 1
4 0 67 97
5 27 57 67
6 62 80 59
7 57 87 81
8 83 96 29
9 40 70 18
[88]: #Ahora vamos hacer un ejercicio combinando pandas
rand_matrix = [Link](100, size=(10,3))
frame = [Link](rand_matrix, columns=list('ABC'))
figura, ejes = [Link](3,1)
#si o si tiene que ser ax
ax = [Link](style=['r-','g-','b-'], xticks = range(-2,12), title = 'Lineas␣
↪sapas', subplots = True, ax = ejes )
23
ax[0].legend(loc='upper left')
[Link]()
[89]: #Ahora vamos a realizar un gráfico de barras
[Link](kind='bar', title= 'Barras Random')
[Link]()
24
[90]: #Ahora vamos hacer un gráfico de área
[Link](kind='area', xticks=range(-2,12), title='Random lines')
[Link]()
25
[91]: #Ahora vamos hacer un histograma
[Link]()
[Link]()
26
[94]: #Haremos un gráfico de pastel
#1) Creamos un diccionario dentro del dataframe
df = [Link]({'mass': [0.330, 4.87 , 5.97],
'radius': [2439.7, 6051.8, 6378.1]},
index=['Mercury', 'Venus', 'Earth'])
display(df)
#2) Creamos la estructura de la gráfica
[Link](y='mass', kind='pie', title='Planets')
[Link]()
mass radius
Mercury 0.33 2439.7
Venus 4.87 6051.8
Earth 5.97 6378.1
27
2.6 Seaborn
Es una abstracción de Matplotlib, es fácil de usar y personalizar. Además, es excelente para la
exploración y visualización de relaciones entre variables
Viene con varios datasets predefinidos datasets
Documentación Oficial
[95]: import seaborn as sns
[96]: #Cargamos datos
datos_de_vuelos = sns.load_dataset("flights")
display(datos_de_vuelos)
year month passengers
0 1949 Jan 112
1 1949 Feb 118
2 1949 Mar 132
3 1949 Apr 129
4 1949 May 121
.. … … …
139 1960 Aug 606
140 1960 Sep 508
28
141 1960 Oct 461
142 1960 Nov 390
143 1960 Dec 432
[144 rows x 3 columns]
[97]: #Vamos a contruir la gráfica
[Link](x="month", y= "passengers", data = datos_de_vuelos)
#Mostramos la gráfica
[Link](rotation=90) #rota el eje 90 grádos
[Link]()
2.6.1 Compatible con Pandas
[98]: #Cargamos los datos. Podemos hacerlo directamente con la url
tips = pd.read_csv("[Link]
↪master/[Link]") #link del archivo
#Hacemos que nos genere 5 datos al azar
29
[Link](5)
[98]: total_bill tip sex smoker day time size
181 23.33 5.65 Male Yes Sun Dinner 2
144 16.43 2.30 Female No Thur Lunch 2
111 7.25 1.00 Female No Sat Dinner 1
74 14.73 2.20 Female No Sat Dinner 2
224 13.42 1.58 Male Yes Fri Lunch 2
[99]: #Creamos nuestra gráfica con Seaborn
#cargamos variable x, variable y, tiempo, nuestros datos
#hue permite comparar una tercera variable dentro del mismo gráfico.
[Link](x='sex', y='tip', hue='time', data=tips)
#mostramos la gráfica
[Link]()
[102]: #Vamos hacer CUARTILES
[Link](x='day', y='tip', data=tips)
30
[Link]()
2.7 Relaciones entre Variables
[Link]()
[103]: #1) Cargamos el dataset ya generado anteriormente
tips = sns.load_dataset("tips") #este tips no es una copia ni nada relacionado,␣
↪es del propio sns
#2) generamos 5 datos al azar
[Link](5)
[103]: total_bill tip sex smoker day time size
17 16.29 3.71 Male No Sun Dinner 3
88 24.71 5.85 Male No Thur Lunch 2
186 20.90 3.50 Female Yes Sun Dinner 3
107 25.21 4.29 Male Yes Sat Dinner 2
47 32.40 6.00 Male No Sun Dinner 4
[104]: #Ahora vamos a graficar con SNS
# variable x, variable y, tercer valor, datos, tipo de gráfico
31
[Link](x='total_bill', y='tip', hue='sex', data=tips, kind='scatter')
#Mostramos el gráfico
[Link]()
[106]: #Ahora vamos a
#Representar la media y la variación de una variable en función de
#otra
#Traemos el dataset a la acción
data = sns.load_dataset('flights')
#Creamos la gráfica = variable x, variable y, tipo de gráfica, datos
[Link](x="year", y="passengers", kind="line", data=data)
#mostramos la gráfica
[Link]()
32
[108]: #Podemos relacionar hasta 4 variables de manera automática
#Se crean dos variables a comparar: total_bill y tip
#Luego divide entre fumadores y no fumadores (smoker)
#Al final se creará una tabla (columna) por cada tipo de sex.
#Como hay 2, por eso son dos tablas
#El ancho se ajusta automáticamente con el height
[Link](x= "total_bill", y="tip", hue= "smoker", col = "sex", height = 4,␣
↪kind= "scatter", data=tips )
[108]: <[Link] at 0x1b675765410>
33
2.7.1 Distribución de un DataSet
[121]: #histograma y density plot
#kde = linea de densidad
#bins = tamaño de los contenedores
# rug = densidad de los datos
#bins 10 = agrupamos 10 contenedores por valor
#rug = dibuja una rayita por cada valor real de tip
[Link](tips['tip'], kde=True, bins=10, rug=True)
[Link]()
34
[122]: #Distribución Bi-Variable
#Introducimos dos variables, total_bill y tip
[Link](x='total_bill', y='tip', data=tips)
[Link]()
35
[127]: # Density plot bi-variable
#Este data set es para identificar el iris
iris = sns.load_dataset('iris')
#muestra las primeras 5 filas
display([Link](5))
print("*----------------------------------------------------")
#selecciona la columna de especies y devuelve los valores distintos
display(iris["species"].unique())
print("*----------------------------------------------------")
36
#Creamos una gráfica que muestre x, y ; debe ser en gráfica kde y traemos la␣
↪data
[Link](x='petal_length', y='petal_width', kind="kde", data=iris)
[Link]()
sepal_length sepal_width petal_length petal_width species
0 5.1 3.5 1.4 0.2 setosa
1 4.9 3.0 1.4 0.2 setosa
2 4.7 3.2 1.3 0.2 setosa
3 4.6 3.1 1.5 0.2 setosa
4 5.0 3.6 1.4 0.2 setosa
*----------------------------------------------------
array(['setosa', 'versicolor', 'virginica'], dtype=object)
*----------------------------------------------------
37
[128]: #Relación de cada pareja
[Link](iris)
[Link]()
[129]: # Relación de cada pareja
#Aquí ya tmetemos el valor que faltaba porque no estaba en pareja, eran 5 y␣
↪este lo excluye
[Link](iris, hue = "species")
[Link]()
38
[130]: #scatter de clases, coloreando segun clase en matplotlib
iris = sns.load_dataset('iris')#cargamos el dataset de iris
[134]: #1) Preparamos los datos
data = []
colors = ["red", "green", "blue"]
groups = ["setosa", "versicolor", "virginica"]
columns = ["petal_length", "petal_width"]
#2) Hacemos un for para que busque por clase definida
#recorre toda la lista de groups
for i in groups:
#iris['species'] == i crea una máscara para que se quede solo con las filas␣
↪de esa especie
#[columns] ignora las demás columnas
#.values convierte el resultado en un array
39
[Link](iris[iris['species'] == i] [columns].values)
#3) Creación de la gráfica
figura = [Link]() #creamos el cuadro (figura vacía)
eje = figura.add_subplot() #añadimos un eje dentro de la figura
#Devuelve dos cosas en cada vuelta:
#count = índice (0, 1, 2)
#d → cada grupo de datos (array numpy)
for count, d in enumerate(data):
#d[:,0] = Todas las filas, Columna 0 que sería "petal_length"
#d[:,1] = lo mismo que arriba pero Columna 1, esto sería "petal_width"
x, y = d[:,0], d[:,1]
#recorre desde el último color en adelante
#no tiene borde de color
#s = tamaño de cada punto
#label=groups[count - 1] = recorre los nombres del último para adelante
[Link](x,y,alpha=0.4,c= colors[count -1], edgecolors = 'none', s= 30,␣
↪label = groups[count - 1])
#4) Ponemos las etiquetas
eje.set_xlabel(columns[0]) #Etiqueta para longuitud de pétalos
eje.set_ylabel(columns[1])# Etiqueta para anchura de pétalos
[Link](loc='best') #Coloca la leyenda donde mejor le parezca
[Link]('Matplot scatter plot') #Ponemos título a la gráfica
[Link]() #Mostramos la gráfica
40
2.7.2 Visualización de Correlaciones
• Regresión lineal con variables
• Correlaciones numéricas
[135]: #Correlación entre la cuenta total y propina
#Recta de regresión e intervalo de confianza
[Link](x="total_bill", y="tip", data=tips)
[Link]()
41
[136]: #Correlación con valores categóricos (variable discreta, variable debe ser
#numérica/continua) no es una buena idea xd
[Link](x="size", y="tip", data=tips)
[Link]()
42
order Tipo de modelo
1 Línea recta (regresión lineal)
2 Curva cuadrática
3 Cúbica
5 Polinomio de quinto grado
[137]: # regresión con polinomios de más grados
#usamos polinomio porque la curva no es perfectamente real, necesitamos
#subidas y bajadas
#
[Link](x="petal_length", y="sepal_width", data=iris, order=5)
[Link]()
43
[138]: # Correlaciones con varias variables
[Link](x="total_bill", y="tip", hue="smoker", data=tips, col='time',␣
↪order=2)
[Link]()
44
2.8 Ejercicios
Representación gráfica con matplotlib y seaborn
2.8.1 matplotlib
• crear una lista de años de 2000 a 2020 (eje x)
• generar datos aleatorios para el eje y (hacerlo 4 veces distintas: y0, y1, y2 e y3)
• Representar las 4 secuencias de datos aleatorios en una sola figura utilizando matplotlib
• Añade una leyenda para poder identificar cada secuencia en el gráfico
• Nombra las secuencias de la siguiente forma: “Hawaii”, “San Marino”, “Islas Feroe”,
“Guayana”
• Representar los mismos datos en 4 subfiguras (axes) distintas, parte de la misma figura
• Añade la siguiente info:
– Título: “Datos aleatorios”
– Leyenda
– Nombre del eje x: “Año”
– Nombre del eje y: “GDP”
• Añade al menos una anotación (texto y flecha) a uno de los gráficos
[163]: import numpy as np
import [Link] as plt
# 1) crear una lista de años de 2000 a 2020 (eje x)
anios = [Link](2000, 2021)
# 2) generar datos aleatorios para el eje
#y (hacerlo 4 veces distintas: y0, y1, y2 e y3)
y0 = [Link](100, size=(21))
y1 = [Link](100, size=(21))
y2 = [Link](100, size=(21))
y3 = [Link](100, size=(21))
#3) Representar las 4 secuencias de datos aleatorios
#en una sola figura utilizando matplotlib
[Link]()
[Link](anios, y0, label="Hawaii")
[Link](anios, y1, label="San Marino")
[Link](anios, y2, label="Islas Feroe")
[Link](anios, y3, label="Guayana")
[Link]("Datos aleatorios")
[Link]("Año")
[Link]("GDP")
45
#4) Añade una leyenda para poder identificar cada secuencia en el gráfico
[Link]()
# Anotación
[Link](
"Pico alto",
xy=(2010, y0[10]),
xytext=(2003, 90),
arrowprops=dict(arrowstyle="->")
)
[Link]()
#Representar los mismos datos en 4 subfiguras (axes) distintas
#parte de la misma figura
fig, axes = [Link](2, 2, figsize=(10, 6))
[Link]("Datos aleatorios")
# Hawaii
axes[0, 0].plot(anios, y0, label="Hawaii")
axes[0, 0].set_title("Hawaii")
axes[0, 0].set_xlabel("Año")
axes[0, 0].set_ylabel("GDP")
axes[0, 0].legend()
# San Marino
axes[0, 1].plot(anios, y1, label="San Marino")
axes[0, 1].set_title("San Marino")
axes[0, 1].set_xlabel("Año")
axes[0, 1].set_ylabel("GDP")
axes[0, 1].legend()
# Islas Feroe
axes[1, 0].plot(anios, y2, label="Islas Feroe")
axes[1, 0].set_title("Islas Feroe")
axes[1, 0].set_xlabel("Año")
axes[1, 0].set_ylabel("GDP")
axes[1, 0].legend()
# Guayana
axes[1, 1].plot(anios, y3, label="Guayana")
axes[1, 1].set_title("Guayana")
axes[1, 1].set_xlabel("Año")
axes[1, 1].set_ylabel("GDP")
axes[1, 1].legend()
46
plt.tight_layout()
[Link]()
47
2.9 Seaborn Ejercicio
• Carga los datos de un dataset de seaborn (distinto a ‘tips’, ‘iris’ o ‘flights’)
[Link]
• Si para alguno de los ejercicios no encuentras ejemplos en el dataset, busca otro para com-
pletarlo
• Recuerda utilizar la versión ‘Raw’ si se utiliza la URL en el método read_csv
• Representa visualmente la relación de cada pareja de atributos (variables)
• Escoge una pareja (ambos valores contínuos y numéricos) y demuestra su correlación
• Representa los valores de dos variables (x e y, numéricas) en base a otra variable (categórica)
• Crea los gráficos que demuestren lo siguiente en el dataset seleccionado:
– La distribución de valores (media, distribución, outliers) de una variable numérica con-
tínua
– Compara la distribución de esa variable con otra (contínua y numérica) para representar
cuantitativamente la densidad de elementos por valor en ambas variables
– Muestra un ejemplo en el dataset de una variable a la que un modelo de regresión lineal
de orden > 1 sea más ajustado que uno de orden == 1
[166]: import seaborn as sns
import pandas as pd
import [Link] as plt
#1) Cargamos un dataset distinto a los anteriores
cuakcuak = sns.load_dataset("penguins")
#2) Mostramos las primeras filas
48
print([Link]())
#3) Representa visualmente la
#relación de cada pareja de atributos (variables)
[Link](cuakcuak, hue="species")
[Link]()
#4) Escoge una pareja (ambos valores contínuos y numéricos)
#y demuestra su correlación
[Link](
x="bill_length_mm",
y="bill_depth_mm",
data=cuakcuak
)
[Link]("Correlación entre longitud y profundidad del pico")
[Link]()
#5) Representa los valores de dos variables (x e y, numéricas)
#en base a otra variable (categórica)
[Link](
x="bill_length_mm",
y="bill_depth_mm",
hue="species", #aquí va la categoría
data=cuakcuak
)
[Link]("Longitud vs Profundidad del pico por especie")
[Link]()
#6) La distribución de valores (media, distribución, outliers)
#de una variable numérica contínua
[Link](
y="body_mass_g",
data=cuakcuak
)
[Link]("Distribución del peso corporal")
[Link]()
#7) Compara la distribución de esa variable
#con otra (contínua y numérica) para representar cuantitativamente
#la densidad de elementos por valor en ambas variables
[Link](
cuakcuak["bill_length_mm"],
label="Bill Length",
fill=True
)
[Link](
49
cuakcuak["bill_depth_mm"],
label="Bill Depth",
fill=True
)
[Link]("Comparación de densidad entre variables")
[Link]()
[Link]()
#8) Muestra un ejemplo en el dataset de una variable a la que
#un modelo de regresión lineal de orden > 1
#sea más ajustado que uno de orden == 1
[Link](
x="bill_length_mm",
y="body_mass_g",
data=cuakcuak,
order=2
)
[Link]("Regresión polinómica (orden 2)")
[Link]()
species island bill_length_mm bill_depth_mm flipper_length_mm \
0 Adelie Torgersen 39.1 18.7 181.0
1 Adelie Torgersen 39.5 17.4 186.0
2 Adelie Torgersen 40.3 18.0 195.0
3 Adelie Torgersen NaN NaN NaN
4 Adelie Torgersen 36.7 19.3 193.0
body_mass_g sex
0 3750.0 Male
1 3800.0 Female
2 3250.0 Female
3 NaN NaN
4 3450.0 Female
50
51
52
53
54
55
56
2.10 Nombre: Adriel Bedoya
3 Github
3.0.1 Click aquí para ver el repositorio
[ ]:
57