Pylab
Matplotlib
Pylab con Matplotlib
●
Es una de las mejores y más desarrolladas herramientas para graficar en dos dimensiones. Para usar pylab en el entorno interactivo de Python se usaipython -pylab
●
Para graficar usamos la función plot( ), que recibe como argumento la función a graficart=arange(0.0,2.0*pi,0.1) plot(t)
plot(t,t)
plot(sin(t),cos(t))
●
Para etiquetar los ejes usamos xlabel('abscisas')ylabel('ordenadas')
● Título principal de la gráfica title('Gráfica Prueba')
● Hacer un cuadriculado en la gráfica grid(True)
● Al graficar podemos decir si queremos que aparezcan puntos, líneas o triángulos. Para eso usamos 'o', '-', '<' o '>'.
● Especificar los colores que quiero usar.
b blue
g green
r red
c cyan
m magenta
y yellow
k black
w white
● Podemos especificar el tipo de punto que quiero salga en la gráfica y el tipo de línea.
● Para acortar, puedo hacer combinaciones de figuras y colores
plot(t,3*t,'g:+')
Código de Marca Punto de Gráfica
+ Cruz
. Punto
o Círculo
* Estrellas
p Pentágonos
s Cuadrados
x Taches
D Diamantes
h Hexágonos
^ Triángulos
Código de Línea Estilo de Línea
- Línea Sólida
-- Línea Discontinua
: Línea punteada
-. Línea punteada discontinua
None Ninguna Línea
import matplotlib.pyplot as plt
radio = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0]
area = [3.14159, 12.56636, 28.27431, 50.26544, 78.53975, 113.09724]
cuadrados = [1.0, 4.0, 9.0, 16.0, 25.0, 36.0]
plt.plot(radio, area, label='Circulos')
plt.plot(radio, cuadrados, marker='o', linestyle='--', color='r', label='Cuadrados')
plt.xlabel('Radios/lados') plt.ylabel('Area')
plt.title('Areas') plt.legend()
plt.show()
● Hacer 2 funciones en la misma gráfica t=arange(0.0,5.0,0.05)
s1=sin(2*pi*t) s2=s1*exp(-t) plot(t,s1,t,s2)
● En este caso es conveniente agregar una leyenda que nos indique qué gráfica es cual.
legend(('$\sin(2\pi t)$', '$\sin(2\pi
t)e^{t}$'),loc='lower right')
Podemos indicar en donde queremos que
salga la leyenda, usando lower, upper, center,
left y right.
Diagramas en Polares
z=arange(0.0,2*pi,0.1) r=sin(5*z)
polar(z,r)
theta=arange(0,8*pi,0.1) radio=theta/(8*pi)
polar(theta,radio)
Subgráficas
●
La función subplot permite subdividir una ventana de figuras en varias celdas tal que sea posible realizar una representación gráfica distinta en cada una de ellas.●
Sintaxis: subplot (m,n,k), donde m,n y k enteros. La ventana de figura será subdividida en mxn celdas, k será el lugar donde pondremos la gráfica. Siempre k>m*n, suponiendo que nos desplazamos por las columnas.Ejemplo:
subplot(2,2,1)
Habrá 4 figuras en un arreglo de 2x2, Para activar el lugar (1,1) usamos k=1, lugar (1,2) k=2, lugar (2,1) k=3 y lugar (2,2) k=4.
from pylab import * def f(t):
return cos(2*pi*t)*exp(-t) t1=arange(0.0,5.0,0.1)
t2=arange(0.0,5.0,0.02) subplot(211)
plot(t1,f(t1),'bo',t2,f(t2),'k') grid(True)
title('Dos subgraficas') ylabel('Amortiguamiento') subplot(212)
plot(t2,cos(2*pi*t2),'r>') grid(True)
xlabel('tiempo (s)')
ylabel('sin amortiguamiento') show()
● Cicloide
x=r(t-sin(t)) y=r(1-cos(t))
● Astroide
x=r(cos(t))**3 y=r(sin(t))**3
Algunas curvas paramétricas
importantes
● Hipocicloide
x=(R'-R)cos(t)+Rcos(((R'-R)/R)t) y=(R'-R)sin(t)-Rsin(((R'-R)/R)t)
● Si R'=R y k=R'/R, tenemos
Histogramas
Para graficar valores discretos o distribuciones estadísticas es útil usar un histograma. También son útiles para graficar una distribución de números que cruzan un rango de posibles valores. Ejemplo: Tomar una lista de números aleatorios y ver cuantas veces de ocurrencia que presentan. Los números aleatorios serán generados con distribuciones gaussianas.
import matplotlib.pyplot as p from random import normal numeros = normal(size=1000) p.hist(numeros)
p.title("Histograma Gaussiano") p.xlabel("Valor")
p.ylabel("Frecuencia") p.show()
● Nos referimos a "bins" como el número de distintas categorías. El default en python es 10 bins.
● Si queremos cambiar la resolución de nuestra gráfica, es decir, cambiar el número de bins a 20 usamos
p.hist(numeros, bins=20)
●
Si queremos graficar una distribución de probabilidad en lugar de un conteo de frecuencias, se tendrá que dividir entre una constante de normalización. Por lo general, se quiere que el 100% de probabilidad se encuentre en 1.p.hist(numeros, bins=20,normed=True)
●
si queremos cambiar la apariencia del histograma, que los cuadros no estén llenados, sino que sólo se vean los escalones usamos la opción histtypep.hist(numeros, bins=20,normed=True,histtype='step')
Hacer un histograma con la distribución gaussiana y una distribución uniforme de números aleatorios desde -3 a 3 en rojo con 50% de transparencia sobre el color azúl de la distribución gaussiana:
import matplotlib.pyplot as plt
from numpy.random import normal, uniform numeros = normal(size=1000)
uniform
es = uniform(low=-3, high=3, size=1000)
plt.hist(numeros, bins=20, histtype='stepfilled', normed=True, color='b', label='Gaussiana')
plt.hist(uniformes, bins=20, histtype='stepfilled', normed=True, color='r', alpha=0.5, label='Uniforme')
plt.title("Histograma Gaussiana/Uniforme") plt.xlabel("Valor")
plt.ylabel("Probabilidad") plt.legend()
plt.savefig('uniforme.jpeg')