0% encontró este documento útil (0 votos)
2 vistas57 páginas

Gráficos con Matplotlib y Seaborn

El documento proporciona una introducción a Matplotlib y Seaborn, destacando su uso para la representación gráfica en Python. Se abordan conceptos básicos como tipos de gráficos, figuras y ejes, así como ejemplos de código para crear gráficos simples y complejos. También se mencionan decoradores y anotaciones para mejorar la visualización de los datos.

Cargado por

imyen23
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
2 vistas57 páginas

Gráficos con Matplotlib y Seaborn

El documento proporciona una introducción a Matplotlib y Seaborn, destacando su uso para la representación gráfica en Python. Se abordan conceptos básicos como tipos de gráficos, figuras y ejes, así como ejemplos de código para crear gráficos simples y complejos. También se mencionan decoradores y anotaciones para mejorar la visualización de los datos.

Cargado por

imyen23
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

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

También podría gustarte