0% encontró este documento útil (0 votos)
4 vistas106 páginas

Matplotlib: John Cazador, Darren Valle, Eric Disparo, Miguel Droettboom y El

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
4 vistas106 páginas

Matplotlib: John Cazador, Darren Valle, Eric Disparo, Miguel Droettboom y El

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 106

Matplotlib

Liberar 2.0.2

John Cazador, Darren Valle, Eric Disparo, Miguel Droettboom y el

Puede 10, 2017


CONTENIDO

I Del usuario Guía 1

1 Introducción 3

2 Instalación 5

3 Tutoriales 11

4 Laboral con texto 97

5 Colores 145

6 Personalización matplotlib 173

7 Interactivo Parcelas 189

8 Seleccionado Ejemplos 205

9 Qué nuevo en matplotlib239

10 GitHub Estadísticas 339

11 Licencia 417

12 Créditos 421

II El Matplotlib API 423

13 Trazando Comandos Resumen 425

14 API Cambios 433

15 El arriba nivel Matplotlib módulo 483

16 afm (Adobe Fuente Métrica interfaz) 487

17 animación módulo 491

i
18 artista Módulo 535

19 Ejes clase 555

20 eje y garrapata API 793

21 extremos traseros 913

22 libro 953

23 centímetro (mapa de colores) 971

24 colecciones 975

25 barra de colores 1145

26 colores 1151

27 contenedor 1165

28 Fechas 1167

29 Dviread 1181

30 figura 1185

31 Finanzas 1207

32 administrador de fuentes 1219

33 especificación de cuadrícula 1227

34 imagen 1231

35 leyenda y manejador de leyendas 1237

36 líneas 1245

37 marcadores 1255

38 texto matemático 1259

39 laboratorio mlab 1279

40 Desactivar el cuadro de configuración 1313

41 parches 1325

42 camino 1367

43 Efectos patéticos 1375

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

53 diseño ajustado 1647

54 Laboral con transformaciones 1649

55 triangular rejillas 1671

56 tipo de fuente 1683

57 unidades 1685

58 widgets 1687

III El Matplotlib Preguntas frecuentes 1703

59 Instalación 1705

60 Uso 1713

61 Cómo hacerlo 1725

62 Solución de problemas 1741

63 Ambiente Variables 1745

64 Laboral con Matplotlib en Virtual ambientes 1747

65 Laboral con Matplotlib en OSX 1749

IV Matplotlib Cuadrícula de ejes Juego de herramientas 1753

66 Descripción general de Cuadrícula de ejes Juego de herramientas 1757

67 El Matplotlib Cuadrícula de ejes Kit de herramientas Del usuario Guía 1779

iii
68 El Matplotlib Cuadrícula de ejes Kit de herramientas API 1795

69 El Matplotlib ejes_cuadrícula1 Kit de herramientas API 1805

V mplot3d 1823

70 Matplotlib diagrama mplot3d Juego de herramientas 1825

VI Juegos de herramientas 1879

71 Cartografía Juegos de herramientas 1883

72 General Juegos de herramientas 1885

73 De alto nivel Conspiración 1889

VII Externo Recursos 1893

74 Libros, Capítulos y Artículos 1895

75 Vídeos 1897

76 Tutoriales 1899

VIII El Matplotlib Desarrolladores Guía 1901

77 Contribuyendo 1903

78 Del desarrollador Consejos para probar el 1911

79 Del desarrollador consejos para documentando matplotlib 1917

80 Del desarrollador guía para creando balanza y transformaciones 1929

81 Del desarrollador consejos para escribiendo código para Pitón 2 y 3 1933

82 Laboral con Matplotlib fuente código 1937

83 Revisores directriz 1957

84 Liberar Guía 1959

85 Matplotlib Realce Propuestas 1965

86 Licencias 2017

87 Por defecto Color cambios 2019

i
IX Matplotlib Ejemplos 2023

88 animación Ejemplos 2025

89 api Ejemplos 2029

90 cuadrícula de ejes Ejemplos 2123

91 color Ejemplos 2175

92 manejo de eventos Ejemplos 2187

93 página principal Ejemplos 2221

94 imágenes_contornos_y_campos Ejemplos 2225

95 líneas, barras y marcadores Ejemplos 2237

96 Misceláneo Ejemplos 2251

97 diagrama mplot3d Ejemplos 2275

98 gráficos circulares y polares Ejemplos 2323

99 ejemplos_de_pylab Ejemplos 2329

100 diagramas de py Ejemplos 2769

101 escalas Ejemplos 2791

102 formas y colecciones Ejemplos 2793

103 escaparate Ejemplos 2799

104 parcelas de especialidad Ejemplos 2817

105estadísticas Ejemplos 2825

106 hojas de estilo Ejemplos 2857

107subparcelas_ejes_y_figuras Ejemplos 2873

108 pruebas Ejemplos 2877

109 etiquetas de texto y anotaciones Ejemplos 2889

110 garrapatas y espinas Ejemplos 2895

111 unidades Ejemplos 2909

112 interfaces de usuario Ejemplos 2935

113 widgets Ejemplos 3001

v
X Glosario 3015

Bibliografía 3019

Pitón Módulo Índice 3021

Índice 3023

v
Parte I

Del usuario Guía

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.

2.1 Instalación pre-construido paquetes

2.1.1 Mayoría plataformas : científico Pitón distribuciones

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.

2.1.2 Linux : usando su paquete gerente

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.3 Impermeable OS X : usando pepita

Si tú son en Impermeable OS X tú poder probablemente instalar Matplotlib binarios usando el estándar


Pitón Programa de instalación pip . Ver Instalación de ruedas binarias OSX .

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

python -m pip install -U pip setuptools


python -m pip install matplotlib

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 .

2.2 Instalación de fuente

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.

2.2.1 Construir Requisitos

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

pitón 2.7, 3.4, 3.5 o 3.6 Descargar pitón .


