100% encontró este documento útil (1 voto)
616 vistas19 páginas

Graficas Con Python

El documento describe cómo crear diferentes tipos de gráficos con Python, incluyendo gráficos de líneas, barras, circulares y de dispersión. Explica cómo personalizar los gráficos cambiando los estilos de línea, colores, marcadores y más. También cubre cómo agregar leyendas, rótulos de ejes, trabajar con múltiples gráficos y guardar los gráficos como imágenes.

Cargado por

Robert Lorez
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 DOCX, PDF, TXT o lee en línea desde Scribd
100% encontró este documento útil (1 voto)
616 vistas19 páginas

Graficas Con Python

El documento describe cómo crear diferentes tipos de gráficos con Python, incluyendo gráficos de líneas, barras, circulares y de dispersión. Explica cómo personalizar los gráficos cambiando los estilos de línea, colores, marcadores y más. También cubre cómo agregar leyendas, rótulos de ejes, trabajar con múltiples gráficos y guardar los gráficos como imágenes.

Cargado por

Robert Lorez
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 DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 19

Graficas con Python

Dibujar un grfico de lneas


El siguiente ejemplo crea un grfico a partir de una lista de valores. En el eje "x" se representan
8 elementos numerados del 0 al 7 y en el eje "y" los valores de cada uno de ellos siguiendo el
orden
de
la
lista.
:
lista1
=
[11,2,3,15,8,13,21,34] #
Declara
:
plt.plot(lista1) #
Dibuja
:
plt.title("Ttulo") #
Establece
el
:
plt.xlabel("abscisa") #
Establece
el
: plt.ylabel("ordenada") # Establece el ttulo del eje y

lista1

con

el
ttulo
ttulo

del
del

valores
grfico
grfico
eje
x

Este tipo de grficos pueden crearse tambin con el intrprete interactivo de Python si se
importan
los
mdulos
adecuados.
Hay
dos
modos
de
hacerlo:
>>>
>>>
>>>
>>>
>>>

import
import
lista1

matplotlib.pyplot
numpy
=

o
>>>
>>>
>>>
>>>

as

plt
as
np
[11,2,3,15,8,13,21,34]
plt.plot(lista1)
plt.show()
bien,

from
lista1

pylab
=

import
*
[11,2,3,15,8,13,21,34]
plt.plot(lista1)
plt.show()

En el ejemplo anterior aunque se importa el mdulo Numpy no es necesario porque no se


utiliza. Se incluye la lnea porque dicho mdulo suele usarse con frecuencia cuando se trabaja
con grficos.

Activar y desactivar el modo interactivo de dibujo


A continuacin, se utilizan los mtodos ion() y ioff() que activan o desactivan el modo
interactivo de dibujo para aadir, o no, nuevos datos sobre el grfico actual.
:
lista1
=
[11,2,3,15,8,13,21,34] #
Declara
lista1
con
8
:
plt.plot(lista1) #
Dibuja
el
:
plt.xlabel("abscisa") #
Inserta
el
ttulo
del
eje
:
plt.ylabel("ordenada") #
Inserta
el
ttulo
del
eje
:
plt.ioff() #
Desactiva
modo
interactivo
de
:
lista2
=
[2,3,4,2,3,6,4,10] #
Declara
lista2
con
8
:
plt.plot(lista2) #
No
dibuja
datos
de
:
plt.ion() #
Activa
modo
interactivo
de
: plt.plot(lista2) # Dibuja datos de lista2 sin borrar datos de lista1

Para
:

conocer

en

plt.isinteractive()

un
#

momento
La

dado

funcin

qu
devolver

modo
True

valores
grfico
X
Y
dibujo
valores
lista2
dibujo

est

activo:

False

Los mtodos show() o draw() fuerzan que la informacin se muestre en el grfico (datos,
ttulos,
etiquetas,
etc.)
aunque
el
modo
interactivo
est
desactivado:
:
plt.ioff()
#
Desactiva
modo
interactivo
:
lista3
=
[9,15,9,15,9,15,9,15]
#
Declara
lista3
con
8
valores
:
plt.plot(lista3)
#
No
dibuja
datos
de
lista3
:
plt.show()
#
Fuerza
dibujo
de
datos
de
lista3
: plt.title("Grfica")
# Establece nuevo ttulo pero no muestra en grfico
:
plt.show()
#
Actualiza
grfico
con
nuevo
ttulo
:
plt.grid(True)
#
Activa
cuadrcula
del
grfico
pero
no
se
muestra
:
plt.show()
#
Muestra
cuadrcula
del
grfico
: plt.ion() # Activa modo interactivo de dibujo

