http://pendientedemigracion.ucm.es/info/aocg/python/modulos_cientificos/matplotlib/index.html
4.3. Matplotlib
Autores: | José María Herrera Fernández, Luis Miguel Sánchez Brea |
---|
Contenidos de este capítulo:
import matplotlib.pyplot as plt
from matplotlib import pyplot
pyplot.funcion()
from matplotlib import *
4.3.1. Funciones principales
El módulo Matplotlib (al igual que la mayoría de los módulos) es enorme y explicar todas y cada una de las funciones nos llevaría demasiado tiempo así que analizaremos las más interesnates para un usuario principiante.figure(num, figsize, dpi, facecolor, edgecolor, frameon) –> Crea una nueva figura. Se puede utilizar sin argumentos. Devuelve un identificador a la figura.
- num = numeración de la figura, si num = None, las figuras se numeran automáticamente.
- figsize = w, h tuplas en pulgadas. Tamaño de la figura
- dpi = Resolución de la imagen en puntos por pulgada.
- facecolor = Color del rectángulo de la figura.
- edgecolor = Color del perímetro de la figura.
- frameon = Si es falso, elimina el marco de la figura.
>>> figure(num = None, figsize = (8, 6), dpi = 80, facecolor = 'w', edgecolor = 'k')
<matplotlib.figure.Figure object at 0x3938e50>
- numRows = Número de filas
- numCols = Número de columnas
- plotNum = Número de gráfica
>>> subplot(211)
<matplotlib.axes.AxesSubplot object at 0x393de90>
- x = Abcisas.
- y = Ordenadas. Tanto x como y pueden ser abcisas tuplas, listas o arrays. La única condición es que el tamaño de ambas debe ser el mismo ya que en caso contrario python nos devolverá un fallo de tipo dimesión. También se puede hacer una gráfica sin especificar la coordenada x.
- linestyle = color y tipo de dibujar la gráfica. Por ejemplo ‘k- -‘
- linewidth = ancho de línea.
- marker = Marcador.
>>> plt.plot(x, y, 'k--', linewidth = 2)
>>> from matplotlib import pyplot
>>> x = range(10)
>>> y = x
>>> a = pyplot.plot(x,y)
>>> len(a)
1
>>> a[0].get_color()
'b'
>>> a[0].get_ls()
'-'
>>> a[0].get_marker()
'None'
‘ - ‘ línea sólida
‘ - -‘ línea a rayas
‘ -. ‘ línea con puntos y rayas
‘ : ‘ línea punteada
Colores
‘b’ Azul
‘g’ Verde
‘r’ Rojo
‘c’ Cián
‘m’ Magenta
‘y’ Amarillo
‘k’ Negro
‘w’ Blanco
También se puede escribir el color de las siguientes formas: nombres (‘green’); cadenas hexadecimales (‘#008000’); tuplas con convención RGB (0,1,0); intensidades de escala de grises (‘0.8’).
Marcadores
Los tipos principales son:
[ ‘+’ | ‘*’ | ‘,’ | ‘.’ | ‘1’ | ‘2’ | ‘3’ | ‘4’ | ‘<’ | ‘>’ | ‘D’ | ‘H’ | ‘^’ | ‘_’ | ‘d’ | ‘h’ | ‘o’ | ‘p’ | ‘s’ | ‘v’ | ‘x’ ].
Fillstyle Relleno de símbolo elegido para representar cada dato.
[‘full’ | ‘left’ | ‘right’ | ‘bottom’ | ‘top’]
show() Presenta las figuras en pantalla mediante una ventana en la que podemos interactuar. Este comando se debe añadir siempre que necesitemos obervar nuestra gráfica ya que sino python realizará el cálculo pero no presentará la imagen. Lo usual es ponerlo al final del programa posibilitando aasí la llamada a todas las figuras que se encuentren en el mismo.
>>> plt.show()
>>> plt.legend( ('Etiqueta1', 'Etiqueta2', 'Etiqueta3'), loc = 'upper left')
- s = Texto que aparecerá en el título
- comandos_optativos = En esta etiqueta englobamos todos los modificadores de la fuente etc.
>>> plt.xlabel("Tiempo (s)", fontsize = 20)
>>> plt.ylabel("Distancia (m)", fontsize = 20)
>>> plt.title("velocidad (m/s)", fontsize = 20)
- x, y = Coordenadas espaciales horizontal y vertical.
- s = Texto que queremos añadir
>>> plt.text(5, 7, "Más texto", fontsize = 12)
- axis(), devuelve los límites de los ejes ([xmin, xmax, ymin, ymax])
- axis(v), establece los valores límites de los ejes a v = [xmin, xmax, ymin, ymax]
- axis(‘off’), elimina líneas de ejes y etiquetas
- axis(‘equal’), cambia los límites de x e y para que los incrementos de x e y tengan la misma longitud (un círculo parece un círculo)
- axis(‘scaled’), cambia las dimensiones del plot para conseguir la misma longitud de intervalo en x e y.
- axis(‘tight’), cambia los ejes para que se muestren todos los datos.
- y, array con los datos
- xmin = 0, valor mínimo
- xmax = 1, valor máximo
>>> plt.axhline(y = .5, xmin = 0.25, xmax = 0.75
grid() Establece la malla a True (visible) o False (oculta).
>>> plt.grid(True)
>>> plt,grid(color = 'r', linestyle = '', linewidth = 2)
- ruta: ruta y nombre de archivo. Los tipos de datos pueden ser .png, .eps, .pdf, .ps, .svg.
- dpi = None: resolución de la imagen en puntos por pulgada
- facecolor = ‘w’: color del rectángulo de la figura
- edgecolor = ‘w’: color del perímetro de la figura
- orientation = ‘portrait’: orientación del papel (landscape)
- format = None : (png, pdf, ps, eps y svg).
- transparent = False, si es True, creará una gráfica de fondo transparente.
>>> plt.savefig('figura3.eps', dpi = 300) #guarda la gráfica con 300dpi (puntos por pulgada)
Asimismo, podemos usar la sintaxis de Latex para hacer más precisas y elegantes nuestras etiquetas. Lo único que debemos hacer es poner nuestra cadena de texto de la siguiente forma: r’cadena latex’. Por ejemplo:
xlabel(r'$\lambda (\AA)$')
4.3.2. Ejemplo: gráfica simple en una dimensión
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Carga de los módulos necesarios
import scipy as sp
import matplotlib.pyplot as plt
# Creamos el array x de cero a cien con cien puntos
x = sp.linspace(0, 10, 100)
# Creamos el array y conde cada punto es el seno de cada elemento de x
y = sp.sin(x)
# Creamos una figura
plt.figure()
# Representamos
plt.plot(x,y)
# Mostramos en pantalla
plt.show()
4.3.3. Ejemplo: gráfica completa en una dimensión
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import division
#----------------------------------------------------------------------
# Nombre: ejemplo_matplotlib_grafica_completa.py
# Propósito: Aprender a realizar una gráfica lo más completa posible
#
# Origen: Propio.
# Autor: Luis Miguel Sánchez-Brea,José MarÃa Herrera-Fernandez
#
# Creación: 18 de Septiembre de 2013
# Historia:
#
# Dependencias: numpy, matplotlib
# Licencia: GPL
#----------------------------------------------------------------------
"""
Descripción: Doble gráfica senoidal donde se muestran la mayorÃa de los complementos
que se pueden añadir a una gráfica
"""
import numpy as np # Cargamos numpy como el alias np
import matplotlib.pyplot as plt # Crgagamos matplotlib.pyplot como el alias plt
# Definimos el periodo de la función
periodo = 0.5
# Definimos el array dimensional
x = np.linspace(0, 2, 1000)
# Definimos la función senoidal
y = np.sin(2*np.pi*x/periodo)
# Creamos la figura
plt.figure()
# Dibujamos en negro discontinuo con etiqueta y1
plt.plot(x, y, 'k--', linewidth = 2, label = 'y1')
# Mantenemos la misma figura parta la siguiente gráfica
plt.hold(True)
# Esta vez dibujamos - y en rojo co etiqueta y2
plt.plot(x,-y,'r', linewidth = 2, label = 'y2')
# Añadimos la leyenda
plt.legend(loc = 2)
# Añadimos las etiquetas poniermo en Latex "mu" sÃmbolo de micras
plt.xlabel(r"$x (\mu m)$", fontsize = 24, color = (1,0,0))
plt.ylabel(r"$y (\mu m)$", fontsize = 24, color = 'blue')
# Añadimos texto
plt.text(x = 1, y = 0.0, s = u'T = 0.05', fontsize = 24)
# Añadimos la rejilla
plt.grid(True)
plt.grid(color = '0.5', linestyle = '--', linewidth = 1)
# Añadimos los ejes
plt.axis('tight')
# Añadimos el tÃtulo
plt.title('(a)',fontsize = 28, color = '0.75', verticalalignment = 'baseline', horizontalalignment = 'center')
# Guardamos
plt.savefig('plotCompleta.png')
# Mostramos en pantalla
plt.show()
4.3.4. Ejemplo: Varías gráficas individuales en una figura
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import division
#----------------------------------------------------------------------
# Nombre: ejemplo_matplotlib_subplot.py
# Propósito: Aprender a mostrar varÃas gráficas separadas en una figura
#
# Origen: Propio.
# Autor: Luis Miguel Sánchez-Brea,José MarÃa Herrera-Fernandez
#
# Creación: 18 de Septiembre de 2013
# Historia:
#
# Dependencias: numpy, matplotlib
# Licencia: GPL
#----------------------------------------------------------------------
"""
Descripción: En este ejemplo se muestra como realizar la presentanción de varÃas
gráficas individuales en una misma figura mediante "subplot"
"""
import numpy as np # Cargamos numpy como el alias np
import matplotlib.pyplot as plt # Crgagamos matplotlib.pyplot como el alias plt
# Definimos el periodo de la gráfica senoidal
periodo = 2
# Definimos el array dimensional
x = np.linspace(0, 10, 1000)
# Definimos la función senoidal
y = np.sin(2*np.pi*x/periodo)
# Creamos la figura
plt.figure()
# Primera gráfica
plt.subplot(2,2,1)
plt.plot(x, y,'r')
# Segunda gráfica
plt.subplot(2,2,2)
plt.plot(x, y,'g')
# Tercera gráfica
plt.subplot(2,2,3)
plt.plot(x, y,'b')
# Cuarta gráfica
plt.subplot(2,2,4)
plt.plot(x, y,'k')
# Mostramos en pantalla
plt.show()
4.3.5. Ejemplo: Gráfica en dos dimensiones
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import division
#----------------------------------------------------------------------
# Nombre: ejemplo_matplotlib_imshow.py
# Propósito: Aprender a realizar una gráfica en 2D
#
# Origen: Propio.
# Autor: Luis Miguel Sánchez-Brea,José MarÃa Herrera-Fernandez
#
# Creación: 18 de Septiembre de 2013
# Historia:
#
# Dependencias: numpy, matplotlib
# Licencia: GPL
#----------------------------------------------------------------------
"""
Descripción: En este ejemplo se muestra como realizar una gráfica en dos dimensiones
mediante imshow
"""
import numpy as np # Cargamos numpy como el alias np
import matplotlib.pyplot as plt # Crgagamos matplotlib.pyplot como el alias plt
# Creamos una figura
plt.figure()
# Creamos los arrays dimensionales
x = np.arange(-5, 5, 0.01)
y = np.arange(-5, 5, 0.01)
# Obtenemos las corrdenadas resultantes de esos arrays
X, Y = np.meshgrid(x, y)
# Definimos la gráfica sen (x^2 + y^2)
fxy = np.sin(X**2+Y**2)
# Representamos
plt.imshow(fxy);
# Añadimos una colorbar
plt.colorbar();
# Mostramos en pantalla
plt.show()
4.3.6. Ejemplo: Gráfica en tres dimensiones
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import division
#----------------------------------------------------------------------
# Nombre: ejemplo_matplotlib_grafica_superficie3d.py
# Propósito: Aprender como leer una image y representar una grafica en 3D.
#
# Origen: Propio .
# Autor: José MarÃa Herrera-Fernandez
#
# Creación: 18 de Septiembre de 2013
# Historia:
#
# Dependencias: scipy, mpl_toolkits, matplotlib, numpy
# Licencia: GPL
#----------------------------------------------------------------------
"""
Descripción: Ejemplo de cómo usar la función integrate para realizar integrales
numéricas en python.
"""
from mpl_toolkits.mplot3d import Axes3D # Cargo Axes3D de mpl_toolkits.mplot3d
from scipy.misc import imread # Cargo imread de scipy.misc
import numpy as np # Cargo numpy como el aliaas np
import matplotlib.pyplot as plt # Cargo matplotlib.pyplot en el alias sp
# Leo una imagen y la almaceno en imagen_superficial
imagen_superficial = imread('fondo.jpg')
# Creo una figura
plt.figure()
# Muestro la imagen en pantalla
plt.imshow(imagen_superficial)
# Añado etiquetas
plt.title('Imagen que usaremos de superficie')
plt.xlabel(u'# de pÃxeles')
plt.ylabel(u'# de pÃxeles')
# Creo otra figura y la almaceno en figura_3d
figura_3d = plt.figure()
# Indicamos que vamos a representar en 3D
ax = figura_3d.gca(projection = '3d')
# Creamos los arrays dimensionales de la misma dimensión que imagen_superficial
X = np.linspace(-5, 5, imagen_superficial.shape[0])
Y = np.linspace(-5, 5, imagen_superficial.shape[1])
# Obtenemos las coordenadas a partir de los arrays creados
X, Y = np.meshgrid(X, Y)
# Defino la función que deseo representar
R = np.sqrt(X ** 2 + Y ** 2)
Z = np.sin(R)
# Reescalamos de RGB a [0-1]
imagen_superficial = imagen_superficial.swapaxes(0, 1) / 255.
# meshgrid orienta los ejes al revés luego hay que voltear
ax.plot_surface(X, Y, Z, facecolors = np.flipud(imagen_superficial))
# Fijamos la posición inicial de la grafica
ax.view_init(45, -35)
# Añadimos etiquetas
plt.title(u'Imagen sobre una grafica 3D')
plt.xlabel('Eje x')
plt.ylabel('Eje y')
# Mostramos en pantalla
plt.show()
No hay comentarios:
Publicar un comentario