Numeroso 1.7.1 (o más tarde) formación apoyo para pitón ( descargar numeroso )
herramientas de configuración Herramientas de configuración proporciona extensiones para pitón paquete
instalación.
fechaútil 1.1 o más tarde Proporciona extensiones a pitón fecha y hora manejo. Si usando pepita,
Fácil instalación o instalando de fuente, el instalador voluntad intentar a descargar y instalar
Utilidad de fecha de Python de PyPI-es.
análisis py Necesario para el soporte de representación matemática mathtext de matplotlib. Si usa pip,
easy_install o en- Al estancarse desde la fuente, el instalador intentará descargar e instalar
pyparsing de PyPI.
libpng 1.2 (o más tarde) biblioteca para cargando y ahorro PNG archivos ( descargar ). libpng requiere libreta.
Pito Usado a manipular zona horaria consciente fechas y horas. https://pypi.python.org/pypi/pytz
Tipo libre 2.3 o más tarde Biblioteca para lectura verdadero tipo fuente archivos. Si usando pip,
fácil_instalación o Instalación desde la fuente, el instalador voluntad intentar a localizar Tipo libre
en esperado Ubicaciones. Si él no puedo, intentar instalar pkg-config , una herramienta utilizada
para encontrar las bibliotecas que no son de Python necesarias.
ciclista 0.10.0 o más tarde Componible ciclo clase usado para Construyendo estilo- ciclos
seis Requerido para compatibilidad entre pitón 2 y pitón 3

Dependencias para pitón 2

herramientas de funciones32 Requerido para compatibilidad si correr en Pitón 2.7.


subproceso32 Opcional, Unix solo. Retroportación de el subproceso estándar biblioteca de 3.2 + para Pitón 2.7.
Él proporciona mejor error mensajes y se acabó el tiempo apoyo.

Opcional Interfaz gráfica de usuario estructura

Estos son paquetes opcionales que puede que desee instalar para usar matplotlib con un conjunto de

2.2. Installing from 7


Matplotlib, Release
herramientas de interfaz de usuario. Consulte ¿Qué es un backend? para obtener más detalles sobre los
backends opcionales de matplotlib y las capacidades que brindan.

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

Opcional externo programas

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.

Requerido bibliotecas eso barco con Matplotlib

ag 2.4 El antigrano C ++ representación motor.matplotlib campo de golf contra el ag plantilla fuente


inactivamente, por lo que no afectará a nada en su sistema fuera de matplotlib.
casco 2012.1 A biblioteca para computación Delaunay triangulaciones.
Conversión tt tipo verdadero fuente utilidad

2.2.2 Edificio en Linux

Él es más fácil a usar su sistema paquete gerente a instalar el Dependencias.


Si tú son en Debian / Ubuntu, tú poder conseguir todo el Dependencias requerido a construir Matplotlib con:

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. Installing from 9


Matplotlib, Release

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 .

2.2.4 Edificio en Ventanas

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

2.2. Installing from 1


CAPÍTULO

TRES

TUTORIALES

3.1 Introductorio

3.1.1 Diagrama de Pyplot tutorial

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

0,0 0,5 1,0 1,5 2,0 2,5 3,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:

plt.plot([1, 2, 3, 4], [1, 4, 9, 16])


Para cada incógnita, y par de argumentos, allá es un opcional tercero argumento cual es el formato cadena
eso indica el color y línea tipo de el trama. El letras y símbolos de el formato cadena son de MATLAB, y
concatenas a color cadena con a línea estilo cuerda. La por defecto formato cadena es 'b-', cual es a sólido
azul línea. Por ejemplo, para trazar lo anterior con círculos rojos, emitiría

import matplotlib.pyplot as plt


plt.plot([1,2,3,4], [1,4,9,16], 'ro')
plt.axis([0, 6, 0, 20])
plt.show()

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

# evenly sampled time at 200ms intervals


t = np.arange(0., 5., 0.2)
# red dashes, blue squares and green triangles
plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3,
'g^') plt.show()

3.1. 1
Matplotlib, Release

100

80

60

40

20

0 1 2 3 4 5

Controlador línea propiedades

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 :

lines = plt.plot(x1, y1, x2, y2)


# use keyword args
plt.setp(lines, color='r', linewidth=2.0)

1 Chapter 3.
Matplotlib, Release

# or MATLAB style string value pairs


plt.setp(lines, 'color', 'r', 'linewidth', 2.0)

Aquí son el disponible Línea 2D propiedades.

Propiedad Valor Tipo