Aadir leyendas a un grfico


Para aadir leyendas al grfico anterior asignar al parmetro "label=" de plot() el literal de la
leyenda
a
mostrar.
Y
despus,
ejecutar
el
mtodo legend().
:
:
:
: plt.legend()

plt.plot(lista1,
plt.plot(lista2,
plt.plot(lista3,

Posicin de leyendas (loc=):


upper, arriba

lower, abajo

center, centro

left, izquierda y

right, derecha
Para

colocar

la

leyenda

label
label
label

en

la

parte

superior

"Enero")
"Febrero")
"Marzo")

=
=

del

grfico

la

izquierda:

: plt.legend(loc="upper left")

Cambiar estilos de lnea, marcadores y colores de un grfico


Para dar claridad a los grficos pueden establecerse distintos estilos de lneas, marcadores y
colores:

Estilos de Lneas (linestyle=):


-, Lnea Slida

--, Lnea discontinua

:, Lnea punteada

-., Lnea punteada discontinua. y

None, Ninguna lnea

Marcadores (marker=):
+, Cruz

., Punto

o,Crculo

*, Estrellas

p, Pentgonos

s, cuadrados

x, Tachados

D, Diamantes

h, Hexgonos y

^, Tringulos

Colores (color=):
b, blue

g, green

r, red

c, cyan

m, magenta

y, yellow

k, black

w, white
Ejemplo:
:
plt.plot(lista1,
marker='x',
:
plt.plot(lista2,
marker='*',
:
plt.plot(lista3,
marker='o',
: plt.legend(loc="upper left")

linestyle=':',
linestyle='-',
linestyle='--',

color='b',
color='g',
color='r',

label
label
label

=
=
=

"Enero")
"Febrero")
"Marzo")

Tambin, es posible cambiar las fuentes de los textos, los grosores de las lneas y otras
propiedades que modifican el aspecto de un grfico.

Aadir rtulos a los ejes


En el siguiente ejemplo se crea un grfico nuevo con el mtodo figure() donde se representa
slo
una
lista
de
valores
y
se
definen
los
rtulos
de
los
ejes.
:
:
:
:
:
:
:
:
:

plt.figure() #

Comenzamos

un
=

lista1

indice
plt.xticks(indice,

nuevo

np.arange(8) #
"B",
"C",
"D",

("A",

grfico
(figura)
[11,2,3,15,8,13,21,34]
plt.title("Ttulo")
plt.xlabel("abscisa")
plt.ylabel("ordenada")
Declara
un
array
"E",
"F",
"G",
"H"))
plt.yticks(np.arange(0,51,10))
plt.plot(lista1)

Se han generado dos arrays con la funcion arange() del mdulo Numpy con los siguientes
valores:
-

El

array

array([0,

que
1,

se

obtiene
2,

con

np.arange(8)
3,

contiene

4,

los

siguiente

5,

6,

valores:
7])

- El array que se obtiene con np.arange(0,51,10) contiene los siguiente valores:


array([

0,

10,

20,

30,

40,

50])

Los arrays se utilizan para definir los rtulos que se mostrarn en ambos ejes. En el eje "x" el
valor del ndice es sustituido por un carcter alfabtico y en el eje "y", directamente, se
muestran en la escala los valores del propio array.

Trabajar con varios grficos


- Activar

grfico

por

su

nmero:

Si estamos trabajando con varios grficos a la vez para activar uno concreto indicaremos el
nmero que aparece en su barra de ttulo. Cualquier accin que se realice a continuacin se
har
sobre
dicho
grfico: plt.figure(Numero)
Ejemplo:
:
:
:
:
:
:
:
:
:

plt.figure() #
Aade
un
nuevo
grfico
y
lo
activa
x
=
linspace(2,8,4) #
devuelve
->
array([
2.,
4.,
6.,
8.])
y
=
x
**
2
plt.plot(x,
y,
"r")
plt.xlabel("x")
plt.ylabel("y")
plt.title("Grafico")
plt.figure(1) #
Activa
el
grfico
1
plt.title("Ttulo") #
Cambia
el
ttulo
del
grfico
1

- Activar

grfico

por

su

nombre:

Cuando se trabaja con varios grficos, otra posibilidad de activar un grfico determinado es
referirse
a
su
nombre:
:
:
:
:
:
:
:

