Graficas Con Python
Graficas Con Python
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()
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
plt.plot(lista1,
plt.plot(lista2,
plt.plot(lista3,
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")
:, Lnea punteada
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.
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])
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.
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)
plt.hold()
comprobar
Conmutar
el
estado
de True a False y
en
un
de False a True
momento
dado:
informacin
un
de
grfico
los
ejes
completo
guardar
la
imagen
de
un
grfico
:
savefig("archivo.png")
#
Guardar
: savefig("archivo.pdf") # Guardar en formato .pdf
en
en
un
formato
archivo:
.png
[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)
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
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
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
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
distribucin
plt.ylabel(u'Altura (cm)')