Matplotlib: John Cazador, Darren Valle, Eric Disparo, Miguel Droettboom y El
Matplotlib: John Cazador, Darren Valle, Eric Disparo, Miguel Droettboom y El
Liberar 2.0.2
1 Introducción 3
2 Instalación 5
3 Tutoriales 11
5 Colores 145
11 Licencia 417
12 Créditos 421
i
18 artista Módulo 535
22 libro 953
24 colecciones 975
26 colores 1151
27 contenedor 1165
28 Fechas 1167
29 Dviread 1181
30 figura 1185
31 Finanzas 1207
34 imagen 1231
36 líneas 1245
37 marcadores 1255
41 parches 1325
42 camino 1367
44 proyecciones 1379
i
45 diagrama de pyplot 1387
46 configuración rc 1593
47 Sankey 1597
48 escala 1605
49 espinas 1615
50 estilo 1619
51 texto 1621
52 Cotizacion 1635
57 unidades 1685
58 widgets 1687
59 Instalación 1705
60 Uso 1713
iii
68 El Matplotlib Cuadrícula de ejes Kit de herramientas API 1795
V mplot3d 1823
75 Vídeos 1897
76 Tutoriales 1899
77 Contribuyendo 1903
86 Licencias 2017
i
IX Matplotlib Ejemplos 2023
v
X Glosario 3015
Bibliografía 3019
Índice 3023
v
Parte I
1
CHAPT
UNO
INTRODUCCIÓN
Matplotlib es una biblioteca para crear gráficos 2D de matrices en Python . Aunque tiene su origen en
emular el MATLAB® 1 gráficos órdenes, él es independiente de MATLAB, y poder ser usado en a
Pythonic, método orientado a objetos. Aunque Matplotlib está escrito principalmente en Python puro,
hace un uso intensivo de NumPy y otros códigos de extensión para proporcionar un buen rendimiento
incluso para matrices grandes.
Matplotlib está diseñado con la filosofía de que usted debería poder crear gráficos simples con solo unos
pocos comandos, o justo ¡uno! Si tú desear a ver a histograma de su datos, tú no debería necesidad a
instanciar objetos, llamar a métodos, establecer propiedades, etc., debería funcionar.
Para años, I usado a usar MATLAB exclusivamente para datos análisis y visualización. MATLAB
sobresale en haciendo lindo mirando Parcelas fácil. Cuando I comenzó laboral con EEG datos, I encontró
eso I necesario a escribir aplicaciones para interactuar con mi datos, y desarrollado un EEG análisis
solicitud en MATLAB. Como el solicitud creció en complejidad, interactuando con bases de datos,
servidores http, manipulando estructuras de datos complejas, comencé a esforzarme contra el limitaciones
de MATLAB como a programación idioma, y decidido a comenzar encima en Pitón. Pitón más que
marcas arriba para todo de de MATLAB deficiencias como a programación idioma, pero I era teniendo
dificultades para encontrar un paquete de gráficos 2D (para 3D VTK supera con creces todas mis
necesidades).
Cuando I fue búsqueda para a Pitón Conspirando paquete, I tenía varios Requisitos:
• Parcelas debería mirar excelente - publicación calidad. Uno importante requisito para a mí es eso el
texto se ve bien (antialiasing, etc.)
• Posdata producción para inclusión con Texas documentos
• Integrable en a gráfico usuario interfaz para solicitud desarrollo
• Código debería ser fácil suficiente eso I poder entender él y extenderlo
• Haciendo Parcelas debería ser fácil
Descubrimiento No paquete eso adecuado a mí justo bien, I hizo qué cualquier Auto-respetuoso Pitón
programador quería hacer: me arremangué y me sumergí. Como no tenía mucha experiencia con gráficos
por computadora, decidí emularlos. de MATLAB Conspirando capacidades porque eso es algo MATLAB
hace muy Bueno, esto tenía El añadido ventaja eso muchos gente tener a lote de MATLAB experiencia, y
de este modo ellos poder rápidamente conseguir arriba Cocer al vapor Conspirando en pitón. Desde a del
desarrollador perspectiva, teniendo a fijado usuario interfaz (el Laboratorio de Pylab La interfaz ha sido
muy útil, porque se pueden rediseñar las entrañas del código base sin afectar el código del usuario.
El código de Matplotlib se divide conceptualmente en tres partes: La interfaz de Pylab es el conjunto de
funciones proporcionadas por matplotlib.pylab cual permitir el usuario a crear Parcelas con código
bastante similar a MATLAB
3
Matplotlib, Release
1
MATLAB es a registrado marca de El Trabajos matemáticos, Cª
4 Chapter 1.
cifra generando código ( Diagrama de diagrama tutorial ). El Matplotlib Interfaz o Matplotlib API es el
colocar de clases que hacen el trabajo pesado, creando y administrando figuras, texto, líneas, gráficos, etc.
CHAPTson
( Tutorial de artista ). Este es un resumen interfaz eso sabe nada acerca de producción. El backends
dependiente del dispositivo dibujo dispositivos, También conocidos como renderizadores. eso transformar
el Interfaz representación a copia impresa o a mostrar dispositivo ( Qué es a backend? ). Ejemplos de
backends: PS crea una copia impresa de PostScript ® , SVG crea una copia impresa de gráficos
vectoriales escalables , Agg crea una salida PNG utilizando la biblioteca Anti-Grain Geometry de alta
calidad que viene con Matplotlib, GTK incrusta Matplotlib en a Gtk + solicitud, GTKAgg usos el Anti-
grano renderizador a crear a cifra e incrustarlo en una aplicación Gtk + , y así sucesivamente para PDF ,
WxWidgets , Tkinter , etc.
Matplotlib es usado por muchos gente en muchos diferente contextos. Algunos gente desear a
automáticamente generar archivos PostScript para enviar a una impresora o editorial. Otros implementan
Matplotlib en un servidor de aplicaciones web para generar PNG producción para inclusión en generado
dinámicamente web Páginas. Algunas usar Matplotlib de forma interactiva desde el shell de Python en
Tkinter en Windows ™ . Mi uso principal es integrar Matplotlib en una aplicación Gtk + EEG que se
ejecuta en Windows, Linux y Macintosh OS X.
5
Matplotlib, Release
DOS
INSTALACIÓN
Allá son muchos diferente maneras a instalar matplotlib, y el mejor forma depende en qué operante
sistema estás usando, lo que ya tienes instalado y cómo quieres usarlo. Para evitar tener que revisar todos
los detalles (y posibles complicaciones) de esta página, hay varias opciones convenientes.
El primero opción es a usar uno de el preenvasado pitón distribuciones eso ya proporcionar Matplotlib La
distribución Python Continuum.io ( Anaconda o miniconda ) y la distribución Enthought (Canopy) son
ambos excelente opciones eso "justo trabajar" afuera de el caja para Ventanas, OS X y común Linux
plataformas. Ambas distribuciones incluyen matplotlib y muchas otras herramientas útiles.
Si tú son en Linux, tú podría preferir a usar su paquete gerente.matplotlib es empaquetado para casi cada
distribución principal de Linux.
• Debian / Ubuntu : sudo apt-obtener instalar Matplotlib de Python
• Fedora / Sombrero rojo : sudo Mmmm instalar Python- matplotlib
2.1.4 Ventanas
Si tú no ya tener Pitón instalado, nosotros recomendar usando uno de el pila de scipy compatible
Distribuciones de Python como WinPython, Python(x,y), Enthought Canopy o Continuum Anaconda, que
tienen matplotlib y muchas de sus dependencias, además de otros paquetes útiles, preinstalados.
Para estándar Pitón instalaciones, instalar Matplotlib usando pipa :
4 Chapter 1.
Matplotlib, Release
En caso Pitón 2.7 o 3.4 son no instalado para todo usuarios, el Microsoft Visual C ++ 2008 ( 64 poco o 32
poco para Python 2.7) o Microsoft Visual C ++ 2010 ( 64 poco o 32 poco para Pitón 3.4) redistribuible
paquetes necesidad para ser instalado.
Matplotlib depende en Almohada para lectura y ahorro JPEG, BMP, y PELEA imagen archivos.
Matplotlib requiere MiKTeX y Guión fantasma para representación texto con Látex. FFmpeg ,
convección avanzada , codificador de hombres , o Imagen Mágica Son necesarios para el módulo de
animación.
Los siguientes backends deberían funcionar de inmediato: agg, tkagg, ps, pdf y svg. Para otros backends,
es posible que necesites instalar pycairo , PyQt4 , PyQt5 , PySide , wxPython , PyGTK , Tornado o
GhostScript.
TkAgg es probablemente el mejor backend para uso interactivo desde el shell Python estándar o IPython.
Está habilitado como backend predeterminado para los binarios oficiales . GTK3 no es compatible con
Windows.
El Ventanas ruedas ( *.whl ) en el PyPI descargar página hacer no contener prueba datos o
ejemplo código. Si tú desear a intentar el muchos población eso venir en el Matplotlib fuente
distribución, Descargue el archivo *.tar.gz y busque en el subdirectorio de ejemplos . Para ejecutar
el conjunto de pruebas, copie los directorios lib\matplotlib\tests y lib\mpl_toolkits\tests de la
distribución de origen a sys. prefix\Lib\site-packages\matplotlib y sys.prefix\Lib\site-
packages\mpl_toolkits respectivamente. y instalar nariz , imitar , Almohada, MiKTeX, Guión
fantasma, para mpeg, conversión av codificador de hombres, ImageMag- ick y Inkscape .
Si tú son interesado en contribuyendo a Matplotlib desarrollo, correr el el último fuente código, o justo
como Para construir todo tú mismo, él es no difícil a construir Matplotlib de fuente. agarrar el el último
archivo tar.gz liberar archivo de el PyPI archivos página , o si tú desear a desarrollar Matplotlib o justo
necesidad el el último Error corregido versión, Obtenga la última versión de git . Instale la fuente desde
git .
El estándar ambiente variables C.C. , CXX , CONFIGURACIÓN DEL PAQUETE son respetado. Este
medio tú poder colocar a ellos Si su cadena de herramientas tiene prefijo, esto puede usarse para
compilación cruzada.
export
Una CC=x86_64-pc-linux-gnu-gcc
vez CXX=x86_64-pc-linux-gnu-g+
tú tener satisfecho el Requisitos detallado abajo (principalmente pitón, Numeroso, libpng y tipo
export
+
libre), Puedes construir matplotlib.
export PKG_CONFIG=x86_64-pc-linux-gnu-pkg-config
cd matplotlib
Nosotros proporcionar a configuración.cfg archivo eso va con configuración.py cual tú poder usar a
python setup.py
personalizar build
el construir proceso. Por ejemplo, cual por defecto backend a usar, si alguno de el opcional
python setup.py install
bibliotecas eso Matplotlib barcos con están instalados, y así sucesivamente. Este archivo será
particularmente útil para aquellos que empaquetan matplotlib.
6 Chapter 2.
Matplotlib, Release
Si ha instalado requisitos previos en lugares no estándar y necesita informar a matplotlib dónde están,
edite setupext.py y agrega los directorios base al directorio base entrada de diccionario para su
sys.platform . Por ejemplo, si el encabezado de alguna biblioteca requerida está en
/some/path/include/someheader.h , coloque /some/path en la lista basedir de su plataforma.
Estos son externo paquetes cual tú voluntad necesidad a instalar antes Instalación archivo matplotlib. Si tú
son edificio en OSX, ver Edificio en Sistema operativo OS X. Si tú son edificio en Ventanas, ver Edificio
en Ventanas . Si tú son Al instalar dependencias con un administrador de paquetes en Linux, es posible
que necesite instalar los paquetes de desarrollo (busque el sufijo “-dev”) además de las bibliotecas
mismas.
Requerido Dependencias
Estos son paquetes opcionales que puede que desee instalar para usar matplotlib con un conjunto de
8 Chapter 2.
Matplotlib, Release
gracias 8.3 o más tarde, no 8.6.0 o 8.6.1 El TCL / Tk widgets biblioteca usado por el TkAgg back-end.
Versiones 8.6.0 y 8.6.1 son conocido a tener asuntos eso puede resultado en errores de
segmentación cuando cierre Varias ventanas en el orden incorrecto.
pyqt 4.4 o más tarde El Qt4 widgets biblioteca pitón Envoltorios para el Qt4Agg backend
Pygtk-es 2.4 o más tarde Los envoltorios de Python para la biblioteca de widgets GTK para usar con el
backend GTK o GTKAgg
wxpython 2.8 o más tarde Los envoltorios de Python para la biblioteca de widgets wx para usar con el
backend WX o WXAgg
ffmpeg / avconv o codificador de hombres Requerido para el animación módulo a ser ahorrar afuera poner a
película formatos.
Imagen Mágica Requerido para el animación módulo a ser capaz a ahorrar a animado gif.
Opcional Dependencias
Almohada Si Almohada es instalado, Matplotlib poder leer y escribir a Más grande selección de imagen archivo
formatos.
configuración del paquete Una herramienta utilizada para encontrar las bibliotecas que no son de
Python necesarias. Esto no es estrictamente necesario, pero puede hacer que la instalación sea más
sencilla si las bibliotecas y los encabezados no están en las ubicaciones esperadas.
Sisudo apt-get
tú son build-dep
en Fedora python-matplotlib
/ Red Hat, tú poder conseguir todo el Dependencias requerido a construir Matplotlib por primero
Instalación
yum-builddep y entonces correr:
su -c "yum-builddep python-matplotlib"
Este hace no construir matplotlib, pero él hace conseguir el instalar el construir dependencias, cual
voluntad hacer Construir desde la fuente es más fácil.
2.2.3 Edificio en OS X
La situación de compilación en OSX es complicada por los diversos lugares donde se pueden obtener los
requisitos de libpng y freetype (darwinports, fink, / usr / X11R6) y las diferentes arquitecturas (por
ejemplo, x86, ppc, universal) y la diferente OS X versión (por ejemplo, 10,4) y 10.5). Nosotros
recomendar eso tú construir el forma nosotros hacer para el Versión de OSX: obtener el fuente de el
paquete tar o el git repositorio y seguir el instrucción en README.osx .
El Pitón enviado de https://www.python.org es compilado con Visual Estudio 2008 para versiones antes
de 3.3, Visual Studio 2010 para 3.3 y 3.4, y Visual Studio 2015 para 3.5 y 3.6. Se recomienda compilar
las extensiones de Python con el mismo compilador.
Desde allá es No canónico Ventanas paquete gerente, el métodos para edificio tipografía libre, libreta, y
libpng del código fuente está documentado como un script de compilación en matplotlib-winbuild .
1 Chapter 2.
Matplotlib, Release
TRES
TUTORIALES
3.1 Introductorio
matplotlib.pyplot es una colección de funciones de estilo comando que hacen que matplotlib funcione
como MATLAB. Cada una diagrama de py función marcas alguno cambiar a a cifra: p.ej, crea a cifra,
crea a Conspirando área en a figura, traza algunas líneas en un área de trazado, decora el trazado con
etiquetas, etc. En matplotlib.pyplot se encuentran varios estados en conserva al otro lado de función
llama, entonces eso él mantiene pista de cosas como el actual cifra y Conspirando área, y el Conspirando
funciones son Dirigido a el actual ejes (por favor nota eso “ejes” aquí y en mayoría lugares en el
documentación se refiere a el ejes parte de a cifra y no el estricto matemático término para más que un
eje).
import matplotlib.pyplot as
plt plt.plot([1,2,3,4])
plt.ylabel('some
numbers') plt.show()
1
Matplotlib, Release
4.0
3.5
3.0
2.5
some
2.0
1.5
1.0
Quizás te preguntes por qué el eje x varía de 0 a 3 y el eje y de 1 a 4. Si proporciona una sola lista o
matriz al comando plot() , matplotlib asume que es una secuencia de valores y y genera automáticamente
el incógnita valores para Tú. Desde entonces pitón rangos comenzar con 0, el por defecto incógnita vector
tiene el mismo longitud como y pero comienza con 0. Por lo tanto, los datos x son [0,1,2,3] .
plot() es un comando versátil y tomará una cantidad arbitraria de argumentos. Por ejemplo, para trazar x
versus y, puede emitir el comando:
1 Chapter 3.
Matplotlib, Release
20.0
17.5
15.0
12.5
10.0
7.5
5.0
2.5
0.0
0 1 2 3 4 5 6
Ver la trama() documentación para obtener una lista completa de estilos de línea y cadenas de formato.
El eje() Comando en el ejemplo arriba acepta a lista de [xmin, xmáx, ymín, ymáx] y especifica el
ventana gráfica de el ejes.
Si Matplotlib eran limitado a laboral con liza, él quería ser equitativamente inútil para numérico
tratamiento. Generalmente, utilizarás matrices numpy . De hecho, todas las secuencias se convierten en
matrices numpy internamente. El siguiente ejemplo ilustra cómo trazar varias líneas con diferentes
estilos de formato en un comando utilizando matrices.
import numpy as np
import matplotlib.pyplot as plt
3.1. 1
Matplotlib, Release
100
80
60
40
20
0 1 2 3 4 5
Pauta tener muchos atributos eso tú poder colocar: ancho de línea, guión estilo, suavizado, etc.; ver
matplotlib.lines. Line2D . Existen varias formas de configurar las propiedades de línea.
• Usar palabra clave argumentos:
plt.plot(x,
• Usar el setter y, linewidth=2.0)
métodos de a Línea 2D instancia. trama devoluciones a lista de Línea 2D
objetos; p.ej, línea1, línea2 = plot(x1, y1, x2, y2) . En el código abajo nosotros
voluntad suponer eso nosotros tener solo uno línea para que la lista devuelta tenga longitud 1.
Usamos desempaquetado de tuplas con línea, Para obtener el primer elemento de esa lista:
line, el
• Utilice = plt.plot(x,
comando setp()y, .'-')
El siguiente ejemplo utiliza un comando de estilo MATLAB para
line.set_antialiased(False)
establecer múltiples propiedades en #a turn off líneas.setp
lista de antialisingobras transparentemente con a lista de
objetos o a soltero objeto. tú Puede utilizar argumentos de palabras clave de Python o pares de cadenas /
valores de estilo MATLAB :
1 Chapter 3.
Matplotlib, Release
Llegar a lista de configurable propiedades de línea, llamar el establecer() función con a línea o lineas como
3.1. 1
Matplotlib, Release
argumento
1 Chapter 3.
Matplotlib, Release
...snip
MATLAB y pyplot tienen el concepto de la figura actual y los ejes actuales. Todos los comandos de
trazado se aplican a los ejes actuales. La función gca() devuelve los ejes actuales (una instancia de
matplotlib.axes.Axes ) y gcf() devoluciones el actual cifra ( instancia matplotlib.figure.Figure ).
Normalmente no lo haces tener a preocuparse acerca de Esto, porque él es todo tomado cuidado de
detrás el escenas. Abajo es a guion a crear dos subtramas.
import numpy as np
import matplotlib.pyplot as plt
def f(t):
return np.exp(-t) * np.cos(2*np.pi*t)
plt.subplot(212)
plt.plot(t2, np.cos(2*np.pi*t2), 'r--')
plt.show()
3.1. 1
Matplotlib, Release
1.0
0,5
0.0
0,5
0 1 2 3 4 5
1.0
0,5
0.0
0,5
1.0
0 1 2 3 4 5
El comando figure() aquí es opcional porque figure(1) se creará de manera predeterminada, así como
se creará subplot(111) de manera predeterminada si no especifica manualmente ningún eje. El
comando subplot( ) especifica números, números coloidales, figura dónde figura rangos de 1 a
numfilas*numcols . Las comas En la subtrama Los comandos son opcionales si
numfilas*numcols<10 . Entonces subtrama(211) es idéntico a subtrama(2, 1, 1) . Tú poder
crear un arbitrario número de subtramas y ejes. Si tú desear a Para colocar un eje manualmente, es
decir, no en una cuadrícula rectangular, utilice el comando axes() , que le permite especificar la
ubicación como axes([izquierda, abajo, ancho, altura]) donde todos los valores están en
coordenadas fraccionarias (0 a 1). Ver ejemplos_de_pylab ejemplo código: axes_demo.py para un ejemplo
de colocación ejes a mano y código de ejemplo de pylab_examples: subplots_demo.py para un ejemplo
con muchas subparcelas.
Puede crear varias figuras utilizando múltiples llamadas figure() con un número de figura creciente. Por
supuesto, cada figura puede contener tantos ejes y subtramas como tu corazón desee:
Puede borrar la figura actual con clf() y los ejes actuales con cla() . Si te molestan esos estados
(específicamente el actual imagen, cifra y ejes) son ser mantenido para tú detrás el escenas, No te
desesperes: Esto es solo una envoltura delgada con estado alrededor de una API orientada a objetos, que
puedes usar en su lugar (ver el tutorial de Artist )
Si tú son haciendo lotes de cifras, tú necesidad a ser consciente de uno más cosa: la memoria requerido
para a La figura no se libera por completo hasta que se cierra explícitamente con close() . Eliminar todas
las referencias a la figura, y / o usando el ventana gerente a matar el ventana en cual el cifra aparece en el
pantalla, es no es suficiente, porque pyplot mantiene referencias internas hasta que se llama a close() .
El texto() dominio poder ser usado a agregar texto en un arbitrario ubicación, y el etiquetax() , y etiqueta()
y
título() son usado a agregar texto en el indicado Ubicaciones (ver Texto introducción para a más detallado
ejemplo)
import numpy as np
import matplotlib.pyplot as plt
plt.xlabel('Smarts')
plt.ylabel('Probability')
plt.title('Histogram of IQ')
plt.text(60, .025, r'$\mu=100,\ \
sigma=15$') plt.axis([40, 160, 0, 0.03])
plt.grid(True)
plt.show()
3.1. 1
Matplotlib, Release
0,025 = 100,= 15
0,020
Probabili
0,015
0,010
0,005
0.000
40 60 80 100 120 140 160
Picardía
Todo de el texto() Comandos devolver un Instancia de matplotlib.text.Text . Justo como con con
pauta Arriba, puedes personalizar las propiedades pasando argumentos de palabras clave a las funciones
de texto o usando setp() :
Matplotlib acepta Texas ecuación expresiones en cualquier texto expresión. Para ejemplo a escribir el expresión
σ yo = 15 en el título, tú poder escribir a Texas expresión rodeado por dólar señales:
plt.title(r'$\sigma_i=15$')
La r que precede a la cadena de título es importante: significa que la cadena es una cadena sin formato y
que no se deben tratar las barras invertidas. como pitón escapes.matplotlib tiene a incorporado Texas
expresión Analizador sintáctico y disposición motor, y sus barcos propio matemáticas fuentes – para
detalles ver Escribiendo matemático expresiones . Por lo tanto tú poder usar matemático texto a través
plataformas sin Requerimiento a Texas Instalación. Para aquellos OMS tener Látex y Desplazamiento
instalado, puede también usar Látex a formato su texto y incorporar el producción directamente en su
mostrar cifras o posdata guardada – ver Representación de texto con LaTeX .
2 Chapter 3.
Matplotlib, Release
Anotación texto
El usos de el básico texto() dominio arriba lugar texto en un arbitrario posición en el Ejes. A común
utilizar para texto es a anotar alguno característica de el trama, y el anotar() método proporciona
ayudante Funcionalidad para facilitar las anotaciones. En una anotación, hay dos puntos a tener en
cuenta: la ubicación que se está anotando, representada por el argumento xy y la ubicación del texto
xytext . Ambos argumentos son tuplas (x,y) .
import numpy as np
import matplotlib.pyplot as plt
ax =2.0
plt.subplot(111)
t = np.arange(0.0, 5.0,
0.01) s = np.cos(2*np.pi*t)
1.5 local max
line, = plt.plot(t, s, lw=2)
plt.annotate('local
1.0 max', xy=(2, 1), xytext=(3, 1.5),
arrowprops=dict(facecolor='black', shrink=0.05),
)
0,5
plt.ylim(-2,2)
plt.show()
0.0
0,5
1.0
1.5
2.0
0 1 2 3 4 5
En este básico ejemplo, ambos el xy (punta de flecha) y texto xy Ubicaciones (ubicación del texto) son en
coordenadas de datos.
3.1. 2
Matplotlib, Release
Allá son a variedad de otro coordinar sistemas uno poder elegir – ver Básico anotación y Avanzado
Anotación para más detalles. Se pueden encontrar más ejemplos en el código de ejemplo de
pylab_examples: annotation_demo.py .
matplotlib.pyplot admite no solo lineal eje escalas, pero también logarítmico y logit balanza. Este
Se utiliza habitualmente si los datos abarcan varios órdenes de magnitud. Cambiar la escala de un eje es
fácil:
plt.xscale('registro')
Un ejemplo de cuatro Parcelas con el mismo datos y diferente balanza para el y eje es mostrado abajo.
import numpy as np
import matplotlib.pyplot as plt
# log
plt.subplot(22
2) plt.plot(x,
y)
plt.yscale('lo
g')
plt.title('log')
plt.grid(True
)
# symmetric log
plt.subplot(223)
plt.plot(x, y -
y.mean())
plt.yscale('symlog', linthreshy=0.01)
plt.title('symlog')
plt.grid(True)
# logit
2 Chapter 3.
Matplotlib, Release
plt.subplot(224)
plt.plot(x, y)
plt.yscale('logit')
plt.title('logit')
plt.grid(True)
# Format the minor tick labels of the y-axis into empty strings with
# `NullFormatter`, to avoid cumbering the axis with too many labels.
plt.gca().yaxis.set_minor_formatter(NullFormatter())
# Adjust the subplot layout, because the logit one may take more space
# than usual, due to y-tick labels like "1 - 10^{-3}"
plt.subplots_adjust(top=0.92, bottom=0.08, left=0.10, right=0.95, hspace=0.25,
wspace=0.35)
plt.show()
lineal registro
1.0 10
0
0,8
0.6
10 1
0,4
0,2
10 2
0.0
0 250 500 750 0 250 500 750
simlog logit
10 1 1 10 3
10 2 0,99
0,90
0
0,50
10 2
0,10
10 1
0,01
10 0
Él es también posible a agregar su propio escala, ver Del desarrollador guía para creando balanza y
transformaciones Para más detalles.
3.1. 2
Matplotlib, Release
Primero, iniciemos IPython. Es una mejora excelente del indicador estándar de Python y se conecta
especialmente bien con Matplotlib. Inicie IPython en un shell o en el cuaderno de notas de IPython ahora.
Con IPython Empezamos, nosotros ahora necesidad a conectar a a Interfaz gráfica de usuario evento
bucle. Este dice IPython dónde (y cómo) Para mostrar Parcelas. conectar a a Interfaz gráfica de usuario
bucle, ejecutar el %matplotlib magia en su IPython Hay más detalles sobre exactamente lo que esto hace
en la documentación de IPython sobre bucles de eventos de GUI .
Si estás usando IPython Cuaderno, el mismo Comandos son disponible, pero gente comúnmente usar a
argumento específico para la magia %matplotlib:
Cargando imagen datos es apoyado por el Almohada biblioteca. De forma nativa, Matplotlib solo apoya
PNG Imágenes. Los comandos que se muestran a continuación recurren a Pillow si falla la lectura nativa.
El imagen usado en este ejemplo es a PNG archivo, pero mantener eso Almohada requisito en mente para
su propio Datos. Aquí está la imagen con la que vamos a jugar:
2 Chapter 3.
Matplotlib, Release
Es a 24 bits RGB PNG imagen (8 pedacitos para cada de R, GRAMO, B). Dependiente en dónde tú
conseguir su datos, el otros tipos de imagen eso Tú lo harás mayoría probable encontrar son RGBA
imágenes, cual permitir para transparencia, o monocanal escala de grises (luminosidad) Imágenes. Tú
poder bien hacer clic en él y elegir "Ahorrar imagen como" a Descárguelo a su computadora para seguir
el resto de este tutorial.
Y aquí nosotros ir...
...,
[[ 0,44313726 0,44313726 0,44313726],
3.1. 2
Matplotlib, Release
, ,
[ 0,4509804 , 0,4509804 , 0,4509804 ],
[ 0,4509804 , 0,4509804 , 0,4509804 ],
...,
[ 0,44705883, 0,44705883 0,44705883],
,
2 Chapter 3.
Matplotlib, Release
Tenga en cuenta el tipo de datos allí: float32. Matplotlib ha reescalado los datos de 8 bits de cada canal a
datos de punto flotante entre 0,0 y 1,0. Como nota al margen, el único tipo de datos con el que Pillow
puede trabajar es uint8. El trazado de Matplotlib puede manejar float32 y uint8, pero la lectura / escritura
de imágenes para cualquier formato que no sea PNG está limitada a uint8 datos. ¿Por qué? 8 ¿Bits? La
mayoría muestra poder solo prestar 8 pedacitos por canal valer de color Gradación. ¿Por qué solo pueden
renderizar 8 bits por canal? Porque eso es todo lo que el ojo humano puede ver. Más aquí (desde el
punto de vista fotográfico): Tutorial de profundidad de bits de paisaje luminoso .
Cada interno lista representa a píxel. Aquí, con un RGB imagen, allá son 3 valores. Desde es a negro y
imagen blanca, R, GRAMO, y B son todo similar. Un RGBA (dónde A es alfa, o transparencia), tiene 4
valores por interno lista, y a simple luminancia imagen justo tiene uno valor (y es de este modo solo a 2-D
matriz, no a 3-D formación). Para RGB y RGBA imágenes, Matplotlib apoya flotador32 y uint8 datos
tipos. Para escala de grises, Matplotlib apoya Solo float32. Si los datos de su matriz no cumplen con una
de estas descripciones, deberá reescalarla.
Entonces, tienes tus datos en una matriz numpy (ya sea importándolos o generándolos). Vamos a
renderizarlo. En Matplotlib, esto se realiza mediante la función imshow() . Aquí tomaremos el objeto de
la trama. Este objeto le ofrece una forma sencilla de manipular la trama desde el indicador.
50
100
150
200
250
300
350
3.1. 2
Matplotlib, Release
El pseudocolor puede ser una herramienta útil para mejorar el contraste y visualizar sus datos más
fácilmente. Esto es especialmente útil cuando haciendo presentaciones de su datos usando Proyectores -
su contraste es típicamente bastante pobre
El pseudocolor solo es relevante para imágenes de luminosidad, en escala de grises y de un solo canal.
Actualmente tenemos una imagen RGB. Dado que R, G y B son todos similares (compruébelo usted
mismo arriba o en sus datos), podemos elegir solo un canal de nuestros datos:
In [8]: plt.imshow(lum_img)
50
100
150
200
250
300
350
Ahora, con a luminosidad (2D, No color) imagen, el por defecto mapa de colores (también conocido
como buscar mesa, LUT-LUT), es Se aplica. El valor predeterminado se llama viridis. Hay muchos otros
para elegir.
2 Chapter 3.
Matplotlib, Release
50
100
150
200
250
300
350
Nota eso tú poder también cambiar mapas de colores en existente trama objetos usando el establecer_cmap()
método:
3.1. 2
Matplotlib, Release
50
100
150
200
250
300
350
Nota: Sin embargo, recordar eso en el IPython computadora portátil con el en línea parte trasera, tú no
poder hacer cambios a Parcelas eso tener ya estado prestado. Si tú crear gráfico de imágenes aquí en uno
celúla, tú no puedo llamar set_cmap() en él en a más tarde celúla y esperar el más temprano trama a
cambiar. hacer seguro eso tú ingresar estos Comandos juntos en una celda. Los comandos plt no
cambiarán los gráficos de las celdas anteriores.
Allá son muchos otro mapa de colores esquemas disponible. Ver el lista y imágenes de el mapas de colores.
Es útil a tener un idea de qué valor a color representa. Nosotros poder hacer eso por añadiendo color verja.
3 Chapter 3.
Matplotlib, Release
0,8
0
0,7
50
0.6
100
150 0,5
200 0,4
250
0.3
300
0,2
350
0,1
0 100 200 300 400 500
0.0
Este añade a barra de colores a su existente figura. Esta no automáticamente cambiar si tú cambiar tú
cambiar a un mapa de colores diferente : debes volver a crear tu gráfico y agregar la barra de colores
nuevamente.
A veces desea mejorar el contraste de su imagen o expandir el contraste en una región particular
sacrificando el detalle en colores que no varían mucho o que no importan. Una buena herramienta para
encontrar regiones interesantes es el histograma. Para crear un histograma de los datos de nuestra imagen,
utilizamos hist() función.
3.1. 3
Matplotlib, Release
8000
6000
4000
2000
0
0,0 0,2 0,4 0,6 0,8 1,0
Mayoría a menudo, el "interesante" parte de el imagen es alrededor el cima, y tú poder conseguir extra
contraste por recortando el regiones arriba y / o abajo el pico. En nuestro histograma, él aspecto como
Hay no mucho útil información en el extremo superior (no hay muchas cosas blancas en la imagen).
Ajustemos el límite superior para que podamos hacer un “zoom” efectivo. en en" parte de el histograma.
Nosotros hacer este por paso el clima argumento a Imshow. Tú podría también Hazlo llamando a
set_clim() método del objeto de trazado de imagen, pero asegúrese de hacerlo en la misma celda como
su trama dominio cuando laboral con el IPython Computadora portátil - él voluntad no cambiar Parcelas
de células anteriores .
3 Chapter 3.
Matplotlib, Release
Antes Después
0 0
100 100
200 200
300 300
Interpolación calcula qué el color o valor de a píxel "debería" ser, de acuerdo a a diferente esquemas
matemáticos. Uno común lugar eso este sucede es cuando tú cambiar el tamaño un imagen.la número de
píxeles cambiar, pero quieres la misma información. Como los píxeles son discretos, falta espacio. La
interpolación es la forma de rellenar ese espacio. Es por eso que a veces tus imágenes se ven pixeladas
cuando las amplías. efecto es más pronunciado cuando el diferencia entre el original imagen y el
expandido La imagen es mayor. Vamos llevar nuestro imagen y encoger Eso es. Nosotros somos
efectivamente descartando píxeles, solo acuerdo a seleccionar pocos. ahora cuando nosotros trama él, eso
datos obtiene estropeado arriba a el tamaño en su pantalla. El viejo píxeles no son allá más, y la
computadora tiene que dibujar píxeles para llenar ese espacio.
Bien usar el Almohada biblioteca eso nosotros usado a carga el imagen también a cambiar el tamaño el imagen.
3.1. 3
Matplotlib, Release
10
20
30
40
0 10 20 30 40 50 60
Aquí nosotros tener el por defecto interpolación, bilineal, desde nosotros hizo no dar Mostrar() cualquier
interpolación argumento. Probemos con otros:
3 Chapter 3.
Matplotlib, Release
10
20
30
40
0 10 20 30 40 50 60
3.1. 3
Matplotlib, Release
10
20
30
40
0 10 20 30 40 50 60
Bicúbico interpolación es a menudo usado cuando soplo arriba fotos - gente tender a preferir borroso encima pixelado.
esaxidéntico
= plt.subplot2grid((2, 2), (0, 0))
a
3 Chapter 3.
Matplotlib, Release
ax = plt.subplot(2, 2, 1)
ax2ejemplo,
Para = plt.subplot2grid((3, 3), (1, 0), colspan=2)
el siguiente Comandos
ax3 = plt.subplot2grid((3, 3), (1, 2), rowspan=2)
eje = plt .subplot2 3 ) ( 0 0 ) colspan = 3
1 grid (( 3 , , , , )
eje = plt .subplot2 3 ) ( 1 0 ) colspan = 2
2 grid (( 3 , , , , )
eje = plt .subplot2 3 ) ( 1 2 ) intervalo de
3 grid (( 3 , , , , filas = 2 )
eje = plt .subplot2 3 ) ( 2 0 )
4 grid (( 3 , , , )
eje = plt .subplot2 3 ) ( 2 1 )
5 grid (( 3 , , , )
crea
subparcela 2 cuadrícula
ax1
ax2
ax3
ax4 ax5
3.1. 3
Matplotlib, Release
es igual a
import
Una matplotlib.gridspec
instancia as gridspec
de GridSpec proporciona una indexación similar a una matriz (2d o 1d) que devuelve la
gs = gridspec.GridSpec(2,
instancia de SubplotSpec.
2) ax = plt.subplot(gs[0,Para una SubplotSpec que abarca varias celdas, utilice slice.
0])
ax2
El = ejemplo
arriba plt.subplot(gs[1,
se convierte :-1])
en
ax3 = plt.subplot(gs[1:, -1])
gs = gridspec.GridSpec(3,
Especificación de
3) ax1 = plt.subplot(gs[0, cuadrícula
:]) ax2 = plt.subplot(gs[1,
:-1])
ax3 = plt.subplot(gs[1:, -
1]) ax4 = plt.subplot(gs[-1,
0]) ax5 = plt.subplot(gs[-1,
-2])
ax1
ax2
ax3
ax4 ax5
3 Chapter 3.
Matplotlib, Release
gs1 es
Este = similar
gridspec.GridSpec(3, 3)
a subparcelas_ajustar() , pero él solo Afecta el subtramas eso son creado de el
gs1.update(left=0.05, right=0.48,
dado GridSpec.
wspace=0.05)
El código abajo
gs1 = gridspec.GridSpec(3, 3)
crea
gs1.update(left=0.05, right=0.48,
wspace=0.05) ax1 = plt.subplot(gs1[:-1, :])
ax2 = plt.subplot(gs1[-1, :-1])
Especificación
ax3 = plt.subplot(gs1[-1, -1]) de cuadrícula con/ diferente subparcelas
gs2 = gridspec.GridSpec(3, 3)
gs2.update(left=0.55, right=0.98,
hspace=0.05) ax4 = plt.subplot(gs2[:, :-1])
ax5 = plt.subplot(gs2[:-1, -
1]) ax6 = plt.subplot(gs2[-1,
-1])
eje
ax1
5
ax4
eje
6
ax2 ax3
3.1. 3
Matplotlib, Release
Puede crear GridSpec a partir de SubplotSpec , en cuyo caso sus parámetros de diseño se establecen según
la ubicación de la SubplotSpec dada.
gs0 = gridspec.GridSpec(1, 2)
Especificación de la cinturilla Adentro Especificación de
gs00 = gridspec.GridSpecFromSubplotSpec(3,
cuadrícula 3, subplot_spec=gs0[0])
gs01 = gridspec.GridSpecFromSubplotSpec(3, 3, subplot_spec=gs0[1])
ax1
ax5
ax4
Aquí está a más sofisticado ejemplo de anidado Especificación de cuadrícula dónde nosotros poner a caja
alrededor cada celúla de el cuadrícula exterior de 4x4, ocultando las espinas apropiadas en cada una de las
cuadrículas internas de 3x3.
4 Chapter 3.
Matplotlib, Release
De forma predeterminada, GridSpec crea celdas de tamaños iguales. Puede ajustar la altura y el ancho
relativos de las filas y columnas. Tenga en cuenta que los valores absolutos no tienen importancia, solo
importan sus proporciones relativas.
gs = gridspec.GridSpec(2, 2,
width_ratios=[1, 2],
height_ratios=[4, 1]
)
ax1 = plt.subplot(gs[0])
ax2 = plt.subplot(gs[1])
3.1. 4
Matplotlib, Release
ax3 = plt.subplot(gs[2])
ax4 =
plt.subplot(gs[3])
ax1 ax2
ax4
ax3
tight_layout automáticamente ajusta subtrama parámetros entonces eso el subtrama(s) encaja en a el cifra
área. Este es Un experimento característica y puede no trabajar para alguno casos. solo cheques el
extensiones de etiquetas de verificación, eje etiquetas y títulos.
Simple Ejemplo
plt.rcParams['savefig.facecolor'] = "0.8"
def example_plot(ax, fontsize=12):
ax.plot([1, 2])
ax.locator_params(nbins=3)
ax.set_xlabel('x-label',
fontsize=fontsize) ax.set_ylabel('y-
label', fontsize=fontsize)
4 Chapter 3.
Matplotlib, Release
ax.set_title('Title', fontsize=fontsize)
plt.close('all')
fig, ax = plt.subplots()
example_plot(ax, fontsize=24)
Title
2.0
1.5
y-
1.0
x-label
Para evitar esto, es necesario ajustar la ubicación de los ejes. Para las subtramas, esto se puede hacer
ajustando la subtrama. parámetros ( Mover el borde de un ejes a hacer habitación para garrapata
etiquetas ). Matplotlib versión 1.1 introduce a nuevo comando tight_layout() que hace esto
automáticamente por usted.
plt.tight_layout()
3.1. 4
Matplotlib, Release
Title
2.0
1.5
y-
1.0
x-label
Cuando tú tener múltiple subtramas, a menudo tú ver etiquetas de diferente ejes superposición cada otro.
plt.close('all')
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(nrows=2, ncols=2)
example_plot(ax1)
example_plot(a
x2)
example_plot(a
x3)
example_plot(a
4 Chapter 3.
Matplotlib, Release
Title Title
2.02.0
1.5 1.5
y-
y-
1.0 1.0
0.0 T0it.5le 1.0 0.0 T0it.5le 1.0
2.02.0 x- x-
1.5 1.5
y-
y-
1.0 1.0
0.0 0.5 1.0 0.0 0.5 1.0
x-label x-label
diseño ajustado() voluntad también ajustar espaciado entre subtramas a minimizar el se superpone.
plt.tight_layout()
3.1. 4
Matplotlib, Release
Title Title
2.02.0
1.5 1.5
y-
y-
1.0 1.0
0.0 0.5 1.0 0.0 0.5 1.0
x-label Title x-label Title
2.02.0
1.5 1.5
y-
y-
1.0 1.0
0.0 0.5 1.0 0.0 0.5 1.0
x-label x-label
tight_layout() puede tomar argumentos de palabras clave de pad , w_pad y h_pad . Estos controlan el
relleno adicional alrededor del borde de la figura y entre las subtramas. Los rellenos se especifican en
fracciones del tamaño de fuente.
4 Chapter 3.
Matplotlib, Release
Title Title
2.02.0
1.5 1.5
y-
y-
1.0 1.0
0.0 0.5 1.0 0.0 0.5 1.0
x-label Title x-label Title
2.02.0
1.5 1.5
y-
y-
1.0 1.0
0.0 0.5 1.0 0.0 0.5 1.0
x-label x-label
tight_layout() lo hará trabajar incluso si el tamaños de subtramas son diferente como lejos como su
red especificación es compatible. En el ejemplo siguiente, ax1 y ax2 son subparcelas de una cuadrícula
de 2x2, mientras que ax3 es de una cuadrícula de 1x2.
plt.close('all')
fig =
plt.figure()
ax1 =
plt.subplot(221) ax2
= plt.subplot(223)
ax3 =
plt.subplot(122)
example_plot(a
x1)
example_plot(a
x2)
example_plot(a
x3)
3.1. 4
Matplotlib, Release
Title Title
2.0
2.0
1.5
y-
1.0
0.0 0.5 1.0
x-label
1.5
y-
Title
2.0
1.5
y-
1.0
1.0
0.0 0.5 1.0 0.0 0.5 1.0
x-label x-label
Él obras con subtramas creado con subplot2grid() . En general, subtramas creado de el especificación
de cuadrícula ( Personalización Ubicación de Subtrama Usando Especificaciones de cuadrícula )
voluntad trabajar.
plt.close ( '
todos ' ) fig =
plt . figura()
eje = plt .subplot2 3) ( 00 )
1 grid (( 3 , , , )
eje = plt .subplot2 3) ( 0 1) colspan = 2 )
2 grid (( 3 , , , ,
eje = plt .subplot2 3) ( 1 0) colspan = 2 , intervalo
3 grid (( 3 , , , , de filas = 2 )
eje = plt .subplot2 3) ( 1 2) intervalo de filas = 2 )
4 grid (( 3 , , , ,
ejemplo_plot(ax1)
ejemplo_plot(ax2)
ejemplo_plot(ax3)
ejemplo_plot(ax4)
plt .diseño_apretado ()
4 Chapter 3.
Matplotlib, Release
Title Title
2.02.0
1.5 1.5
y-
y-
1.0 1.0
0.0 0.5 1.0 0.0 0.5 1.0
x-label x-label
Title Title
2.02.0
1.5 1.5
y-
1.0 y-1.0
0.0 0.5 1.0 0.00.51.0
x-label x-label
A pesar de no minuciosamente Probado, él parece a trabajar para subtramas con aspecto ! = "auto" (p.ej, ejes con
imágenes).
arr = np.arange(100).reshape((10,10))
plt.close('all')
fig = plt.figure(figsize=(5,4))
ax = plt.subplot(111)
im = ax.imshow(arr, interpolation="none")
plt.tight_layout()
3.1. 4
Matplotlib, Release
0 2 4 6 8
Advertencias
• diseño ajustado() Solo tiene en cuenta las etiquetas de graduación, las etiquetas de eje y los
títulos. Por lo tanto, otros artistas pueden verse recortados y también pueden superponerse.
• Él asume eso el extra espacio necesario para etiquetas de verificación, eje etiquetas, y títulos es
independiente de Ubicación original de los ejes. Esto suele ser cierto, pero hay casos raros en los
que no lo es.
• pad = 0 recorta algunos de los textos en unos pocos píxeles. Esto puede ser un error o una
limitación del algoritmo actual. y él es no claro por qué él sucede. Mientras tanto, usar de
almohadilla en el menos Más grande que 0.3 es recomendado .
GridSpec tiene es propio diseño ajustado() método (el diagrama de py api diseño ajustado() también obras).
plt.close('all')
fig =
plt.figure()
gs1 = gridspec.GridSpec(2,
1) ax1 =
fig.add_subplot(gs1[0]) ax2
= fig.add_subplot(gs1[1])
5 Chapter 3.
Matplotlib, Release
example_plot(a
x1)
example_plot(a
x2)
Title
2.0
1.5
y-
1.0
0.0 0.5 1.0
x-label
Title
2.0
1.5
y-
1.0
0.0 0.5 1.0
x-label
Tú puede proporcionar un opcional recto parámetro, cual especifica el delimitador caja eso el subtramas
voluntad ser encajar dentro. Las coordenadas deben estar en coordenadas de figura normalizadas y el
valor predeterminado es (0, 0, 1, 1).
3.1. 5
Matplotlib, Release
Title
2.0
1.5
y-
1.0
0.0 0.5 1.0
x-label Title
2.0
1.5
y-
1.0
0.0 0.5 1.0
x-label
Para ejemplo, este poder ser usado para a cifra con múltiple especificaciones de cuadrícula.
gs2 = gridspec.GridSpec(3, 1)
for ss in gs2:
ax =
fig.add_subplot(ss)
example_plot(ax)
ax.set_title("")
ax.set_xlabel("")
ax.set_xlabel("x-label", fontsize=12)
5 Chapter 3.
Matplotlib, Release
Title 2.0
2.0
1.5
y-
1.5
y-
1.0
0.0 0.5 1.0
2.0
1.0
0.0 0.5 1.0
x-label Title 1.5
y-
2.01.0
0.0 0.5 1.0
2.0
1.5
y-
1.5
y-
1.0 1.0
0.0 0.5 1.0 0.0 0.5 1.0
x-label x-label
top = min(gs1.top,
Mientras este debería sergs2.top)
principalmente bien suficiente, ajustando arriba y abajo puede requerir ajuste de
espacio h=Además,
bottom max(gs1.bottom, gs2.bottom)
para actualizar hspace y vspace, llamamos tight_layout() nuevamente con el
argumento rect actualizado.
gs1.update(top=top, Tenga en cuenta que el argumento rect especifica el área incluido el etiquetas
bottom=bottom)
gs2.update(top=top,
de bottom=bottom)
verificación, etc. Así pues, nosotros voluntad aumentar el abajo (cual es 0 para el caso normal) por la
diferencia entre la parte inferior de arriba y la parte inferior de cada especificación de cuadrícula. Lo
mismo para la parte superior.
3.1. 5
Matplotlib, Release
Title
2.0 2.0
1.5
y-
1.5
y-
1.0
0.0 0.5 1.0
1.0 2.0
0.0 0.5 1.0
x-label Title 1.5
y-
2.0 1.0
0.0 0.5 1.0
2.0
1.5
y-
1.5
y-
1.0 1.0
0.0 0.5 1.0 0.0 0.5 1.0
x-label x-label
plt.close('all')
fig =
plt.figure()
5 Chapter 3.
Matplotlib, Release
2.0
1.5
y-
1.0
2.0
1.5
y-
1.0
0.0 0.5 1.00.0 0.5 1.0
x-label x-label
Barra de colores
Si tú crear a barra de colores con el barra de colores() dominio, el creado barra de colores es un
instancia de Ejes, No es subtrama, entonces diseño ajustado hace no trabajar. con Matplotlib versión 1.1,
tú puede crear a barra de colores como a subtrama utilizando la cuadrícula
plt.close('all')
arr =
np.arange(100).reshape((10,10)) fig
= plt.figure(figsize=(4, 4))
im = plt.imshow(arr, interpolation="none")
plt.colorbar(im, use_gridspec=True)
plt.tight_layout()
3.1. 5
Matplotlib, Release
0
80
60
4
40
6
8
20
0 2 4 6 8
0
Otro opción es a usar EjesGrid1 kit de herramientas a explícitamente crear un ejes para barra de colores.
plt.close('all')
arr =
np.arange(100).reshape((10,10)) fig
= plt.figure(figsize=(4, 4))
im = plt.imshow(arr, interpolation="none")
from mpl_toolkits.axes_grid1 import make_axes_locatable
divider = make_axes_locatable(plt.gca())
cax = divider.append_axes("right", "5%",
pad="3%") plt.colorbar(im, cax=cax)
plt.tight_layout()
5 Chapter 3.
Matplotlib, Release
80
2
60
4
40
6
20
8
0
0 2 4 6 8
3.2 Intermedio
3.2. 5
Matplotlib, Release
fig2 = plt.figure()
Continuo con nuestro ejemplo:
ax2 = fig2.add_axes([0.15, 0.1, 0.7, 0.3])
import
En numpy ashacha
este ejemplo, np es el Ejes instancia creado por el Fig.add_subplot llamar arriba (recordar
t =subtrama
La np.arange(0.0,
es justo1.0,
a subclase de ejes ) y cuando tú llamar gráfico ax . él crea a Línea 2D
0.01) s y=añade
instancia np.sin(2*np.pi*t)
él a Las líneas de los ejes lista. En la sesión interactiva de iPython a continuación,
line, ver
puede = que Axes.lines
ax.plot(t, s, color='blue',
La lista tiene lw=2)
una longitud de uno y contiene la misma línea que fue
devuelta por la línea, = trama ax. llamar:
xtext llama
Cuando = ax.set_xlabel('my xdata')
a ax.set_xlabel , pasa # returns en
la información a Text instanceText de XAxis . Cada instancia de
la instancia
Axes
ytextcontiene
= ax.set_ylabel('my ydata')
una instancia de XAxis y una instancia de YAxis , que manejan el diseño y el dibujo de las
marcas y las etiquetas de las marcas. y eje etiquetas.
5 Chapter 3.
Matplotlib, Release
a seno ola
1.0
0,5
vol
0.0
0,5
1.0
0,0 0,2 0,4 0,6 0,8 1,0
60
40
20
0
4 3 2 1 0 1 2 3 4
tiempo
(s)
Personalización su objetos
Cada elemento en el cifra es representado por a Matplotlib Artista , y cada tiene un extenso lista de
propiedades a configurar es apariencia.la cifra sí mismo contiene a Rectángulo exacto el tamaño de el
cifra, que puedes utilizar para establecer el color de fondo y la transparencia de las figuras. De la misma
manera, cada cuadro delimitador de ejes (el estándar blanco caja con negro bordes en el típico Matplotlib
trama, tiene a Rectángulo instancia que determina el color, la transparencia y otras propiedades de los
Ejes. Estas instancias se almacenan como variables miembro Figure.patch y Ejes.patch (“Parche”
es un nombre heredado de MATLAB, y es un “parche” 2D de color en la figura, por ejemplo, rectángulos,
círculos y polígonos). Cada artista de matplotlib tiene las siguientes propiedades
3.2. 5
Matplotlib, Release
Propiedad Descripción
alfa El transparencia - a escalar de 0-1
animado A booleano eso es usado a facilitar animado dibujo
ejes El ejes eso el Artista vidas en, probablemente Ninguno
caja de El delimitador caja eso clips el Artista
clip
clip_en Si recorte es activado
ruta_clip El camino el artista es recortado a
contiene A cosecha función a prueba si el artista contiene el elegir punto
cifra El cifra instancia el artista vidas en, probablemente Ninguno
etiqueta A texto etiqueta (p.ej, para etiquetado automático )
recogedor A pitón objeto eso controles objeto cosecha
transforma El transformación
r
visible A booleano si el artista debería ser estirado
orden z A número cual determina el dibujo orden
rasterizado Booleano; Vueltas Vectores en gráficos rasterizados: (para compresión & eps
transparencia)
Cada de el propiedades es accedido con un pasado de moda setter o adquiridor (Sí nosotros saber este
irrita Python-istas y nosotros plan a apoyo directo acceso a través de propiedades o rasgos pero él no tiene
estado hecho todavía). Para Por ejemplo, para multiplicar el alfa actual por la mitad:
Sia tú=desear
o.get_alpha()
a colocar a número de propiedades en una vez, tú poder también usar el colocar método con
o.set_alpha(0.5*a)
palabra clave argumentos. Por ejemplo:
In [149]: matplotlib.artist.getp(fig.patch)
alpha = 1.0
animated =
False
antialiased or aa =
True axes = None
clip_box = None
clip_on = False
clip_path = None
contains = None
edgecolor or ec = w
facecolor or fc =
0.75
figure = Figure(8.125x6.125)
fill = 1
hatch =
None height
= 1 label
=
linewidth or lw =
1.0 picker = None
5 Chapter 3.
Matplotlib, Release
Las cadenas de documentación de todas las clases también contienen el Artista propiedades, por lo que
puede consultar la “ayuda” interactiva o el módulo de artista para obtener una lista de propiedades de un
objeto determinado.
Objeto contenedores
Ahora eso nosotros saber cómo a inspeccionar y colocar el propiedades de a dado objeto nosotros desear a
configurar, nosotros necesidad saber cómo a conseguir en eso objeto. Como mencionado en el
introducción, allá son dos tipos de Objetos: primitivos y contenedores. Los primitivos son generalmente
las cosas que desea configurar (la fuente de una instancia de Texto , el ancho de un Line2D ), aunque los
contenedores también tienen algunas propiedades; por ejemplo, Axes Artist es un contenedor que
contiene muchos de los primitivos en su gráfico, pero también tiene propiedades como la escala x para
controlar si el eje x es 'lineal' o 'logarítmico'. En esta sección revisaremos dónde los distintos objetos
contenedores almacenan los Artistas a los que desea acceder.
Cifra recipiente
3.2. 5
Matplotlib, Release
for ax in fig.axes:
ax.grid(True)
El cifra también tiene es propio texto, pauta, parches y imágenes, cual tú poder usar a agregar primitivos
directamente. El valor predeterminado coordinar sistema para el Cifra voluntad simplemente ser en
píxeles (cual es no generalmente qué tú desear) pero puedes controlar esto configurando la propiedad de
transformación del Artista Estás añadiendo a la cifra.
Más útil es "cifra coordenadas” dónde (0, 0) es el Abajo a la izquierda de el cifra y (1, 1) es el arriba a la
derecha de la figura que se puede obtener configurando la transformación Artist en fig.transFigure :
In [195]: fig.canvas.draw()
6 Chapter 3.
Matplotlib, Release
Ejes recipiente
matplotlib.axes.Axes es el centro del universo matplotlib: contiene la gran mayoría de todos los
Artistas usado en a cifra con muchos ayudante métodos a crear y agregar estos Artistas a sí
mismo, como así como ayudante métodos a acceso y personalizar el Artistas él contiene. Como el
Cifra , él contiene a Parche parche que es un rectángulo para coordenadas cartesianas y un círculo
para coordenadas polares; este parche determina la forma, el fondo y el borde de la región de trazado:
ax = fig.add_subplot(111)
Cuando tú llamar a Conspirando método, p.ej, el canónico trama() y aprobar en matrices o liza de valores,
elrect
El = ax.patch
método será #crear
a Rectangle instance
a matplotlib.lines.Line2D() instancia, actualizar el línea con todo el
Propiedades de Line2D Pasados
rect.set_facecolor('green') como argumentos de palabras clave, agregamos la línea a Axes.lines
contenedor y te lo devuelve:
In [213]:
trama x, y = np.random.rand(2,
devoluciones 100)
a lista de pauta porque tú poder aprobar en múltiple incógnita, y pares a trama, y
nosotros son Desembalaje el Primer elemento de la lista de longitud uno en la variable de línea. La línea
seInha[214]:
añadidoline, = ax.plot(x,
a Axes.lines lista: y, '-', color='blue', linewidth=2)
In [229]: print
Similarmente, ax.lines
métodos eso crear parches,
[<matplotlib.lines.Line2D instance at como bar() crea a lista de rectángulos, voluntad agregar el parches a el
0xd378b0c>]
Ejes.parches lista:
In [233]:
No n, bins,
debe agregar rectangles
objetos = ax.hist(np.random.randn(1000),
directamente a Axes.lines o Ejes.parches 50, facecolor='yellow')
listas a menos que sepas
exactamente qué tú son haciendo, porque el Ejes necesidades a hacer a pocos cosas cuando él crea y
In [234]:
añade rectangles
un objeto. Es conjuntos La figura y ejes propiedad de el Artista , como Bueno como el por defecto
Ejes transformación
Out[234]: <a list of(a menos que aobjects>
50 Patch transformación está configurado). Él también inspecciona el datos
contenido en el Artista a actualizar el datos estructuras controlador escalamiento automático ,
In [235]: print len(ax.patches)
3.2. 6
Matplotlib, Release
entonces eso el vista límites poder ser equilibrado a contener el trazado datos. Tú poder, sin
embargo, crear objetos y agregarlos directamente a los ejes mediante métodos auxiliares como
add_line() y add_patch() . Aquí hay una sesión interactiva comentada que ilustra lo que está sucediendo:
En [261]: higo = plt . figura()
rectángulo instancia
En [263]: recto = matplotlib . parches . rectángulo ( ( 1 , 1 ), ancho = 5 , altura = 12 )
6 Chapter 3.
Matplotlib, Release
Allá son muchos, muchos Ejes ayudante métodos para creando primitivo Artistas y añadiendo a ellos a
su respectivos contenedores. La siguiente tabla resume una pequeña muestra de ellos, los tipos de
Artista que crean y dónde los almacenan
Ayudante método Artista Recipiente
ax.anotar - texto anotaciones Anotar ax.textos
barra de hacha - bar gráficos Rectángulo parches ax
barra de error ax. - error bar Línea 2D y Rectángulo líneas ax. y parches ax
Parcelas
relleno de eje - compartido Polígono parches ax
área
eje.hist - histogramas Rectángulo parches ax
eje.imshow - imagen datos Imagen de ejes imágenes ax
Hacha.leyenda - ejes Leyenda hacha.leyendas
Leyendas
diagrama de ejes - x Parcelas Línea 2D líneas ax.
hacha.dispersión - dispersión Colección de polígonos colecciones ax
gráficos
ax.text - texto Texto ax.textos
Además de todos estos artistas , los Ejes contienen dos contenedores de artistas
importantes : el eje X y el eje YA , que manejan el dibujo de las marcas y etiquetas. Estas se almacenan
como variables de instancia xaxis y eje y . El eje X y Eje YA Los contenedores se detallarán a
continuación, pero tenga en cuenta que los Ejes Contiene muchos métodos auxiliares que reenvían
llamadas a las instancias de Axis, por lo que a menudo no es necesario trabajar con ellos directamente. a
menos que tú desear Para. Para ejemplo, tú poder colocar el fuente color de el Eje X etiquetas de
verificación usando el Método auxiliar de ejes :
for label
Abajo in ax.get_xticklabels():
es a resumen de el Artistas eso el Ejes contiene
label.set_color('orange')
Ejes atributo Descripción
artistas A lista de Artista instancias
parche Rectángulo instancia para Ejes fondo
colecciones A lista de Recopilación instancias
imágenes A lista de Imagen de ejes
Leyendas A lista de Leyenda instancias
pauta A lista de Línea 2D instancias
parches A lista de Parche instancias
textos A lista de Texto instancias
eje x matplotlib.axis.Eje X instancia
eje y matplotlib.axis.YAxis instancia
Eje contenedores
Las instancias de matplotlib.axis.Axis manejan el dibujo de las líneas de graduación, las líneas de
cuadrícula y las etiquetas de graduación. y la etiqueta del eje. Puede configurar las marcas de
verificación izquierda y derecha por separado para el eje y, y las marcas de verificación superior e
inferior. garrapatas por separado para el eje x. El Eje también víveres el datos y vista intervalos usado en
escalado automático, desplazamiento panorámico y haciendo zoom, como Bueno como el Locador y
Formateador instancias cual control dónde el garrapatas se colocan y cómo se representan como
cadenas.
Cada Eje objeto contiene a etiqueta atributo (este es qué Laboratorio de Pylab modifica en llamadas a
3.2. 6
Matplotlib, Release
etiquetax() y
6 Chapter 3.
Matplotlib, Release
ylabel() ) así como una lista de marcas principales y secundarias. Las ticks son instancias XTick e
YTick , que contienen el actual línea y texto primitivos eso prestar el garrapatas y etiquetas de
verificación. Porque el garrapatas son dinámicamente creado como necesario (p.ej, cuando panorámica y
haciendo zoom), tú debería acceso el liza de importante y ticks menores a través de sus métodos de
acceso get_major_ticks() y get_minor_ticks() . Aunque las garrapatas contienen todo el primitivos y
voluntad ser cubierto abajo, Eje instancias tener accesor métodos eso devolver La garrapata pauta,
garrapata etiquetas, garrapata Ubicaciones etc.:
3.2. 6
Matplotlib, Release
import numpy as np
import matplotlib.pyplot as plt
for label in
ax1.xaxis.get_ticklabels(): #
label is a Text instance
label.set_color('red')
label.set_rotation(45)
label.set_fontsize(16)
for line in
ax1.yaxis.get_ticklines(): #
line is a Line2D instance
line.set_color('green')
line.set_markersize(25)
line.set_markeredgewidth(3)
plt.show()
6 Chapter 3.
Matplotlib, Release
1.0
0.8
0.6
0.4
0.2
0.0
Garrapata contenedores
El matplotlib.axis.Tick es el objeto contenedor final en nuestro descenso desde la Figura a los Ejes a
El eje de la garrapata . La garrapata contiene las instancias de las líneas de marca y cuadrícula, así
como las instancias de etiqueta para la superior y más bajo garrapatas. Cada de estos es accesible
directamente como un atributo de el Marcar . En suma, hay booleano variables eso determinar si el
superior etiquetas y garrapatas son en para el eje x y si Las etiquetas y marcas correctas están activadas
para el eje y.
Garrapata Descripción
atributo
línea de tick1 Línea 2D instancia
marca2linea Línea 2D instancia
línea de Línea 2D instancia
cuadrícula
etiqueta1 Texto instancia
etiqueta2 Texto instancia
cuadrícula booleano cual determina si a dibujar el línea de cuadrícula
activada
tictac1En booleano cual determina si a dibujar el 1º línea de cosquillas
tictac2On booleano cual determina si a dibujar el 2do línea de
cosquillas
etiqueta1En booleano cual determina si a dibujar el 1º garrapata etiqueta
etiqueta2On booleano cual determina si a dibujar el 2do garrapata etiqueta
3.2. 6
Matplotlib, Release
Aquí es un ejemplo cual conjuntos el formateador para el bien lado garrapatas con dólar señales y bandera
a ellos verde en el lado derecho del eje y
6 Chapter 3.
Matplotlib, Release
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as
ticker
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(100*np.random.rand(20))
formatter = ticker.FormatStrFormatter('$%1.2f ')
ax.yaxis.set_major_formatter(formatter)
for tick in ax.yaxis.get_major_ticks():
tick.label1On = False
tick.label2On = True
tick.label2.set_color('green')
plt.show()
$100.0
$80.00
$60.00
$40.00
$20.00
3.2. 6
Matplotlib, Release
Al llamar a legend() sin argumentos, se obtienen automáticamente los identificadores de leyenda y sus
etiquetas asociadas. funcionalidad es equivalente a:
handles,
La funciónlabels = ax.get_legend_handles_labels()
get_legend_handles_labels() devuelve una lista de identificadores / artistas que existen
ax.legend(handles, labels)
en los ejes que poder ser usado a generar entradas para el resultante leyenda - él es valer tomando nota
sin embargo eso no todo Los artistas pueden ser agregado a a leyenda, en cual punto a "apoderado"
voluntad tener a ser creado (ver Creando artistas específicamente para añadiendo a el leyenda (también
conocido como Proxy) artistas) para más detalles).
Para lleno control de qué es ser agregado a el leyenda, es es común a aprobar el adecuado manijas
directamente a legend() :
line_up,
En = plt.plot([1,2,3],
alguno casos, es no posible alabel='Line 2')
line_down, = élplt.plot([3,2,1], colocar el etiqueta
label='Line 1') de el manejar, entonces él es posible a aprobar
plt.legend(handles=[line_up, line_down])
a través de el lista de etiquetas a legend() :
No todos los identificadores se pueden convertir en entradas de leyenda automáticamente, por lo que a
menudo es necesario crear un artista que pueda hacerlo . Los identificadores de leyenda no tienen que
existir en la figura o en los ejes para poder usarse.
Suponer nosotros buscado a crear a leyenda cual tiene un entrada para alguno datos cual es representado por a rojo
color:
7 Chapter 3.
Matplotlib, Release
1.0
The red data
0,8
0.6
0,4
0,2
0.0
0,0 0,2 0,4 0,6 0,8 1,0
Allá son muchos apoyado leyenda manijas, en cambio de creando a parche de color nosotros podría tener
creado a línea con un marcador:
import matplotlib.lines as
mlines import matplotlib.pyplot
as plt
3.2. 7
Matplotlib, Release
1.0
Blue stars
0,8
0.6
0,4
0,2
0.0
0,0 0,2 0,4 0,6 0,8 1,0
Leyenda ubicación
El ubicación del leyenda Puede ser especificado por el palabra clave argumento loc . Por favor ver el documentación
en
leyenda() para más detalles.
El bbox_para_anclar palabra clave da a excelente grado de control para manual leyenda colocación.
Para Por ejemplo, si tú desear su ejes leyenda situado en el Figuras arriba mano derecha esquina en
cambio de el ejes esquina, simplemente especifique la ubicación de la esquina y el sistema de
coordenadas de esa ubicación:
plt.legend(bbox_to_anchor=(1,
Más 1),
ejemplos de costumbre leyenda colocación:
bbox_transform=plt.gcf().transFigure)
import matplotlib.pyplot as plt
plt.subplot(211)
plt.plot([1,2,3],
label="test1")
plt.plot([3,2,1], label="test2")
# Place a legend above this subplot, expanding itself to
# fully use the given bounding box.
plt.legend(bbox_to_anchor=(0., 1.02, 1., .102), loc=3,
ncol=2, mode="expand", borderaxespad=0.)
7 Chapter 3.
Matplotlib, Release
plt.subplot(223)
plt.plot([1,2,3],
label="test1")
plt.plot([3,2,1], label="test2")
# Place a legend to the right of this smaller subplot.
plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)
plt.show()
test1 test2
3.0
2.5
2.0
1.5
1.0
0,00 0,25 0,50 0,75 1,00 1,25 1,50 1,75 2,00
3.0 test1 test2
2.5
2.0
1.5
1.0
0 1 2
A veces es más claro dividir las entradas de leyenda en varias leyendas. Si bien el enfoque instintivo para
hacer esto podría ser llamar a la función legend() varias veces, encontrará que solo existe una leyenda. en
el Ejes. Este tiene estado hecho entonces eso él es posible a llamar leyenda() repetidamente a actualizar el
leyenda a el el último manijas en el Ejes, entonces a persistir viejo leyenda instancias, nosotros debe
agregar a ellos a mano a el Ejes:
3.2. 7
Matplotlib, Release
plt.show()
3.00 Line 1
2,75
2,50
2.25
2.00
1,75
1,50
1.25
1.00 Line 2
Leyenda Manipuladores
En orden a crear leyenda entradas, manijas son dado como un argumento a un adecuado Base de
controladores Subclase. La elección de la subclase del controlador se determina mediante las siguientes
reglas:
1. Actualizar obtener_mapa_del_manejador_de_leyendas() con el valor en el mapa_del_controlador palabra
clave.
2. Controlar si el manejar es en el recién creado mapa_del_manejador .
3. Controlar si el tipo de manejar es en el recién creado mapa_del_manejador .
4. Controlar si cualquier de el tipos en el manejar señor es en el recién creado
handler_map . Para lo completo, este lógica es principalmente implementado en
obtener_manejador_de_leyendas() .
7 Chapter 3.
Matplotlib, Release
Toda esta flexibilidad significa que tenemos los ganchos necesarios para implementar controladores
personalizados para nuestro propio tipo de clave de leyenda.
El más simple ejemplo de usando costumbre manipuladores es a instanciar uno de el existente Base de
controladores subclases. Para simplificar, elijamos matplotlib.legend_handler.HandlerLine2D que
acepta un número de puntos argumento (tenga en cuenta que numpoints es una palabra clave en la
función legend() para mayor comodidad). Podemos entonces aprobar el cartografía de instancia a
Entrenador de animales como a palabra clave a leyenda.
2,50
2.25
Line 1
2.00
Line 2
1,75
1,50
1.25
1.00
Como tú poder ver, "Línea 1” ahora tiene 4 marcador agujas, dónde "Línea 2” tiene 2 (el
predeterminado). Inténtalo el arriba código, solo cambia la clave del mapa de línea1 a tipo(línea1) .
Observe cómo ahora ambas instancias de Line2D obtienen 4 marcadores.
Junto con los controladores para tipos de gráficos complejos, como barras de error, gráficos de tallo e
histogramas, el handler_map predeterminado tiene a especial manejador de tuplas (
ManejadorTupla ) cual simplemente Parcelas el manijas en arriba uno del otro para cada elemento de la
tupla dada. El siguiente ejemplo demuestra cómo combinar dos claves de leyenda una encima de la otra:
3.2. 7
Matplotlib, Release
z = randn(10)
2.0
Attr A
1.5 Attr A+B
1.0
0,5
0.0
0,5
1.0
1.5
0 2 4 6 8
A costumbre entrenador de animales poder ser implementado a doblar cualquier manejar en a leyenda
llave (manijas no necesariamente Necesitar ser Matplotlib artistas). El entrenador de animales debe
implementar a “artista_legendario” método cual devoluciones a soltero Artista para que la leyenda la
utilice. Los detalles de la firma sobre “legend_artist” están documentados en legend_artist() .
class
AnyObject(object):
pass
7 Chapter 3.
Matplotlib, Release
class AnyObjectHandler(object):
def legend_artist(self, legend, orig_handle, fontsize,
handlebox): x0, y0 = handlebox.xdescent,
handlebox.ydescent
width, height = handlebox.width, handlebox.height
patch = mpatches.Rectangle([x0, y0], width, height, facecolor='red',
edgecolor='black', hatch='xx', lw=3,
transform=handlebox.get_transform())
handlebox.add_artist(patch)
return patch
plt.legend([AnyObject()], ['My first handler'],
handler_map={AnyObject:
AnyObjectHandler()})
1.0
My first handler
0,8
0.6
0,4
0,2
0.0
0,0 0,2 0,4 0,6 0,8 1,0
Alternativamente, tenía nosotros buscado a globalmente aceptar Cualquier objeto instancias sin Necesitando a a
mano colocar el
mapa_del_controlador palabra clave todo el tiempo, nosotros podría tener registrado el nuevo entrenador de
animales con:
from matplotlib.legend
Mientras import
que el fuerza aquí Legend
es claro, recuerda eso allá son ya muchos manipuladores implementado y qué
Legend.update_default_handler_map({AnyObject:
Lo que deseas lograr puede que ya sea fácilmente posible con las clases existentes. Por ejemplo, para
AnyObjectHandler()})
producir claves de leyenda elípticas, en lugar de rectangulares:
3.2. 7
Matplotlib, Release
class HandlerEllipse(HandlerPatch):
def create_artists(self, legend, orig_handle,
xdescent, ydescent, width, height, fontsize, trans):
center = 0.5 * width - 0.5 * xdescent, 0.5 * height - 0.5 *
ydescent p = mpatches.Ellipse(xy=center, width=width + xdescent,
height=height + ydescent)
self.update_prop(p, orig_handle, legend)
p.set_transform(trans)
return [p]
1.0
An ellipse, not a rectangle
0,8
0.6
0,4
0,2
0.0
0,0 0,2 0,4 0,6 0,8 1,0
Aquí es a no exhaustivo lista de el ejemplos disponible involucrando leyenda ser usado en varios maneras:
7 Chapter 3.
Matplotlib, Release
3.3 Avanzado
3.3. 7
Matplotlib, Release
Datos coordenadas
Vamos comenzar con el mayoría comúnmente usado coordinar, el datos coordinar sistema. Cuando sea
tú agregar datos En los ejes, matplotlib actualiza los límites de datos, que se actualizan más comúnmente
con los métodos set_xlim() y set_ylim() . ejemplo, en el cifra abajo, el datos límites estirar de 0 a 10 en
el eje x, y -1 a 1 en el eje y.
import numpy as np
import matplotlib.pyplot as plt
x =1.00
np.arange(0, 10, 0.005)
y = np.exp(-x/2.) * np.sin(2*np.pi*x)
0,75
fig = plt.figure()
ax =
fig.add_subplot(111)
0,50
ax.plot(x, y)
ax.set_xlim(0, 10)
ax.set_ylim(-1,
0,25 1)
plt.show()
0.00
0,25
0,50
0,75
1.00
0 2 4 6 8 10
7 Chapter 3.
Matplotlib, Release
In [14]: type(ax.transData)
Out[14]: <class 'matplotlib.transforms.CompositeGenericTransform'>
inv = ax.transData.inverted()
SiInsu[41]:
son mecanografía a lo largo de con este tutorial, el exacto valores de el mostrar coordenadas puede
diferir si tú tener
In [42]: type(inv) un diferente ventana tamaño o ppp configuración. Asimismo, en el cifra abajo, el
mostrar
Out[42]:etiquetado
<class agujas son Probablemente no sea lo mismo que en la sesión de iPython porque los
'matplotlib.transforms.CompositeGenericTransform'>
valores predeterminados del tamaño de las figuras de la documentación son diferentes .
In [43]: inv.transform((335.175, 247.))
Out[43]: array([ 5., 0.])
1.00
0,75
0,25
0.00
0,25
display = (281.
0,50
0,75
1.00
0 2 4 6 8 10
3.3. 7
Matplotlib, Release
Nota: Si ejecuta el código fuente en el ejemplo anterior en un backend GUI, también puede encontrar
que las dos flechas para los datos y mostrar Las anotaciones no apuntan exactamente al mismo punto.
Esto se debe a que el punto de visualización se calculó antes de que se mostrara la figura, y el backend de
la GUI puede cambiar ligeramente el tamaño de la figura. cuando él es creado. El efecto es más
pronunciado si tú cambiar el tamaño el cifra tú mismo. Este es uno Buena razón por la que rara vez
quieres trabajar en el espacio de visualización, pero puedes conectarte a ' on_draw ' Evento para
actualizar las coordenadas de la figura al dibujarla; consulte Manejo y selección de eventos .
Cuando cambia los límites x o y de sus ejes, los límites de datos se actualizan para que la transformación
produzca un nuevo punto de visualización. Tenga en cuenta que cuando solo cambiamos ylim, solo se
modifica la coordenada de visualización y, y cuando cambiamos también xlim, se modifican ambas.
Hablaremos más sobre esto más adelante, cuando hablemos de Bbox .
fig = plt.figure()
for i, label in enumerate(('A', 'B', 'C',
'D')): ax = fig.add_subplot(2,2,i+1)
ax.text(0.05, 0.95, label, transform=ax.transAxes,
fontsize=16, fontweight='bold', va='top')
plt.show()
8 Chapter 3.
Matplotlib, Release
1.0 1.0
0,8
A 0,8
B
0,6 0,6
0,4 0,4
0,2 0,2
0.0 0.0
0,00 0,25 0,50 0,75 1,00 0,00 0,25 0,50 0,75 1,00
1.0 1.0
0,8
C 0,8
D
0,6 0,6
0,4 0,4
0,2 0,2
0.0 0.0
0,00 0,25 0,50 0,75 1,00 0,00 0,25 0,50 0,75 1,00
También puedes hacer líneas o parches en el sistema de coordenadas de los ejes, pero esto es menos útil
en mi experiencia que usando Ejes.transEjes para colocación texto. Sin embargo, aquí es a tonto
ejemplo cual Parcelas alguno puntos aleatorios en datos espacio, y superposiciones a semitransparente
Centrado en círculo en el medio de el ejes con a radio uno cuarto de el ejes – si su ejes hace no
preservar aspecto relación (ver establecer_aspecto() ), este voluntad mirar como un elipse. Usar el
panorámica / zoom herramienta a mover alrededor, o a mano cambiar el datos xlim y ylim, y Vas a
ver el datos mover, pero el círculo voluntad permanecer fijado porque él es no en datos coordenadas y
voluntad permanecer siempre en el centro de el ejes.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as
patches fig = plt.figure()
ax = fig.add_subplot(111)
x, y = 10*np.random.rand(2, 1000)
ax.plot(x, y, 'go') # plot some data in data coordinates
plt.show()
3.3. 8
Matplotlib, Release
10
0 2 4 6 8 10
Mezclado transformaciones
Dibujo en mixto espacios de coordenadas que mezclan ejes con datos Las coordenadas son
extremadamente útiles, por ejemplo a crear a horizontal durar cual reflejos alguno región de el datos y
pero abarca al otro lado de el eje x independientemente de el datos límites, cacerola o zoom nivel, etc. En
hecho estos mezclado pauta y abarca son entonces útil, tenemos construido en funciones a hacer a
ellos fácil a trama (ver línea axial() , línea axv() , axhspan() , axvspan() ) pero para didáctico
Propósitos nosotros voluntad implementar el horizontal durar aquí usando a mezclado transformación.
Este truco solo obras para separable transformaciones, como tú ver en normal cartesiano coordinar
sistemas, pero no en transformaciones inseparables como PolarTransform .
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as
patches
import matplotlib.transforms as transforms
fig = plt.figure()
ax = fig.add_subplot(111)
x=
np.random.randn(1000)
ax.hist(x, 30)
8 Chapter 3.
Matplotlib, Release
ax.add_patch(rect)
plt.show()
=1 =2
100
80
60
40
20
0
3 2 1 0 1 2 3 4
Nota: Las transformaciones combinadas donde x está en las coordenadas de datos e y en las
coordenadas de los ejes son tan útiles que nosotros tener ayudante métodos a devolver el versiones
mpl usos internamente para dibujo garrapatas, etiquetas de verificación, etc. Los métodos son
matplotlib.axes.Axes.get_xaxis_transform() y matplotlib.axes.Axes.get_yaxis_transform() .
Entonces en el ejemplo arriba, el llamar a fábrica de transformación combinada() poder ser
reemplazado por obtener_transformación_eje_x :
trans = ax.get_xaxis_transform()
3.3. 8
Matplotlib, Release
offset = transforms.ScaledTranslation(dx,
demostrando dy, utilizando el operador de suma. Este código dice: Primero
que se pueden encadenar transformaciones
fig.dpi_scale_trans)
aplique los datos transformación
shadow_transform ax.transData
= ax.transData + offset y entonces traducir el datos por Dx y morir agujas. En
tipografía, un punto
< https://es.wikipedia.org/wiki/Tipografía_de_punto > ' _ es 1 / 72 pulgadas, y por especificando su Conjuntos
desactivados
en agujas, su cifra voluntad mirar el mismo a pesar de todo de el ppp resolución él es salvado en.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as
patches
import matplotlib.transforms as transforms
fig = plt.figure()
ax = fig.add_subplot(111)
# make a simple sine wave
x = np.arange(0., 2.,
0.01) y =
np.sin(2*np.pi*x)
line, = ax.plot(x, y, lw=3, color='blue')
# shift the object over 2 points, and down 2 points
dx, dy = 2/72., -2/72.
offset = transforms.ScaledTranslation(dx, dy,
fig.dpi_scale_trans)
shadow_transform = ax.transData + offset
# now plot the same data with our offset
transform; # use the zorder to make sure we are
8 Chapter 3.
Matplotlib, Release
0,75
0,50
0,25
0.00
0,25
0,50
0,75
1.00
El transformación tubería
El ax.transData La transformación con la que hemos estado trabajando en este tutorial es una
composición de tres transformaciones diferentes que comprenden la secuencia de transformación de
datos - > coordenadas de visualización . Michael Droettboom implementó el marco de
transformaciones, teniendo cuidado de proporcionar una API limpia que segregara el no lineal
proyecciones y balanza eso suceder en polar y logarítmico parcelas, de el lineal transformaciones afines
eso suceder cuando tú cacerola y zoom. ahí es un eficiencia aquí, porque tú poder cacerola y zoom en su
ejes cual Afecta el una fina transformación, pero tú puede no necesidad a calcular el potencialmente caro
no lineal balanza o proyecciones en simple navegación eventos. Él es también posible a multiplicar unir
matrices de transformación afinadas y luego aplicarlas a las coordenadas en un solo paso. Esto no es
cierto para todas las transformaciones posibles.
Aquí es cómo el ax.transData instancia es definido en el básico separable eje Ejes clase:
3.3. 8
Matplotlib, Release
Nosotros tenemos estado introducido a el transEjes instancia arriba en Ejes coordenadas , cual mapas
el (0,0), (1,1) esquinas de los ejes o cuadro delimitador de la subparcela para mostrar espacio, así que
veamos estas otras dos piezas.
auto.transLimits es la transformación que te lleva de los datos A los ejes coordenadas; es decir,
mapea tu vista xlim y ylim a el unidad espacio de el ejes (y transEjes entonces acepta eso unidad espacio
a mostrar espacio). Podemos ver esto en acción aquí
[80]: ax
yInnosotros = usar
poder subplot(111)
este mismo invertido transformación a ir de el unidad ejes coordenadas atrás a
datos coordenadas .
In [81]: ax.set_xlim(0, 10)
Out[81]: (0, 10)
In pieza
La inv.transform((0.25,
[90]: final es self.transScale 0.25))
atributo, que es responsable del escalamiento no lineal opcional de
Out[90]:
In datos,
los array([ 2.5,
[82]: ax.set_ylim(-1,1)
por ejemplo, -0.5])
para ejes logarítmicos. Cuando se configura inicialmente un eje, este solo se
Out[82]:en
establece (-1, 1)
la transformación de identidad. desde el básico Matplotlib ejes tiene lineal escala, pero
cuando tú llamar a logarítmico escalada función como semilogx() o establece explícitamente la escala
In [84]: ax.transLimits.transform((0,-1))
en logarítmica con set_xscale () , entonces el atributo ax.transScale es colocar a manejar el no
Out[84]: array([ 0., 0.])
lineal proyección. La balanza transforma son propiedades de el respectivo eje x y eje y Instancias del
eje
In .[85]: ejemplo, cuando llamas a ax.set_xscale( ' log ' ) , el eje x actualiza su escala. a a
Por ax.transLimits.transform((10,-1))
matplotlib.scale.Escala
Out[85]: array([ 1.,logarítmica
0.]) instancia.
Para los ejes no separables, los PolarAxes, hay una pieza más a considerar: la transformación de
In [86]: ax.transLimits.transform((10,1))
proyección . transDatos matplotlib.projections.polar.PolarAxes es similar a eso para el típico
Out[86]:
Ejes array([
de matplotlib 1., 1.])
separables , con una pieza adicional transProjection :
In [87]: ax.transLimits.transform((5,0))
self.transData = manijas
self.transScale + deself.transProjection + y\ longitud para mapa datos, o radio
transProyección el proyección
(self.transProjectionAffine
el espacio, p.ej, latitud
0.5, 0.5]) + self.transAxes)
teta para array([
yOut[87]: polar datos, a a separable cartesiano coordinar sistema. Allá son varios proyección Ejemplos
en matplotlib.projections paquete, y la mejor manera de aprender más es abrir el código fuente de
esos paquetes y ver cómo a hacer su propio, desde Matplotlib apoya extensible ejes y proyecciones.
Miguel
8 Chapter 3.
Matplotlib, Release
Droettboom ha proporcionado un buen ejemplo de tutorial sobre cómo crear ejes de proyección de
martillo; consulte el código de ejemplo de API: custom_projection_example.py .
El objeto subyacente todo de el parche matplotlib objetos es el Camino , cual apoya el estándar
colocar de mover a, alinear a, curvar a Comandos a dibujar simple y compuesto contornos consistente de
línea segmentos y splines. El Camino es instanciado con a (N.º 2) formación de (x,y) vértices, y a N-
longitud formación de camino Códigos. Por ejemplo, para dibujar el rectángulo unitario de (0,0) a (1,1),
podríamos usar este código
import matplotlib.pyplot as plt from matplotlib.path import Path
import matplotlib.patches as patches
verts = [
( 0. 0. ) # izquierda,
, , abajo
( 0. 1. ) # izquierda,
, , arriba
( 1. 1. ) # bien, arriba
, ,
( 1. 0. ) # bien, abajo
codes, = [Path.MOVETO,
,
( 0. 0. ) # ignorado
Path.LINETO, Path.LINETO, Path.LINETO, Path.CLOSEPOLY,
, ,
] ]
path = Path(verts, codes) fig = plt.figure()
ax = fig.add_subplot(111)
patch = patches.PathPatch(path, facecolor='orange', lw=2) ax.add_patch(patch)
ax.set_xlim(-2,2) ax.set_ylim(-2,2)
plt.show()
3.3. 8
Matplotlib, Release
2.0
1.5
1.0
0,5
0.0
0,5
1.0
1.5
2.0
2,0 1,5 1,0 0,5 0,0 0,5 1,0 1,5 2,0
Bézier ejemplo
Alguno de el camino componentes requerir múltiple vértices a especificar ellos: para ejemplo CURVA 3
es a curva de bézier con uno control punto y uno fin punto, y CURVA4 tiene tres vértices para el dos
control puntos y el fin punto. El ejemplo abajo muestra a CURVA4 Bézier ranura – el Bézier curva
voluntad ser contenida en la envoltura convexa del punto de inicio, los dos puntos de control y el punto
final
import
8 matplotlib.pyplot as plt Chapter 3.
from matplotlib.path import
Matplotlib, Release
verts = [
( 0. , 0. # P0
),
( 0,2 , 1. # P1
),
( 1. , # P2
0,8 ),
( 0,8 , 0. # P3
codes
), = [Path.MOVETO,
Path.CURVE4,
] Path.CURVE4, Path.CURVE4,
]
path = Path(verts, codes) fig = plt.figure()
ax = fig.add_subplot(111)
patch = patches.PathPatch(path, facecolor='none', lw=2) ax.add_patch(patch)
xs, ys = zip(*verts)
ax.plot(xs, ys, 'x--', lw=2, color='black', ms=10)
ax.text(-0.05, -0.05, 'P0')
ax.text(0.15, 1.05, 'P1')
ax.text(1.05, 0.85, 'P2')
ax.text(0.85, -0.05, 'P3')
ax.set_xlim(-0.1, 1.1)
ax.set_ylim(-0.1, 1.1)
plt.show()
3.3. 8
Matplotlib, Release
P1
1.0
P2
0,8
0.6
0,4
0,2
0.0
P0 P3
Compuesto caminos
Todas las primitivas de parches simples en matplotlib, Rectángulo, Círculo, Polígono, etc., se
implementan con una ruta simple. Trazar funciones como hist() y bar() , que crean una serie de
primitivos, por ejemplo, un grupo de Rectángulos, poder generalmente ser implementado más
Eficientemente usando a compuesto camino. El razón bar crea una lista de rectángulos y no una ruta
compuesta es en gran parte histórica: el código Path es comparativamente nuevo y de barra es anterior
él. Mientras nosotros podría cambiar él ahora, él quería romper viejo código, entonces aquí nosotros
voluntad cubrir cómo a crear compuesto caminos, reemplazando el funcionalidad en bar, en caso tú
necesidad a hacer entonces en su propio código para razones de eficiencia , por ejemplo, está creando un
gráfico de barras animado.
Realizaremos el gráfico de histograma creando una serie de rectángulos para cada barra del histograma:
El ancho del rectángulo es el ancho del contenedor y la altura del rectángulo es el número de puntos de
datos en ese contenedor. Primero crearemos algunos datos aleatorios distribuidos normalmente y
calcularemos el histograma. Debido a que numpy devuelve los bordes de los contenedores y no los
centros, la longitud de los contenedores es 1 mayor que la longitud de n En el siguiente ejemplo:
# histogram
Ahora our las
extraeremos data with numpy
esquinas de los rectángulos. Cada una de las matrices izquierda , inferior ,
etc.,
data que
= aparecen a continuación es len(n) , donde n es la matriz de recuentos para cada barra del
np.random.randn(1000)
histograma:
n, bins = np.histogram(data, 100)
9 Chapter 3.
Matplotlib, Release
Ahora tenemos que construir nuestra ruta compuesta, que constará de una serie de MOVETO , LINETO
y CLOSEPOLY para cada rectángulo. Para cada rectángulo, necesitamos 5 vértices: 1 para MOVETO , 3 para
LINETO y 1 para el CERRADOPOLY . Como indicado en el mesa arriba, el vértice para el Poli cerrado es
ignorado pero nosotros Todavía lo necesito para mantener los códigos alineados con los vértices:
nverts
Todo eso=restos
nrects*(1+3+1)
es a crear el camino, adjuntar él a a Parche de ruta , y agregar él a nuestro ejes:
verts = np.zeros((nverts, 2))
codes
barpath == np.ones(nverts, int)codes)
path.Path(verts, * path.Path.LINETO
Aquí es el resultado
codes[0::5] = path.Path.MOVETO
patch = patches.PathPatch(barpath,
codes[4::5] =
facecolor='green',
path.Path.CLOSEPOLY edgecolor='yellow', alpha=0.5)
ax.add_patch(patch)
verts[0::5,0] = left
verts[0::5,1] = bottom
verts[1::5,0] = left
verts[1::5,1] = top
verts[2::5,0] = right
verts[2::5,1] = top
verts[3::5,0] = right
verts[3::5,1] =
bottom
3.3. 9
Matplotlib, Release
35
30
25
20
15
10
0
3 2 1 0 1 2 3 4
de Matplotlib efectos de ruta módulo proporciona funcionalidad a aplicar a múltiple dibujar escenario a
cualquier Artista que se puede representar a través de una ruta .
Artistas cual poder tener a camino efecto aplicado a a ellos incluir Parche , Línea2D , Colección y
incluso Texto . Los efectos de ruta de cada artista se pueden controlar a través del método
set_path_effects ( set_path_effects ), que toma un iterable de instancias AbstractPathEffect .
El más simple camino efecto es el Normal efecto , cual simplemente Sorteos el artista sin cualquier efecto :
9 Chapter 3.