elementosx
elementosy

=
=

np.random.rand(10) # Genera
np.random.rand(10) # Genera
plt.scatter(elementosx,

plt.figure('Regiones')
plt.figure('Dispersin')
array 10 elementos eje x
array 10 elementos eje y
elementosy)
plt.figure('Regiones')
plt.plot(elementosx,elementosy)

- Generar
Dividir

la

dos
ventana

grficos
en

en

fila

la

misma

columnas

dibujar

:
:
Dividir

ventana:
primer

grfico

plt.subplot(1,2,1)
plt.plot((1,2,3,4,5))
la

ventana

en

fila

columnas

dibujar

:
: plt.plot((5,4,3,2,1))

segundo

grfico

plt.subplot(1,2,2)

Continuar "dibujando" o reiniciar el grfico


Con el mtodo hold() se conmutan dos estados: uno para continuar "dibujando" (True) sobre
un
grfico
y
otro
para
reiniciar
el
grfico
(False).
:
Para

plt.hold()
comprobar

Conmutar
el

estado

de True a False y
en

un

de False a True
momento

dado:

: plt.ishold() # devuelve -> True / False

Borrar un grfico. Borrar los ejes. Cerrar un grfico


El mtodo cla() borra toda la informacin relacionada con los ejes de un grfico y el
mtodo clf()borra todo el grfico. Por otro lado, close() termina el grfico cerrando su ventana.
:
plt.cla()
#
Borrar
:
plt.clf()
#
Borrar
: plt.close() # Terminar un grfico

informacin
un

de
grfico

los

ejes
completo

Guardar un grfico como .png/.pdf


Para

guardar

la

imagen

de

un

grfico

:
savefig("archivo.png")
#
Guardar
: savefig("archivo.pdf") # Guardar en formato .pdf

en

en

un
formato

archivo:
.png

Dibujar un grfico de barras horizontales