alfa flotar
animado [Verdadero | FALSO]
suavizado de líneas o [Verdadero | FALSO]
Automóvil club británico
caja de clip a matplotlib.transform.Bbox instancia
clip_en [Verdadero | FALSO]
ruta_clip a Camino instancia y a Transformar instancia, a
Parche
color o do cualquier Matplotlib color
contiene el golpear pruebas función
estilo_cap_guión [ ' culata ' | ' redondo ' | ' proyectando
']
estilo de unión de guión [ ' mitra ' | ' redondo ' | ' bisel ' ]
guiones secuencia de encendido / apagado tinta en agujas
datos (np.matriz xdatos, matriz np ydatos)
cifra a matplotlib.figura.Figura instancia
etiqueta cualquier cadena
estilo de línea o es [ ' - ' | ' - - ' | ' -. ' | ' : ' | ' pasos '
| ...]
ancho de línea o en blanco flotar valor en agujas
Lod [Verdadero | FALSO]
marcador [ ' +' | ' , ' | ' . ' | ' 1' | ' 2' | ' 3
' | ' 4' ]
color del borde del cualquier Matplotlib color
marcador o Mecánico
ancho del borde del flotar valor en agujas
marcador o maullar
color de la cara del cualquier Matplotlib color
marcador o mfc
tamaño del marcador o flotar
EM
mercado [ Ninguno | entero | (empezando, paso) ]
recogedor usado en interactivo línea selección
radio de selección el línea elegir selección radio
estilo_de_capuchón_sólid [ ' culata ' | ' redondo ' | ' proyectando
o ']
estilo de unión sólida [ ' mitra ' | ' redondo ' | ' bisel ' ]
transformar a matplotlib.transforms.Transformar instancia
visible [Verdadero | FALSO]
xdatos matriz np
ydatos matriz np
orden z cualquier número

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

In [69]: lines = plt.plot([1, 2, 3])


In [70]:
plt.setp(lines)
alpha: float
animated: [True | False]
antialiased or aa: [True |
False]

1 Chapter 3.
Matplotlib, Release

...snip

Laboral con múltiple cifras y ejes

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)

t1 = np.arange(0.0, 5.0, 0.1)


t2 = np.arange(0.0, 5.0, 0.02)
plt.figure(1)
plt.subplot(211)
plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k')

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:

import matplotlib.pyplot as plt


plt.figure(1) plt.subplot(211) plt.plot([1, 2, 3]) plt.subplot(212)
# the first figure
plt.plot([4, 5, 6]) # the first subplot in the first figure

# the second subplot in the first figure

plt.figure(2) # a second figure


plt.plot([4, 5, 6]) # creates a subplot(111) by default

plt.figure(1) # figure 1 current; subplot(212) still current


1 Chapter 3.
Matplotlib, Release

plt.subplot(211) # make subplot(211) in figure1 current


plt.title('Easy as 1, 2, 3') # subplot 211 title

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() .

Laboral con texto

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

# Fixing random state for reproducibility


np.random.seed(19680801)

mu, sigma = 100, 15


x = mu + sigma * np.random.randn(10000)
# the histogram of the data
n, bins, patches = plt.hist(x, 50, normed=1, facecolor='g', alpha=0.75)

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

Histograma de Coeficiente intelectual


0,030

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() :

t = plt.xlabel('my data', fontsize=14, color='red')


Estos propiedades son cubierto en más detalle en Texto propiedades y disposición .

Usando matemático expresiones en texto

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 .

Logarítmico y otro no lineal ejes

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

from matplotlib.ticker import NullFormatter # useful for `logit`

scale # Fixing random state for reproducibility


np.random.seed(19680801)
# make up some data in the interval ]0, 1[
y = np.random.normal(loc=0.5, scale=0.4,
size=1000) y = y[(y > 0) & (y < 1)]
y.sort()
x = np.arange(len(y))
# plot with various axes scales
plt.figure(1)
# linear
plt.subplot(221)
plt.plot(x, y)
plt.yscale('linear')
plt.title('linear')
plt.grid(True)

# 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

0 250 500 750 0 250 500 750

É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 Imagen tutorial

3.1. 2
Matplotlib, Release

Puesta en marcha Comandos

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:

In [1]: %matplotlib inline


Este vueltas en en línea conspirando, dónde trama gráficos voluntad aparecer en su Cuaderno. Este tiene
importante Implicaciones para interactividad. Para en línea conspirando, Comandos en células abajo el
celúla eso Salidas a trama voluntad no Afecta la trama. Por ejemplo, no es posible cambiar el mapa de
colores desde las celdas que se encuentran debajo de la celda que crea un gráfico. para otro backends,
semejante como qt4, eso abierto a separado ventana, células abajo aquellos eso crear el La trama cambiará
la trama: es un objeto vivo en la memoria.
Este tutorial voluntad usar de matplotlib estilo imperativo Conspirando interfaz, diagrama de pyplot. Este
interfaz mantiene estado global y es muy útil para experimentar de forma rápida y sencilla con distintas
configuraciones de trama. La alternativa es la orientado a objetos interfaz, cual es también muy poderoso,
y generalmente más adecuado para grande Desarrollo de aplicaciones. Si tu lo harías como a aprender
acerca de el orientado a objetos interfaz, a excelente lugar a comenzar es nuestro Preguntas frecuentes
sobre el uso . Por ahora, sigamos con el enfoque de estilo imperativo:

In [2]: import matplotlib.pyplot as plt


In [3]: import matplotlib.image as
Importador imagen
mpimg In [4]: datos
import en Numeroso
numpy as np matrices

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...

En [5]: img = mpimg . imread( ' chinche


apestoso.png ' )
Salida[5]:
formaci 0,40784314 0,40784314 0,40784314],
ón([[[ , ,
[ 0,40784314 0,40784314 0,40784314],
, ,
[ 0,40784314, 0,40784314 0,40784314],
..., ,
[ 0,42745098 0,42745098 0,42745098],
, ,
[ 0,42745098 0,42745098 0,42745098],
, ,
[ 0,42745098 0,42745098 0,42745098]],
, ,

...,
[[ 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

[ 0.44705883, 0.44705883, 0.44705883],


[ 0.44313726, 0.44313726, 0.44313726]]], dtype=float32)

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.

Trazando Numeroso matrices como imágenes

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.

In [6]: imgplot = plt.imshow(img)

50

100

150

200

250

300

350

0 100 200 300 400 500

3.1. 2
Matplotlib, Release

Tú poder también trama cualquier Numeroso formación.

Aplicando pseudocolor esquemas a imagen Parcelas

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 [7]: lum_img = img[:,:,0]


Este es formación rebanando. Tú poder leer más en el Numeroso Tutorial .

In [8]: plt.imshow(lum_img)

50

100

150

200

250

300

350

0 100 200 300 400 500

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.

In [9]: plt.imshow(lum_img, cmap="hot")

2 Chapter 3.
Matplotlib, Release

50

100

150

200

250

300

350

0 100 200 300 400 500

Nota eso tú poder también cambiar mapas de colores en existente trama objetos usando el establecer_cmap()
método:

In [10]: imgplot = plt.imshow(lum_img)


In [11]: imgplot.set_cmap('nipy_spectral')

3.1. 2
Matplotlib, Release

50

100

150

200

250

300

350

0 100 200 300 400 500

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.

Color escala referencia

Es útil a tener un idea de qué valor a color representa. Nosotros poder hacer eso por añadiendo color verja.

In [12]: imgplot = plt.imshow(lum_img)


In [13]: plt.colorbar()

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.

Examinando a específico datos rango

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.

In [14]: plt.hist(lum_img.ravel(), bins=256, range=(0.0, 1.0), fc='k', ec='k')

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 .

In [15]: imgplot = plt.imshow(lum_img, clim=(0.0, 0.7))

3 Chapter 3.
Matplotlib, Release

Antes Después
0 0

100 100

200 200

300 300

0 200 400 0 200 400

0,1 0,3 0,5 0,7 0,1 0,3 0,5 0,7

Formación Interpolación esquemas

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.

In [16]: from PIL import Image


In [17]: img = Image.open('../_static/stinkbug.png')
In [18]: img.thumbnail((64, 64), Image.ANTIALIAS) # resizes image in-place
In [19]: imgplot = plt.imshow(img)

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:

In [20]: imgplot = plt.imshow(img, interpolation="nearest")

3 Chapter 3.
Matplotlib, Release

10

20

30

40

0 10 20 30 40 50 60

In [21]: imgplot = plt.imshow(img, interpolation="bicubic")

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.

3.1.3 Personalización Ubicación de Subtrama Usando Especificación de cuadrícula

Especificación de cuadrícula especifica la geometría de la cuadrícula en la que se


colocará una subparcela. Es necesario establecer el número de filas y el número de
columnas de la cuadrícula. Opcionalmente, se pueden ajustar los parámetros de diseño
de la subparcela (por ejemplo, izquierda, derecha, etc.).
SubtramaEspecificación especifica el ubicación de el subtrama en el dado Especificación de cuadrícula .
subtrama2cuadrícula() a ayudante función eso es similar a subtrama() pero usos
Basado en 0 indexar y dejar que la subparcela ocupe múltiples celdas.

Básico Ejemplo de usando subparcela 2 cuadrícula

A usar subplot2grid() , tú proporcionar geometría de el red y el ubicación de el subtrama en el


cuadrícula. Para una subtrama simple de una sola celda:

esaxidéntico
= plt.subplot2grid((2, 2), (0, 0))
a

3 Chapter 3.
Matplotlib, Release

ax = plt.subplot(2, 2, 1)

Nota eso, a diferencia de de Matplotlib subtrama, el índice comienza de 0


en GridSpec. Para crear un subgráfico que abarque varias celdas,

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

Especificación de cuadrícula y SubtramaEspecificación

Tú poder crear GridSpec explícitamente y usar a ellos a crear a


subtrama. Por ejemplo,

3.1. 3
Matplotlib, Release

ax = plt.subplot2grid((2, 2), (0, 0))

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

Ajustar Especificación de cuadrícula disposición

Cuando a Especificación de cuadrícula es explícitamente usado, tú poder ajustar el disposición parámetros


de subtramas eso son creado de GridSpec.

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

Especificación de cuadrícula usando SubtramaEspecificación

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

ax2 ax3 ax6

A Complejo Anidado Especificación de cuadrícula usando SubtramaEspecificación

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

Especificación de cuadrícula con Diverso Tamaños de celdas

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

3.1.4 Ajustado Disposición guía

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

En matplotlib, el ubicación de ejes (incluido subtramas) son especificado en normalizado cifra


coordenadas. Puede pasar eso su eje etiquetas o títulos (o a veces incluso etiquetas de verificación) ir
afuera el cifra área, y son Así recortado.

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

0.0 0.5 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

0.0 0.5 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.

plt.tight_layout(pad=0.4, w_pad=0.5, h_pad=1.0)

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 .

Usar con Especificación de cuadrícula

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()

import matplotlib.gridspec as gridspec

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).

gs1.tight_layout(fig, rect=[0, 0, 0.5, 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)

gs2.tight_layout(fig, rect=[0.5, 0, 1, 1], h_pad=0.5)

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

Nosotros puede intentar a fósforo el arriba y abajo de dos rejillas

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.

top = min(gs1.top, gs2.top)


bottom = max(gs1.bottom, gs2.bottom)

gs1.tight_layout(fig, rect=[None, 0 + (bottom-gs1.bottom),


0.5, 1 - (gs1.top-top)])
gs2.tight_layout(fig, rect=[0.5, 0 + (bottom-gs2.bottom),
None, 1 - (gs2.top-top)],
h_pad=0.5)

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

Usar con EjesGrid1

Mientras limitado, el ejes_cuadrícula1 kit de herramientas es también apoyado.

plt.close('all')
fig =
plt.figure()

from mpl_toolkits.axes_grid1 import Grid


grid = Grid(fig, rect=111, nrows_ncols=(2,2),
axes_pad=0.25, label_mode='L',
)
for ax in grid:
example_plot(ax)
ax.title.set_visible(Fals
e)
plt.tight_layout()

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.1 Artista tutorial

Allá son tres capas a el Matplotlib Asignación de funciones. El


matplotlib.backend_bases.FiguraCanvas es el área sobre la que se dibuja la figura,
matplotlib.backend_bases.Renderer es el objeto que sabe cómo dibujar en FigureCanvas , y
matplotlib.artist.Artist es el objeto que sabe cómo usar a renderizador a pintar sobre el lienzo. El
FiguraLienzo y Renderizador manejar todo el detalles de hablando con usuario interfaz kits de
herramientas como wxPython o dibujo idiomas como PostScript ® , y el Artista manijas todas las
construcciones de alto nivel como representar y diseñar la figura, el texto y las líneas. El usuario típico
pasará el 95% de su tiempo trabajando con los artistas .
Allá son dos tipos de Artistas : primitivos y contenedores. Los primitivos representar el estándar objetos
gráficos que queremos pintar en nuestro lienzo: Line2D , Rectangle , Text , AxesImage , etc., y los
contenedores son lugares a poner a ellos ( Eje , Ejes y Cifra ). El estándar usar es a crear a Cifra
instancia, Utilice la figura para crear uno o más ejes o subtramas instancias y utilizar los Ejes
métodos auxiliares de instancia para crear los primitivos. En el siguiente ejemplo, creamos una instancia
de Figure usando matplotlib.pyplot. figure() , que es un método conveniente para crear instancias
de Figure y conectarlas con su interfaz de usuario o kit de herramientas de dibujo FigureCanvas .
Como veremos más adelante, esto no es necesario: poder trabajar directamente con Posdata, PDF Gtk + ,
o wxPython FiguraLienzo instancias, instanciar Tus figuras directamente y conectarlos ustedes
mismos – pero como aquí nos centramos en el Artista API Dejaremos que pyplot se encargue de
algunos de esos detalles por nosotros:

3.2. 5
Matplotlib, Release

import matplotlib.pyplot as plt


fig = plt.figure()
ax = fig.add_subplot(2,1,1) # two rows, one column, first plot
El Los ejes son probablemente el mayoría importante clase en el Matplotlib API, y el uno tú voluntad ser
laboral con la mayor parte del tiempo. Esto se debe a que los ejes es el área de trazado en la que van la
mayoría de los objetos y los ejes tiene muchos especial ayudante métodos ( trama() , texto() ,
hist() , imshow() ) a crear el mayoría Primitivos gráficos comunes ( Line2D , Text , Rectangle ,
Image , respectivamente). Estos métodos auxiliares tomarán sus datos (p.ej, Numeroso matrices y
instrumentos de cuerda) y crear primitivo Artista instancias como necesario (p.ej, Línea2D ), Añadelos
a el importante contenedores, y dibujar a ellos cuando solicitado. La mayoría de tú son probablemente
familiar con La subtrama , cual es justo a especial caso de un Ejes eso vidas en a regular filas por
columnas red de instancias de subtrama . Si tú desear a crear un Ejes en un arbitrario ubicación,
simplemente usar el agregar_ejes() método que toma a lista de [izquierda, abajo, ancho,
altura] valores en 0-1 relativo cifra coordenadas:

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:

SiIn realiza ax.lines[0]


[101]: llamadas posteriores a ax.plot (y el estado de retención es "activado", que es el
predeterminado) luego líneas adicionalesinstance
Out[101]: <matplotlib.lines.Line2D at agregado
voluntad ser 0x19a95710>
a el lista.tu poder eliminar pauta más
tarde simplemente por vocación el lista métodos; cualquiera de Estos funcionarán:
In [102]: line
Out[102]: <matplotlib.lines.Line2D instance at 0x19a95710>
del ax.lines[0]
El Ejes también tiene ayudante métodos a configurar y decorar el eje x y eje y garrapata, garrapata
ax.lines.remove(line)#
etiquetas y etiquetas de eje : one or the other, not both!

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

Intentar creando el cifra abajo.

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:

Sio.set(alpha=0.5, zorder=2) en el pitón caparazón, a práctico forma a inspeccionar el Artista


tú son laboral interactivamente
propiedades es a Utilice la función matplotlib.artist.getp() (simplemente getp() en pylab), que
enumera las propiedades y sus valores. Esto funciona para las clases derivadas de Artist. también, por
ejemplo, Figura y Rectángulo . Aquí están las propiedades del rectángulo de la figura
mencionadas anteriormente:

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

transform = <Affine object at


0x134cca84> verts = ((0, 0), (0, 1),
(1, 1), (1, 0))
visible = True
width = 1
window_extent = <Bbox object at
0x134acbcc> x = 0
y=0
zorder = 1

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

El contenedor de nivel superior Artista es matplotlib.figure.Figure y contiene todo lo que hay


en la figura. El fondo de el cifra es a Rectángulo cual es almacenado en Figura.patch . Como
tú añadir subtramas ( agregar_subtrama() ) y ejes ( agregar_ejes() ) a el cifra estos voluntad ser
Adjunto a el Figura. ejes . Estos también son devueltos por los métodos que los crean:

In [156]: fig = plt.figure()


Porque el cifra mantiene el concepto de el "actual ejes” (ver Figura.gca y Figura.sca ) Para
apoyar el pylab
In [157]: ax1 = / pyplot estado máquina, tú debería no insertar o eliminar ejes directamente de el ejes
fig.add_subplot(211)
lista, pero más bien usar el agregar_subtrama() y agregar_ejes() métodos a insertar, y el relaja()
In [158]: ax2 = fig.add_axes([0.1, 0.1, 0.7, 0.3])
método a Borrar. Tú son gratis sin embargo, a iterar encima el lista de ejes o índice en él a conseguir
acceso a
In [159]: Ejes instancias tú Quiero personalizar. Aquí hay un ejemplo que activa todas las cuadrículas de
ax1
ejes:
Out[159]: <matplotlib.axes.Subplot instance at 0xd54b26c>

In [160]: print fig.axes


[<matplotlib.axes.Subplot instance at 0xd54b26c>, <matplotlib.axes.Axes instance at␣
‹→0xd3f0b2c>]

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 [191]: fig = plt.figure()


Aquí es a resumen de el Artistas el cifra contiene
In [192]: l1 = matplotlib.lines.Line2D([0, 1], [0, 1],
transform=fig.transFigure, figure=fig)
In [193]: l2 = matplotlib.lines.Line2D([0, 1], [1, 0],
transform=fig.transFigure, figure=fig)
In [194]: fig.lines.extend([l1, l2])

In [195]: fig.canvas.draw()

6 Chapter 3.
Matplotlib, Release

Cifra atributo Descripción


ejes A lista de Ejes instancias (incluye Subtrama)
parche El Rectángulo fondo
imágenes A lista de Imágenes de figuras parches - útil para crudo píxel
mostrar
Leyendas A lista de Cifra Leyenda instancias ( diferente de
Ejes.leyendas)
pauta A lista de Cifra Línea 2D instancias (casi nunca usado, ver
Ejes.lineas)
parches A lista de Cifra parches (casi nunca usado, ver Ejes.parches)
textos A lista Cifra Texto instancias

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()

En [262]: hacha = Figura .

add_subplot( 111 ) # crear a

rectángulo instancia
En [263]: recto = matplotlib . parches . rectángulo ( ( 1 , 1 ), ancho = 5 , altura = 12 )

# por por defecto el ejes instancia es Ninguno


En [264]: imprimir rect . obtener_ejes()
Ninguno

# y el transformación instancia es colocar a el "identidad transformar"


En [265]: imprimir rect .get_transform ()
<Afín objeto en 0x13695544>

# ahora nosotros agregar el Rectángulo a el Ejes


En [266]: hacha .add_patch ( rect)
# y aviso eso el ax.add_patch método tiene colocar el ejes
# instancia
En [267]: imprimir rect .
get_axes()
Ejes(0,125,0,1;0,775x0,8)

# y el transformación tiene estado colocar también


En [268]: imprimir rect .get_transform ()
<Afín objeto en 0x15009ca4>

# el por defecto ejes transformación es ax.transData


En [269]: imprimir hacha .transData
<Afín objeto en 0x15009ca4>

# aviso eso el xlimites de el Ejes tener no estado cambió


En [270]: imprimir
hacha.get_xlim () ( 0.0, 1.0)

# pero el datos límites tener estado actualizado a abarcar el rectángulo


En [271]: imprimir ax . dataLim .
límites (1.0, 1.0, 5.0, 12.0)

# nosotros poder a mano invocar el escalamiento automático maquinaria


En [272]: hacha.autoscale_view ( )

# y ahora el xlim son actualizado a abarcar el rectángulo


En [273]: imprimir
hacha.get_xlim () ( 1.0, 6.0)

# nosotros tener a a mano fuerza a cifra dibujar


En [274]: hacha . figura . lienzo . dibujar()

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.:

Aquí hay unaxis


In [285]: = ax.xaxis
resumen de algunos de los métodos de acceso útiles del Eje (Estos tienen configuradores
correspondientes cuando son útiles, como set_major_formatter)
In [286]: axis.get_ticklocs()
Accesorio método
Out[286]: Descripción
array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
obtener_escala El escala de el eje, p.ej, 'registro' o 'lineal'
In [287]: axis.get_ticklabels()
obtener_intervalo_de_ El intervalo instancia de el eje vista límites
Out[287]:
vista <a list of 10 Text major ticklabel objects>
intervalo de obtención El intervalo instancia de el eje datos límites
#de note
datos there are twice as many ticklines as labels because by
# default there are tick lines at the top and bottom but only
obtener_líneas_de_cu
tick # A lista de
labels below thered pauta para
xaxis; this El ejebe customized
can
adrícula
In [288]: axis.get_ticklines()
obtener_etiqueta
Out[288]: <a list of El20eje etiquetaticklines
Line2D - a Texto instancia
objects>
obtener_etiquetas_tic A lista de Texto instancias - palabra clave menor =
#k by default you getVerdadero
the major| Falso
ticks back
obtener_líneas_de_tic
In A lista de Línea 2D instancias - palabra clave menor =
[291]: axis.get_ticklines()
k
Out[291]: <a list of Verdadero
20 Line2D | Falso
ticklines objects>
obtener_ticklocs A lista de Garrapata Ubicaciones - palabra clave menor
# but you can also ask = Verdadero
for the |minor
Falso ticks
obtener_localizador_p
In El matplotlib.ticker.Localizador instancia para
[292]: axis.get_ticklines(minor=True)
rincipal <a list of importante
Out[292]: 0 Line2D garrapatas
ticklines objects>
obtener_formateador_ El matplotlib.ticker.Formateador instancia para
principal importante garrapatas
obtener_localizador_ El matplotlib.ticker.Localizador instancia para menor
menor garrapatas
obtener_formateador_ El matplotlib.ticker.Formateador instancia para menor
menor garrapatas
obtener_ticks_princip A lista de Garrapata instancias para importante
ales garrapatas
obtener_ticks_menore A lista de Garrapata instancias para menor garrapatas
s
red Doblar el red en o apagado para el importante o menor
garrapatas
Aquí es un ejemplo, no recomendado para es belleza, cual personaliza el ejes y garrapata propiedades

3.2. 6
Matplotlib, Release

import numpy as np
import matplotlib.pyplot as plt

# plt.figure creates a matplotlib.figure.Figure instance


fig = plt.figure()
rect = fig.patch # a rectangle instance
rect.set_facecolor('lightgoldenrodyellow')
ax1 = fig.add_axes([0.1, 0.3, 0.4,
0.4]) rect = ax1.patch
rect.set_facecolor('lightslategray')

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

# Fixing random state for reproducibility


np.random.seed(19680801)

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

0,0 2,5 5,0 7,5 10,0 12,5 15,0 17,5

3.2. 6
Matplotlib, Release

3.2.2 Leyenda guía

Esta guía de leyendas es una extensión de la documentación disponible en legend() : asegúrese de


estar familiarizado con el contenido de esa documentación antes de continuar con esta guía.
Este guía marcas usar de alguno común términos, cual son documentado aquí para claridad:
entrada de leyenda A leyenda es hecho arriba de uno o más leyenda entradas. Una entrada es hecho
arriba de exactamente uno llave y una etiqueta.
leyenda La clave coloreado / estampado marcador a el izquierda de cada leyenda etiqueta.
leyenda etiqueta La texto cual describe el manejar representado por el llave.
leyenda Manejar El original objeto cual es usado a generar un adecuado entrada en el leyenda.

Controlar las entradas de la leyenda

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() :

line_up, = plt.plot([1,2,3], label='Line 2')


line_down, = plt.plot([3,2,1], label='Line 1')
Creando artistas específicamente
plt.legend([line_up, para['Line
line_down], añadiendo a el leyenda
Up', 'Line Down'])(también conocido como. Apoderado
artistas)

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

import matplotlib.patches as mpatches


import matplotlib.pyplot as plt

red_patch = mpatches.Patch(color='red', label='The red data')


plt.legend(handles=[red_patch])
plt.show()

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

blue_line = mlines.Line2D([], [], color='blue', marker='*',


markersize=15, label='Blue
stars') plt.legend(handles=[blue_line])
plt.show()

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

Múltiple Leyendas en el mismo Ejes

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:

import matplotlib.pyplot as plt

line1, = plt.plot([1,2,3], label="Line 1",


linestyle='--') line2, = plt.plot([3,2,1], label="Line 2",
linewidth=4)
# Create a legend for the first line.
first_legend = plt.legend(handles=[line1], loc=1)

3.2. 7
Matplotlib, Release

# Add the legend manually to the current Axes.


ax = plt.gca().add_artist(first_legend)
# Create another legend for the second line.
plt.legend(handles=[line2], loc=4)

plt.show()

3.00 Line 1

2,75

2,50

2.25

2.00

1,75

1,50

1.25

1.00 Line 2

0,00 0,25 0,50 0,75 1,00 1,25 1,50 1,75 2,00

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.

import matplotlib.pyplot as plt


from matplotlib.legend_handler import HandlerLine2D
line1, = plt.plot([3,2,1], marker='o', label='Line 1')
line2,
3.00= plt.plot([1,2,3], marker='o', label='Line 2')
plt.legend(handler_map={line1: HandlerLine2D(numpoints=4)})
2,75

2,50

2.25

Line 1
2.00
Line 2

1,75

1,50

1.25

1.00

0,00 0,25 0,50 0,75 1,00 1,25 1,50 1,75 2,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

import matplotlib.pyplot as plt


from numpy.random import
randn

z = randn(10)

red_dot, = plt.plot(z, "ro", markersize=15)


# Put a white cross over some of the data.
white_cross, = plt.plot(z[:5], "w+", markeredgewidth=3, markersize=15)

plt.legend([red_dot, (red_dot, white_cross)], ["Attr A", "Attr A+B"])

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

Implementando a costumbre leyenda entrenador de animales

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() .

import matplotlib.pyplot as plt


import matplotlib.patches as
mpatches

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:

from matplotlib.legend_handler import HandlerPatch


import matplotlib.pyplot as plt

3.2. 7
Matplotlib, Release

import matplotlib.patches as mpatches

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]

c = mpatches.Circle((0.5, 0.5), 0.25, facecolor="green",


edgecolor="red",
linewidth=3) plt.gca().add_patch(c)
plt.legend([c], ["An ellipse, not a rectangle"],
handler_map={mpatches.Circle: HandlerEllipse()})

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

Conocido ejemplos de usando leyenda

Aquí es a no exhaustivo lista de el ejemplos disponible involucrando leyenda ser usado en varios maneras:

7 Chapter 3.
Matplotlib, Release

• líneas, barras y marcadores ejemplo código: Dispersión con leyenda.py


• api ejemplo código: leyenda_demo.py
• ejemplos_de_pylab ejemplo código: contourf_hatching.py
• ejemplos_de_pylab ejemplo Código: figlegend_demo.py
• ejemplos_de_pylab ejemplo código: scatter_symbol.py

3.3 Avanzado

3.3.1 Transformaciones Tutorial

Como cualquier gráficos paquetes, Matplotlib es construido en arriba de a transformación estructura a


fácilmente mover entre sistemas de coordenadas, los datos del área de usuario sistema de
coordenadas, los ejes sistema de coordenadas, el sistema de coordenadas de la figura y la
visualización sistema de coordenadas. En el 95% de tus planes, no necesitarás pensar en este, como él
sucede bajo el capucha, pero como tú empujar el límites de costumbre cifra generación, él Ayuda a
comprender estos objetos para que pueda reutilizar las transformaciones existentes que matplotlib pone a
su disposición. a tú, o crear su propio (ver matplotlib.transforms ). El mesa abajo resume el existente
coordinar sistemas, los transformación objeto tú debería usar a trabajar en eso coordinar sistema, y el
descripción de eso sistema. En el Transformación Objeto columna, hacha es a Instancia de ejes , y
higo es una instancia de Figura .
Co- Transformar Descripción
ordena -
r Objeto de
información
datos hacha. El tierra de usuario datos coordinar sistema, revisado por el xlim y ylim
transDato
s
ejes hacha. El coordinar sistema de el Ejes ; (0,0) es abajo izquierda de el ejes, y (1,1) es
transEjes arriba bien de los ejes.
cifra higo. La coordenada sistema del Cifra ; (0,0) es abajo izquierda del cifra, y (1,1)
transfigura es arriba bien de el cifra.
r
mostr yNinguno Este es el píxel coordinar sistema de el mostrar; (0,0) es el abajo izquierda del
ar mostrar, y (ancho, altura) es el arriba bien de el mostrar en píxeles.
Alternativamente, el identidad transformar (
matplotlib.transforms.IdentityTransform() ) se puede utilizar en lugar de
Ninguno.
Todos los objetos de transformación en la tabla anterior toman entradas en su sistema de coordenadas y
transforman las aporte a el mostrar coordinar sistema. Eso es por qué el mostrar coordinar sistema
tiene Ninguno para El objeto de transformación columna – ya está en coordenadas de
visualización. Las transformaciones también saben invertirse, pasar de la exhibición a la realidad.
volver al sistema de coordenadas nativo. Esto es particularmente útil cuando tratamiento eventos de el
usuario interfaz, cual típicamente ocurrir en mostrar espacio, y tú desea saber dónde se produjo el clic del
mouse o la presión de una tecla en su sistema de coordenadas de datos.

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

Tú poder usar el ax.transData instancia a transformar de su datos a su mostrar coordinar sistema,


ya sea un solo punto o una secuencia de puntos como se muestra a continuación:

7 Chapter 3.
Matplotlib, Release

In [14]: type(ax.transData)
Out[14]: <class 'matplotlib.transforms.CompositeGenericTransform'>

In [15]: ax.transData.transform((5, 0))


Out[15]: array([ 335.175,247. ])

In [16]: ax.transData.transform([(5, 0), (1,2)])


Out[16]:
array([[ 335.175, 247. ],
[ 132.435, 642.2 ]])
Tú poder usar el invertido() método a crear a transformar cual voluntad llevar tú de mostrar a datos
coordenadas :

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,50 data = (5.0, 0.0)

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 .

In [54]: ax.transData.transform((5, 0))


Out[54]: array([ 335.175, 247. ])
Ejes coordenadas
In [55]: ax.set_ylim(-1,2)
Después
Out[55]:de(-1, datos sistema de coordenadas, ejes Es probablemente el segundo sistema de
los 2)
coordenadas más útil. Aquí el punto (0,0) es la parte inferior izquierda de los ejes o subparcela, (0,5, 0,5)
esInel[56]: ax.transData.transform((5,
centro y (1,0, 1,0) es la parte superior0)) derecha . poder también referirse a agujas afuera el rango,
array([
Out[56]:(-0,1,
entonces 1.1) es335.175
a el izquierda, y 181.13333333])
arriba su ejes. Este sistema de coordenadas es extremadamente útil
cuando colocación texto en su ejes, porque tú a menudo desear a texto burbuja en a Ubicación fija, por
In [57]: ax.set_xlim(10,20)
ejemplo, la parte superior izquierda del panel de ejes, y hacer que esa ubicación permanezca fija cuando
Out[57]: (10, 20)
se desplaza o hace zoom. Aquí hay un ejemplo simple que crea cuatro paneles y los etiqueta como 'A', 'B',
'C',
In 'D', como
[58]: se ve a menudo en las revistas. 0))
ax.transData.transform((5,
Out[58]: array([-171.675 , 181.13333333])
import numpy as np
import matplotlib.pyplot as plt

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

circ = patches.Circle((0.5, 0.5), 0.25, transform=ax.transAxes,


facecolor='yellow', alpha=0.5)
ax.add_patch(circ)

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

# y coord are axes


trans =
transforms.blended_transform_factory( ax.tran
sData, ax.transAxes)

# highlight the 1..2 stddev region with a span.


# We want x to be in data coordinates and y
to # span from 0..1 in axes coords
rect = patches.Rectangle((1,0), width=1, height=1,
transform=trans,
color='yellow', alpha=0.5)

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

Usando compensar transforma a crear a sombra efecto

Uno usar de transformaciones es a crear a nuevo transformación eso es compensar de otro


transformación, p.ej., a lugar uno objeto desplazado a poco relativo a otro objeto. Típicamente tú desear el
cambio a ser en alguno dimensión física, como agujas o pulgadas bastante que en datos coordenadas,
entonces eso el cambio efecto es constante en diferentes niveles de zoom y configuraciones de dpi.
Uno usar para un compensar es a crear a sombra efecto , dónde tú dibujar uno objeto idéntico a el primero
justo a el derecho de él, y justo abajo él, ajustando el orden z a hacer seguro el sombra es estirado primero
y entonces el objeto que está sombreando encima. El módulo de transformaciones tiene una
transformación auxiliar ScaledTranslation . Se instancia con:

trans = ScaledTranslation(xt, yt, scale_trans)


donde xt y yt son los desplazamientos de traducción y scale_trans es una transformación que
escala xt y yt en el momento de la transformación antes de aplicar los desplazamientos . Un caso
de uso típico es utilizar la figura fig. dpi_scale_trans transformación para el escala_trans
argumento, a primero escala xt y yt especificado en puntos para mostrar espacio antes de realizar el
desplazamiento final . E l desplazamiento de dpi y pulgadas es un caso de uso bastante común , por lo
que tenemos una función auxiliar especial para crearlo en
matplotlib.transforms.offset_copy() , que devoluciones a nuevo transformar con un
agregado compensar . Pero en el ejemplo A continuación, vamos a crear el transformación desfasada
nosotros mismos. Nota el usar de el más operador en:

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

ax.plot(x, y, lw=3, color='gray',


transform=shadow_transform,
zorder=0.5*line.get_zorder())
ax.set_title('creating a shadow effect with an offset transform')
plt.show()

creando a sombra efecto con un compensar transformar


1.00

0,75

0,50

0,25

0.00

0,25

0,50

0,75

1.00

0,00 0,25 0,50 0,75 1,00 1,25 1,50 1,75 2,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:

self.transData = self.transScale + (self.transLimits + self.transAxes)

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 .

3.3.2 Camino Tutorial

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

El siguiente camino códigos son conocido


Código Vértices Descripción
DETEN 1 (ignorado) A marcador para el fin de el completo camino (actualmente no
ER requerido y
ignorado)
MOVERS 1 Elegir arriba el bolígrafo y mover a el dado vértice.
EA
LINEA 1 Dibujar a línea de el actual posición a el dado vértice.
CURVA 2 (1 control punto, 1 Dibujar a cuadrático Bézier curva de el actual posición, con el
3 punto final) dado control punto, a el dado fin punto.
CURVA 3 (2 control agujas, Dibujar a cúbico Bézier curva de el actual posición, con el dado
4 1 punto final) control agujas, a el dado fin punto.
CIERRE Y 1 (punto sí mismo Dibujar a línea segmento a el comenzar punto de el actual polilínea.
POLÍTICO es
ignorado)

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

import matplotlib.patches as patches

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

0,0 0,2 0,4 0,6 0,8 1,0

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

# get the corners of the rectangles for the histogram


left = np.array(bins[:-1])
right = np.array(bins[1:])
bottom =
np.zeros(len(left)) top =
bottom + n

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

3.3.3 Camino efectos guía

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 :

import matplotlib.pyplot as plt


import matplotlib.patheffects as path_effects

fig = plt.figure(figsize=(5, 1.5))


text = fig.text(0.5, 0.5, 'Hello path effects world!\nThis is the normal '
'path effect.\nPretty dull, huh?',
ha='center', va='center', size=20)
text.set_path_effects([path_effects.Normal()])
plt.show()

9 Chapter 3.

También podría gustarte