:
paises
=
("Alemania",
"Espaa",
"Francia",
"Portugal")
:
posicion_y
=
np.arange(len(paises))
:
unidades
=
(342,
321,
192,
402)
:
plt.barh(posicion_y,
unidades,
align
=
"center")
:
plt.yticks(posicion_y,
paises)
:
plt.xlabel('Unidades
vendidas')
: plt.title("Ventas en Europa")

Dibujar un grfico de mtiples barras verticales


:
datos
=
[[1,
2,
3,
4],
:
X
:
plt.bar(X
+
0.00,
datos[0],
:
plt.bar(X
+
0.25,
datos[1],
:
plt.bar(X
+
0.50,
datos[2],
: plt.xticks(X+0.38, ["A","B","C","D"])

[3,

5,
=

color
color
color

3,
=
=
=

5],
"b",
"g",
"r",

[8,

6,
4,
2]]
np.arange(4)
width
=
0.25)
width
=
0.25)
width
=
0.25)

Dibujar un grfico circular


:
impr
=
["b/n",
"color",
"dplex",
"A3"]
:
vol
=
[25,
31,
46,
10]
:
expl
=(0,
0.05,
0,
0)
:
pie(vol,
explode=expl,
labels=impr,
autopct='%1.1f%%',
shadow=True)
:
plt.title("Impresin",
bbox={"facecolor":"0.8",
"pad":5})
: plt.legend()

[DISCLAIMER: Muchos de los grficos que vamos a


representar no tienen ningn sentido fsico y los resultados
solo pretenden mostrar el uso de la librera].

En todo momento supondremos que se ha iniciado la sesin


y se ha hecho
import matplotlib.pyplot as plt
import numpy as np

Hasta ahora hemos visto como configurar las ventanas,


manejo de las mismas, definir reas de grfico,... Ahora
vamos a ir viendo los diferentes tipos de grficos que existen.
Como habis podido comprobar, en los ejemplos anteriores
hemos estado viendo mucho plt.plot() que es lo que se suele
usar para dibujar un grfico simple de lneas representando
los valores (x, f(x)). Ahora vamos a ver un ejemplo explicado
para que veis todas las posibilidades de plt.plot().
plt.ion() # Nos ponemos en modo interactivo
x = np.arange(100) # Valores de x
y = np.random.rand(100) # Valores de y
plt.plot(x,y, color = 'black', label = '(x, f(x)') # Dibujamos la evolucin de f(x), frente a x
plt.plot(x[y > 0.9], y[y > 0.9], 'bo', label = 'f(x) > 0.9') # Destacamos los valores por encima de 0.9

colocndoles un marcador circular azul


plt.axhspan(0.9, 1, alpha = 0.1) # Colocamos una banda de color para los valores f(x) > 0.9
plt.ylim(0,1.2) # Limitamos el eje x
plt.legend() # Colocamos la leyenda
plt.title(u'Representacin de (x, f(x))') # Colocamos el ttulo del grfico
plt.xlabel('valores x') # Colocamos la etiqueta en el eje x
plt.ylabel('valores f(x)') # Colocamos la etiqueta en el eje y

Este es el tipo de grfico que suelo usar un 75% de las


veces. Tipos de grfico anlogos a este son plt.plot_date(),
que es similar a plt.plot() considerando uno o ambos ejes
como fechas, y plt.plotfile(), que dibuja directamente desde
los datos de un fichero.
Otro tipo de grfico sera el que podemos obtener con
plt.stem(). Dibuja lneas verticales desde una lnea base.
Imaginaros, por ejemplo, que tenis una serie temporal, la
normalizamos (restndole su media y dividiendo por su
desviacin estndar) de forma que nos queda una serie de
media 0 y desviacin estndar 1. Esta nueva serie la

podemos representar con plt.stem() donde la lnea horizontal


sera el valor medio (en este caso la media sera 0, recuerda
que la hemos normalizado la serie) y las lneas verticales
sera lo que se desva el valor individual respecto de la media
de la serie. Vamos a ver un ejemplo con los valores por
encima de la media en verde y los valores por debajo de la
media en rojo.
plt.ion() # Nos ponemos en modo interactivo
x = np.arange(25) + 1 # Valores de x
y = np.random.rand(25) * 10. # Valores de y
y_norm = (y - y.mean()) / y.std() # Valores de y normalizados. Esta nueva serie tiene media 0 y

desvicacin estndar 1 (comprobadlo como ejercicio)


plt.xlim(np.min(x) - 1, np.max(x) + 1) # Colocamos los lmites del eje x
plt.ylim(np.min(y_norm)-1, np.max(y_norm)+1) # Colocamos los lmites del eje y
plt.stem(x[y_norm > 0],y_norm[y_norm > 0], linefmt='k-.', markerfmt='go', basefmt='b-') # Dibujamos los

valores por encima de la media


plt.stem(x[y_norm < 0],y_norm[y_norm < 0], linefmt='k-.', markerfmt='ro', basefmt='b-') # Dibujamos los

valores por debajo de la media


plt.title(u'Representacin de (x, f(x))') # Colocamos el ttulo del grfico
plt.xlabel('valores x') # Colocamos la etiqueta en el eje x
plt.ylabel('valores f(x)') # Colocamos la etiqueta en el eje y

En algunos casos, nos interesa ver cuando una serie est por
encima o por debajo de la otra. Eso, con un grfico tipo
plt.plot() lo podemos hacer sin problemas, pero nos gustara
resaltarlo visualmente de forma sencilla. Para ello podemos
usar plt.fill_between(). Imaginemos un ejemplo donde
tenemos dos series temporales y queremos localizar
fcilmente cuando la primera est por encima de la segunda
y cuando est por debajo.
plt.ion() # Nos ponemos en modo interactivo
x = np.arange(25) + 1 # Valores de x
y1 = np.random.rand(25) * 10. # Valores de y1

y2 = np.random.rand(25) * 10. # Valores de y2


plt.xlim(np.min(x) - 1, np.max(x) + 1) # Colocamos los lmites del eje x
plt.ylim(np.min([y1, y2])-1, np.max([y1, y2])+1) # Colocamos los lmites del eje y
plt.plot(x, y1, 'k-', linewidth = 2, label = 'Serie 1') # Dibujamos los valores de (x,y1) con una lnea contnua
plt.plot(x, y2, 'k-.', linewidth = 2, label = 'Serie 2') # Dibujamos los valores de (x,y2) con una lnea de

punto y raya
plt.fill_between(x, y1, y2, where = (y1 < y2), color = 'g', interpolate = True) # Pinta polgonos color verde

entre las lneas cuando y1 < y2 plt.fill_between(x, y1, y2, where = (y1 > y2), color = 'r', interpolate =
True) # Pinta polgonos color rojo entre las lneas cuando y1 > y2
plt.legend()
plt.title('Ejemplo de plt.fill_between()') # Colocamos el ttulo del grfico
plt.xlabel('valores x') # Colocamos la etiqueta en el eje x
plt.ylabel('valores y') # Colocamos la etiqueta en el eje y

Recordad que usamos valores aleatorios para y1 e y2 por lo


que si usis ese cdigo no os tiene porque dar lo mismo.
Como veis, cuando los valores de y2 son mayores que los de
y1 dibuja polgonos verdes, en caso contrario dibuja
polgonos rojos. Algo parecido pero para el eje y en lugar de
para el eje x lo podemos hacer usando plt.fill_betweenx().
Tambin podemos dibujar el polgono que queramos sobre el
grfico usando plt.fill().Veamos una 'ki-cutrez' usando plt.fill():
plt.ion() # Nos ponemos en modo interactivo
s1x = [0.3,0.3,0.7,0.7,0.5,0.5,1,1,0.7,0.7]
s1y = [0.5,1.4,1.4,1.5,1.5,1.9,1.9,1.1,1.1,0.5]
o1x = [0.6,0.6,0.7,0.7]

o1y = [1.7,1.8,1.8,1.7]
s2x = [0.8,0.8,1.1,1.1,1.5,1.5,1.1,1.1,1.3,1.3]
s2y = [0.2,1,1,1.6,1.6,0.7,0.7,0.6,0.6,0.2]
o2x = [1.1,1.1,1.2,1.2]
o2y = [0.3,0.4,0.4,0.3]
plt.fill(s1x, s1y, color = 'b')
plt.fill(o1x,o1y, color = 'w')
plt.fill(s2x, s2y, color = 'g')
plt.fill(o2x,o2y, color = 'w')
plt.title(u'Smbolo de python cutre')
plt.ylim(0.1,2)

Y ya lo ltimo que vamos a ver hoy es un diagrama de cajabigote (box plot o box-whisker diagram). Este es un
diagrama donde se puede ver un resumen de una serie de
forma rpida y sencilla. En l se representa el primer cuartil y
el tercer cuartil, que son los extremos de la caja, el valor de la
mediana (o segundo cuartil), que se representa mediante una
lnea dentro de la caja, y los extremos de la serie que no se
consideran anmalos, los llamados 'bigotes', que son los
valores extremos que estn dentro del rango de 1.5 veces el
rango intercuartlico (IQR por sus siglas en ingls, Inter
Quartil Range). Los valores que quedan fuera de este rango

que definamos, que como hemos comentado suele ser


1.5xIQR, se consideran valores anmalos u 'outliers' y se
representan como puntos fuera de los bigotes. Por tanto,
imaginemos que estamos representando la altura de las
mujeres que viven en Espaa, las mujeres que viven en
Alemania y las mujeres que viven en Tailandia. Con un
diagrama de caja-bigote podemos ver rpidamente como se
distribuyen cada uno de estos conjuntos de datos y podemos
compararlos visualmente entre ellos.
plt.ion() # Nos ponemos en modo interactivo
alt_esp = np.random.randn(100)+165 + np.random.randn(100) * 10 # Creamos unos valores para la altura

de 100 espaolas
alt_ale = np.random.randn(100)+172 + np.random.randn(100) * 12 # Creamos unos valores para la altura

de 100 alemanas
alt_tai = np.random.randn(100)+159 + np.random.randn(100) * 9 # Creamos unos valores para la altura

de 100 tailandesas
plt.boxplot([alt_esp, alt_ale, alt_tai], sym = 'ko', whis = 1.5) # El valor por defecto para los bigotes es

1.5*IQR pero lo escribimos explcitamente


plt.xticks([1,2,3], ['Esp', 'Ale', 'Tai'], size = 'small', color = 'k') # Colocamos las etiquetas para cada

distribucin
plt.ylabel(u'Altura (cm)')

[TODO ESTE COMENTARIO ES PARA COMENTAR EL


GRFICO, CUALQUIER PARECIDO CON LA REALIDAD
SERA MUY RARUNO Y HABRA QUE LLAMAR A FRIKER
JIMNEZ] Vemos como las alemanas presentan alturas
superiores y las tailandesas son las que, en general,
mostraran alturas inferiores. En las alemanas hay algunas
mujeres que quedan por encima de lo que hemos
considerado como valores normales llegando a alturas por
encima de los 200 cm. Las espaolas se encontraran entre
unas alturas de unos 140 cm y unos 190 cm.

Paginas para graficos en Python,


https://www.wakari.io/sharing/bundle/bultako/CursoPytho
nCientifico?has_login=False

También podría gustarte