Gráficas Con MatPlotLib PDF
Gráficas Con MatPlotLib PDF
#matplotlib
Tabla de contenido
Acerca de 1
Observaciones 2
Visión general 2
Versiones 2
Examples 2
Instalación y configuración 2
Windows 2
OS X 2
Linux 3
Debian / Ubuntu 3
Solución de problemas 3
Introducción 8
Examples 8
Sintaxis 14
Examples 14
Capítulo 4: Colormaps 15
Examples 15
Uso básico 15
Examples 23
Examples 25
Examples 27
Función boxplot 27
Capítulo 8: Histograma 34
Examples 34
Histograma simple 34
Observaciones 35
Examples 35
Examples 39
Leyenda simple 39
Examples 48
Introducción 51
Examples 51
LogLog graficando 51
Examples 54
Abriendo imagenes 54
Examples 56
Examples 58
Gráfico de dispersión 58
Parcelas Sombreadas 60
Líneas de parcelas 62
Diagrama de datos 64
Datos y linea 65
Mapa de calor 66
Sintaxis 70
Examples 70
Observaciones 83
Examples 86
Observaciones 88
Examples 89
Creditos 92
Acerca de
You can share this PDF with anyone you feel could benefit from it, downloaded the latest version
from: matplotlib
It is an unofficial and free matplotlib ebook created for educational purposes. All the content is
extracted from Stack Overflow Documentation, which is written by many hardworking individuals at
Stack Overflow. It is neither affiliated with Stack Overflow nor official matplotlib.
The content is released under Creative Commons BY-SA, and the list of contributors to each
chapter are provided in the credits section at the end of this book. Images may be copyright of
their respective owners unless otherwise specified. All trademarks and registered trademarks are
the property of their respective company owners.
Use the content presented in this book at your own risk; it is not guaranteed to be correct nor
accurate, please send your feedback and corrections to [email protected]
https://riptutorial.com/es/home 1
Capítulo 1: Empezando con matplotlib
Observaciones
Visión general
matplotlib es una biblioteca de trazado para Python. Proporciona API orientadas a objetos para
incrustar gráficos en aplicaciones. Es similar a MATLAB en capacidad y sintaxis.
Fue escrito originalmente por JDHunter y se está desarrollando activamente. Se distribuye bajo
una licencia BSD-Style.
Versiones
Última versión de
2.x 2.7, 3.x 2016-07-25
desarrollo
Examples
Instalación y configuración
Existen varias formas de instalar matplotlib, algunas de las cuales dependerán del sistema que
esté utilizando. Si tiene suerte, podrá usar un administrador de paquetes para instalar fácilmente
el módulo matplotlib y sus dependencias.
Windows
En las máquinas con Windows puede intentar usar el administrador de paquetes pip para instalar
matplotlib. Consulte aquí para obtener información sobre la configuración de pip en un entorno
Windows.
https://riptutorial.com/es/home 2
OS X
Se recomienda que utilice el administrador de paquetes pip para instalar matplotlib. Si necesita
instalar algunas de las bibliotecas que no son de Python en su sistema (por ejemplo, libfreetype
), considere usar Homebrew .
Si no puede usar pip por cualquier motivo, intente instalar desde la fuente .
Linux
Lo ideal sería utilizar el administrador de paquetes del sistema o pip para instalar matplotlib, ya
sea instalando el paquete python-matplotlib o ejecutando pip install matplotlib .
Si esto no es posible (por ejemplo, no tiene privilegios de sudo en la máquina que está usando),
entonces puede instalar desde la fuente usando la opción --user : python setup.py install --user .
Normalmente, esto instalará matplotlib en ~/.local .
Debian / Ubuntu
sudo apt-get install python-matplotlib
Solución de problemas
Consulte el sitio web de matplotlib para obtener consejos sobre cómo reparar un matplotlib roto.
plt.style.use('ggplot')
fig = plt.figure(1)
ax = plt.gca()
https://riptutorial.com/es/home 3
ax.set_xlabel(r'$x$', fontsize=14, labelpad=10)
ax.set_ylabel(r'$f(x)$', fontsize=14, labelpad=25, rotation=0)
plt.draw()
https://riptutorial.com/es/home 4
Sintaxis imperativa vs orientada a objetos
Matplotlib admite sintaxis tanto orientada a objetos como imperativa para el trazado. La sintaxis
imperativa está diseñada intencionalmente para estar muy cerca de la sintaxis de Matlab.
La sintaxis imperativa (a veces llamada sintaxis 'máquina de estado') emite una serie de
comandos que actúan sobre la figura o el eje más reciente (como Matlab). La sintaxis orientada a
objetos, por otra parte, actúa explícitamente sobre los objetos (figura, eje, etc.) de interés. Un
punto clave en el zen de Python afirma que explícito es mejor que implícito, por lo que la sintaxis
orientada a objetos es más pirónica. Sin embargo, la sintaxis imperativa es conveniente para los
nuevos conversos de Matlab y para escribir pequeños guiones de argumento "desechables". A
continuación se muestra un ejemplo de los dos estilos diferentes.
t = np.arange(0, 2, 0.01)
y = np.sin(4 * np.pi * t)
# Imperative syntax
https://riptutorial.com/es/home 5
plt.figure(1)
plt.clf()
plt.plot(t, y)
plt.xlabel('Time (s)')
plt.ylabel('Amplitude (V)')
plt.title('Sine Wave')
plt.grid(True)
https://riptutorial.com/es/home 6
Arreglos bidimensionales (2D)
import numpy as np
from matplotlib.pyplot import imshow, show, colorbar
image = np.random.rand(4,4)
imshow(image)
colorbar()
show()
https://riptutorial.com/es/home 7
Capítulo 2: Animaciones y tramas
interactivas.
Introducción
Con python matplotlib puedes hacer correctamente gráficos animados.
Examples
Animación básica con función de animación.
El paquete matplotlib.animation ofrece algunas clases para crear animaciones. FuncAnimation crea
animaciones llamando repetidamente a una función. Aquí usamos una función animate() que
cambia las coordenadas de un punto en el gráfico de una función sinusoidal.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
TWOPI = 2*np.pi
fig, ax = plt.subplots()
ax = plt.axis([0,TWOPI,-1,1])
def animate(i):
redDot.set_data(i, np.sin(i))
return redDot,
plt.show()
https://riptutorial.com/es/home 8
Guarda la animación en gif
En este ejemplo se utiliza el save método para guardar una Animation de objetos mediante
ImageMagick.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from matplotlib import rcParams
# make sure the full paths for ImageMagick and ffmpeg are configured
rcParams['animation.convert_path'] = r'C:\Program Files\ImageMagick\convert'
rcParams['animation.ffmpeg_path'] = r'C:\Program Files\ffmpeg\bin\ffmpeg.exe'
TWOPI = 2*np.pi
fig, ax = plt.subplots()
https://riptutorial.com/es/home 9
ax = plt.axis([0,TWOPI,-1,1])
def animate(i):
redDot.set_data(i, np.sin(i))
return redDot,
Para interactuar con parcelas, Matplotlib ofrece widgets neutros de GUI. Los widgets requieren un
objeto matplotlib.axes.Axes .
Aquí hay una demostración del widget deslizante que detalla la amplitud de una curva sinusoidal.
La función de actualización es activada por el evento on_changed() del control deslizante.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from matplotlib.widgets import Slider
TWOPI = 2*np.pi
fig, ax = plt.subplots()
ax = plt.axis([0,TWOPI,-1,1])
def update(val):
# amp is the current value of the slider
amp = samp.val
# update curve
l.set_ydata(amp*np.sin(t))
# redraw canvas while idle
fig.canvas.draw_idle()
plt.show()
https://riptutorial.com/es/home 10
Otros widgets disponibles:
• AxesWidget
• Botón
• Botones de control
• Cursor
• ElipseSelector
• Lazo
• LassoSelector
• LockDraw
• MultiCursor
• Botones de radio
• RectangleSelector
• SpanSelector
• SubplotTool
• Manijas de herramientas
https://riptutorial.com/es/home 11
Esto puede ser útil cuando desea visualizar los datos entrantes en tiempo real. Estos datos
podrían, por ejemplo, provenir de un microcontrolador que muestrea continuamente una señal
analógica.
En este ejemplo, obtendremos nuestros datos de una canalización con nombre (también conocida
como fifo). Para este ejemplo, los datos en la tubería deben ser números separados por
caracteres de nueva línea, pero puede adaptarlos a su gusto.
Ejemplo de datos:
100
123.5
1589
Elegir el backend correcto es vital para el rendimiento. Compruebe qué componentes internos
funcionan en su sistema operativo y elija uno rápido. Para mí, solo qt4agg y el backend
predeterminado funcionaron, pero el predeterminado fue demasiado lento. Más información sobre
backends en matplotlib.
import matplotlib
import collections
#selecting the right backend, change qt4agg to your desired backend
matplotlib.use('qt4agg')
import matplotlib.pyplot as plt
import matplotlib.animation as animation
https://riptutorial.com/es/home 12
def update(data):
line.set_ydata(data)
return line,
def data_gen():
while True:
"""
We read two data points in at once, to improve speed
You can read more at once to increase speed
Or you can read just one at a time for improved animation smoothness
data from the pipe comes in as a string,
and is seperated with a newline character,
which is why we use respectively eval and rstrip.
"""
datalist.append(eval((datapipe.readline()).rstrip('\n')))
datalist.append(eval((datapipe.readline()).rstrip('\n')))
yield datalist
https://riptutorial.com/es/home 13
Capítulo 3: Cerrar una ventana de figura
Sintaxis
• plt.close () # cierra la figura activa actual
• plt.close (fig) # cierra la figura con el mango 'fig'
• plt.close (num) # cierra el número de cifra 'num'
• plt.close (nombre) # cierra la figura con la etiqueta 'nombre'
• plt.close ('all') # cierra todas las cifras
Examples
Cerrando la figura activa actual usando pyplot
La interfaz pyplot para matplotlib podría ser la forma más sencilla de cerrar una figura.
https://riptutorial.com/es/home 14
Capítulo 4: Colormaps
Examples
Uso básico
El uso de pcolormesh contourf integrados es tan simple como pasar el nombre del mapa de colores
requerido (como se indica en la referencia de pcolormesh contourf ) a la función de trazado (como
pcolormesh o contourf ) que lo espera, generalmente en la forma de un argumento de palabra clave
cmap :
plt.figure()
plt.pcolormesh(np.random.rand(20,20),cmap='hot')
plt.show()
https://riptutorial.com/es/home 15
Los mapas de colores son especialmente útiles para visualizar datos tridimensionales en gráficos
bidimensionales, pero un buen mapa de colores también puede hacer que un gráfico
tridimensional adecuado sea mucho más claro:
https://riptutorial.com/es/home 16
for ax in {ax1, ax2}:
ax.set_xlabel(r'$x$')
ax.set_ylabel(r'$y$')
ax.set_xlim([-1,1])
ax.set_ylim([-1,1])
ax.set_aspect('equal')
ax1.set_zlim([-1,1])
ax1.set_zlabel(r'$\cos(\pi x) \sin(\p i y)$')
plt.show()
Además de los mapas de '_r' incorporados definidos en la referencia de mapas de colores (y sus
mapas invertidos, con '_r' anexada a su nombre), también se pueden definir mapas de '_r'
personalizados. La clave es el módulo matplotlib.cm .
El siguiente ejemplo define un mapa de cm.register_cmap muy simple que utiliza cm.register_cmap ,
que contiene un solo color, con la opacidad (valor alfa) del color que se interpola entre totalmente
https://riptutorial.com/es/home 17
opaco y completamente transparente en el rango de datos. Tenga en cuenta que las líneas
importantes desde el punto de vista del mapa de colores son la importación de cm , la llamada a
register_cmap y el paso del mapa de plot_surface a plot_surface .
'green': [(0.,0.6,0.6),
(1.,0.6,0.6)],
'blue': [(0.,0.4,0.4),
(1.,0.4,0.4)],
'alpha': [(0.,1,1),
(1.,0,0)]})
# plot sphere with custom colormap; constrain mapping to between |z|=0.7 for enhanced effect
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x,y,z,cmap='alpha_gradient',vmin=-
0.7,vmax=0.7,rstride=1,cstride=1,linewidth=0.5,edgecolor='b')
ax.set_xlim([-1,1])
ax.set_ylim([-1,1])
ax.set_zlim([-1,1])
ax.set_aspect('equal')
plt.show()
https://riptutorial.com/es/home 18
En escenarios más complicados, uno puede definir una lista de valores R / G / B (/ A) en los que
matplotlib interpola linealmente para determinar los colores utilizados en los gráficos
correspondientes.
Se han introducido mapas de colores uniformes para que la visualización de los datos sea lo más
precisa y accesible posible. Matplotlib introdujo cuatro nuevos mapas de color perceptualmente
uniformes en la versión 1.5, con uno de ellos (llamado viridis ) como predeterminado de la
versión 2.0. Estos cuatro mapas de color ( viridis , inferno , plasma y magma ) son óptimos desde el
https://riptutorial.com/es/home 19
punto de vista de la percepción, y deben usarse para la visualización de datos por defecto, a
menos que existan buenas razones para no hacerlo. Estos mapas de colores introducen el menor
sesgo posible (al no crear funciones donde no hay ninguna para empezar), y son adecuados para
una audiencia con una percepción de color reducida.
Como ejemplo para distorsionar visualmente los datos, considere las siguientes dos gráficas de
vista superior de objetos similares a pirámides:
¿Cuál de los dos es una pirámide adecuada? La respuesta es, por supuesto, que ambos lo son,
pero esto dista mucho de ser obvio de la trama utilizando el mapa de colores de jet :
https://riptutorial.com/es/home 20
Esta característica está en el núcleo de la uniformidad perceptiva.
Si tiene rangos predefinidos y desea usar colores específicos para esos rangos, puede declarar
un mapa de colores personalizado. Por ejemplo:
x = np.linspace(-2,2,500)
y = np.linspace(-2,2,500)
XX, YY = np.meshgrid(x, y)
Z = np.sin(XX) * np.cos(YY)
https://riptutorial.com/es/home 21
plt.pcolormesh(x,y,Z, cmap=cmap, norm=norm)
plt.colorbar()
plt.show()
Produce
El color i se utilizará para los valores entre el límite i y i + 1 . Los colores se pueden especificar
por nombres ( 'red' , 'green' ), códigos HTML ( '#ffaa44' , '#441188' ) o tuplas RGB ( (0.2, 0.9,
0.45) ).
https://riptutorial.com/es/home 22
Capítulo 5: Figuras y objetos de ejes
Examples
Creando una figura
La figura contiene todos los elementos de la trama. La forma principal de crear una figura en
matplotlib es usar pyplot .
Opcionalmente, puede proporcionar un número, que puede usar para acceder a una figura creada
anteriormente. Si no se proporciona un número, la ID de la última figura creada se incrementará y
se usará en su lugar; Las cifras se indexan a partir de 1, no 0.
En lugar de un número, las cifras también se pueden identificar por una cadena. Si utiliza un
backend interactivo, esto también establecerá el título de la ventana.
plt.figure(fig.number) # or
plt.figure(1)
Hay dos formas principales de crear un eje en matplotlib: usar pyplot, o usar la API orientada a
objetos.
Usando pyplot:
fig = plt.figure()
https://riptutorial.com/es/home 23
ax = fig.add_subplot(3, 2, 1)
La función de conveniencia plt.subplots() se puede usar para producir una figura y una colección
de subparcelas en un comando:
https://riptutorial.com/es/home 24
Capítulo 6: Gráficas de caja
Examples
Cuadros de caja básicos
Los diagramas de caja son diagramas descriptivos que ayudan a comparar la distribución de
diferentes series de datos. Son descriptivos porque muestran medidas (por ejemplo, la mediana )
que no asumen una distribución de probabilidad subyacente.
dataline1 = [43,76,34,63,56,82,87,55,64,87,95,23,14,65,67,25,23,85]
dataline2 = [34,45,34,23,43,76,26,18,24,74,23,56,23,23,34,56,32,23]
data = [ dataline1, dataline2 ]
plt.boxplot( data )
Sin embargo, es una práctica común utilizar matrices numpy como parámetros para los gráficos, ya
que a menudo son el resultado de cálculos anteriores. Esto puede hacerse de la siguiente
manera:
import numpy as np
import matplotlib as plt
np.random.seed(123)
dataline1 = np.random.normal( loc=50, scale=20, size=18 )
dataline2 = np.random.normal( loc=30, scale=10, size=18 )
data = np.stack( [ dataline1, dataline2 ], axis=1 )
https://riptutorial.com/es/home 25
plt.boxplot( data )
https://riptutorial.com/es/home 26
Capítulo 7: Gráficas de caja
Examples
Función boxplot
Matplotlib tiene su propia implementación de boxplot . Los aspectos relevantes de esta función es
que, de forma predeterminada, el diagrama de caja muestra la mediana (percentil 50%) con una
línea roja. La caja representa Q1 y Q3 (percentiles 25 y 75), y los bigotes dan una idea del rango
de los datos (posiblemente en Q1 - 1.5 IQR; Q3 + 1.5 IQR; siendo IQR el rango intercuartil, pero
esto carece de confirmación). También tenga en cuenta que las muestras que se encuentran más
allá de este rango se muestran como marcadores (se denominan volantes).
NOTA: No todas las implementaciones de boxplot siguen las mismas reglas. Quizás el
diagrama de caja de caja más común utiliza los bigotes para representar el mínimo y
el máximo (haciendo que los volantes no existan). Observe también que esta trama es
a veces llamado diagrama de cajas y bigotes y el diagrama de caja y bigotes.
La siguiente receta muestra algunas de las cosas que puede hacer con la implementación
matplotlib actual de boxplot:
X1 = np.random.normal(0, 1, 500)
X2 = np.random.normal(0.3, 1, 500)
https://riptutorial.com/es/home 27
Este resultado en las siguientes parcelas:
https://riptutorial.com/es/home 28
2. Cambiando algunas características del diagrama de caja usando argumentos de función
https://riptutorial.com/es/home 29
3. Cuadro de caja múltiple en la misma ventana de gráfico
https://riptutorial.com/es/home 30
4. Ocultando algunas características del boxplot.
https://riptutorial.com/es/home 31
5. Personalización avanzada de un boxplot usando accesorios
... referirse principalmente (si no todos) a los objetos de Line2D . Esto significa que solo los
argumentos disponibles en esa clase son modificables. Notará la existencia de palabras clave
como whiskerprops , boxprops , flierprops y capprops . Estos son los elementos que necesita para
proporcionar un diccionario de accesorios para personalizarlo aún más.
NOTA: una mayor personalización del diagrama de caja con esta implementación
puede resultar difícil. En algunos casos, el uso de otros elementos de matplotlib como
https://riptutorial.com/es/home 32
parches para crear los propios gráficos de caja puede ser ventajoso (cambios
considerables en el elemento de caja, por ejemplo).
https://riptutorial.com/es/home 33
Capítulo 8: Histograma
Examples
Histograma simple
plt.hist(data)
plt.show()
https://riptutorial.com/es/home 34
Capítulo 9: Integración con TeX / LaTeX
Observaciones
• El soporte de LaTeX de Matplotlib requiere una instalación de LaTeX que funcione, dvipng
(que puede incluirse con su instalación de LaTeX) y Ghostscript (se recomienda GPL
Ghostscript 8.60 o posterior).
• El soporte pgf de Matplotlib requiere una instalación reciente de LaTeX que incluya los
paquetes TikZ / PGF (como TeXLive), preferiblemente con XeLaTeX o LuaLaTeX instalado.
Examples
Insertando fórmulas TeX en parcelas
TeX utiliza la barra invertida \ para comandos y símbolos, que puede entrar en conflicto con
caracteres especiales en las cadenas de Python. Para utilizar barras diagonales literales en una
cadena de Python, deben ser evadidas o incorporadas en una cadena en bruto:
plt.xlabel('\\alpha')
plt.xlabel(r'\alpha')
La siguiente parcela
https://riptutorial.com/es/home 35
puede ser producido por el codigo
https://riptutorial.com/es/home 36
Tenga en cuenta, sin embargo, la advertencia en el archivo matplotlibrc de ejemplo :
Para incluir las parcelas creadas con matplotlib en documentos TeX, deben guardarse como
archivos pdf o eps . De esta manera, cualquier texto en la trama (incluidas las fórmulas TeX) se
representa como texto en el documento final.
Los diagramas en matplotlib se pueden exportar a código TeX utilizando el paquete de macros
pgf para mostrar gráficos.
https://riptutorial.com/es/home 37
\usepackage{pgf}
\input{my_pgf_plot.pgf}
https://riptutorial.com/es/home 38
Capítulo 10: Leyendas
Examples
Leyenda simple
Suponga que tiene varias líneas en la misma trama, cada una de un color diferente, y desea
hacer una leyenda para decir qué representa cada línea. Puede hacer esto pasando una etiqueta
a cada una de las líneas cuando llame a plot() , por ejemplo, la siguiente línea se etiquetará
como "Mi línea 1" .
Esto especifica el texto que aparecerá en la leyenda para esa línea. Ahora para hacer visible la
leyenda real, podemos llamar ax.legend()
Por defecto, creará una leyenda dentro de un cuadro en la esquina superior derecha de la
parcela. Puede pasar argumentos a legend() para personalizarlo. Por ejemplo, podemos colocarlo
en la esquina inferior derecha, sin un cuadro de marco que lo rodea, y crear un título para la
leyenda llamando a lo siguiente:
https://riptutorial.com/es/home 39
import matplotlib.pyplot as plt
# The data
x = [1, 2, 3]
y1 = [2, 15, 27]
y2 = [10, 40, 45]
y3 = [5, 25, 40]
# Draw all the lines in the same plot, assigning a label for each one to be
# shown in the legend
ax.plot(x, y1, color="red", label="My Line 1")
ax.plot(x, y2, color="green", label="My Line 2")
ax.plot(x, y3, color="blue", label="My Line 3")
# Add a legend with title, position it on the lower right (loc) with no box framing (frameon)
ax.legend(loc="lower right", title="Legend Title", frameon=False)
https://riptutorial.com/es/home 40
# Show the plot
plt.show()
# The data
x = [1, 2, 3]
y1 = [1, 2, 4]
y2 = [2, 4, 8]
y3 = [3, 5, 14]
https://riptutorial.com/es/home 41
# Create the lines, assigning different colors for each one.
# Also store the created line objects
l1 = ax.plot(x, y1, color="red")[0]
l2 = ax.plot(x, y2, color="green")[0]
l3 = ax.plot(x, y3, color="blue")[0]
# Adjust the scaling factor to fit your legend text completely outside the plot
# (smaller value results in more space being made for the legend)
plt.subplots_adjust(right=0.85)
plt.show()
https://riptutorial.com/es/home 42
https://riptutorial.com/es/home 43
lugar de crear una leyenda en el nivel de los ejes (lo que creará una leyenda independiente para
cada subparcela). Esto se logra llamando a fig.legend() como se puede ver en el código para el
siguiente código.
# The data
x = [1, 2, 3]
y1 = [1, 2, 3]
y2 = [3, 1, 3]
y3 = [1, 3, 1]
y4 = [2, 2, 3]
# Adjust the scaling factor to fit your legend text completely outside the plot
# (smaller value results in more space being made for the legend)
plt.subplots_adjust(right=0.85)
plt.show()
Cuando se llama a plot() , devuelve una lista de objetos line2D . En este caso, solo devuelve una
lista con un solo objeto line2D , que se extrae con la indexación [0] y se almacena en l1 .
Una lista de todos los objetos de line2D que nos interesa incluir en la leyenda debe pasarse como
primer argumento a fig.legend() . El segundo argumento de fig.legend() también es necesario.
Se supone que es una lista de cadenas para usar como etiquetas para cada línea en la leyenda.
Los otros argumentos pasados a fig.legend() son puramente opcionales, y solo ayudan a afinar
la estética de la leyenda.
https://riptutorial.com/es/home 44
dibujará una nueva. Según la documentación oficial :
Esto se ha hecho para que sea posible llamar a legend () repetidamente para
actualizar la leyenda a los últimos manejadores de los ejes.
Sin embargo, no se preocupe: todavía es bastante simple agregar una segunda leyenda (o la
tercera, o la cuarta ...) a los ejes. En el ejemplo aquí, trazamos dos líneas, luego trazamos
marcadores en sus máximos y mínimos respectivos. Una leyenda es para las líneas y la otra para
los marcadores.
https://riptutorial.com/es/home 45
La clave es asegurarse de que tiene referencias a los objetos de leyenda. El primero que leg1 (
leg1 ) se elimina de la figura cuando agregas el segundo, pero el objeto leg1 todavía existe y se
puede volver a ax.add_artist con ax.add_artist .
Lo realmente genial es que aún puedes manipular ambas leyendas. Por ejemplo, agregue lo
siguiente al final del código anterior:
leg1.get_lines()[0].set_lw(8)
leg2.get_texts()[1].set_color('b')
Finalmente, vale la pena mencionar que en el ejemplo solo las líneas recibieron etiquetas cuando
https://riptutorial.com/es/home 46
se trazaron, lo que significa que ax.legend() agrega solo esas líneas al leg1 . La leyenda para los
marcadores ( leg2 ), por lo tanto, requería las líneas y etiquetas como argumentos cuando se leg2
instancias. Podríamos, alternativamente, haber dado etiquetas a los marcadores cuando se
trazaron también. Pero entonces ambas llamadas a ax.legend habrían requerido algunos
argumentos adicionales para que cada leyenda contuviera solo los elementos que queríamos.
https://riptutorial.com/es/home 47
Capítulo 11: Líneas de cuadrícula y marcas
de garrapatas
Examples
Parcela Con Gridlines
# The Data
x = [1, 2, 3, 4]
y = [234, 124,368, 343]
https://riptutorial.com/es/home 48
# Create the figure and axes objects
fig, ax = plt.subplots(1, figsize=(8, 6))
fig.suptitle('Example Of Plot With Grid Lines')
plt.show()
https://riptutorial.com/es/home 49
# The Data
x = [1, 2, 3, 4]
y = [234, 124,368, 343]
# Show the minor grid lines with very faint and almost transparent grey lines
plt.minorticks_on()
plt.grid(b=True, which='minor', color='#999999', linestyle='-', alpha=0.2)
plt.show()
https://riptutorial.com/es/home 50
Capítulo 12: LogLog Graphing
Introducción
La gráfica LogLog es una posibilidad para ilustrar una función exponencial de una manera lineal.
Examples
LogLog graficando
Sea y (x) = A * x ^ a, por ejemplo A = 30 y a = 3.5. Si se toma el logaritmo natural (ln) de ambos
lados (usando las reglas comunes para logaritmos): ln (y) = ln (A * x ^ a) = ln (A) + ln (x ^ a) = ln
(A) + a * ln (x). Por lo tanto, una gráfica con ejes logarítmicos tanto para x como para y será una
curva lineal. La pendiente de esta curva es el exponente a de y (x), mientras que el intercepto y y
(0) es el logaritmo natural de A, ln (A) = ln (30) = 3.401.
El siguiente ejemplo ilustra la relación entre una función exponencial y el gráfico de loglog lineal
(la función es y = A * x ^ a con A = 30 y a = 3.5):
import numpy as np
import matplotlib.pyplot as plt
A = 30
a = 3.5
x = np.linspace(0.01, 5, 10000)
y = A * x**a
ax = plt.gca()
plt.plot(x, y, linewidth=2.5, color='navy', label=r'$f(x) = 30 \cdot x^{3.5}$')
plt.legend(loc='upper left')
plt.xlabel(r'x')
plt.ylabel(r'y')
ax.grid(True)
plt.title(r'Normal plot')
plt.show()
plt.clf()
xlog = np.log(x)
ylog = np.log(y)
ax = plt.gca()
plt.plot(xlog, ylog, linewidth=2.5, color='navy', label=r'$f(x) = 3.5\cdot x + \ln(30)$')
plt.legend(loc='best')
plt.xlabel(r'log(x)')
plt.ylabel(r'log(y)')
ax.grid(True)
plt.title(r'Log-Log plot')
plt.show()
plt.clf()
https://riptutorial.com/es/home 51
https://riptutorial.com/es/home 52
Lea LogLog Graphing en línea: https://riptutorial.com/es/matplotlib/topic/10145/loglog-graphing
https://riptutorial.com/es/home 53
Capítulo 13: Manipulación de imagen
Examples
Abriendo imagenes
Las imágenes se leen desde un archivo ( .png solamente) con la función imread :
img = mpimg.imread('my_image.png')
plt.imshow(img)
La trama resultante es
https://riptutorial.com/es/home 54
Lea Manipulación de imagen en línea:
https://riptutorial.com/es/matplotlib/topic/4575/manipulacion-de-imagen
https://riptutorial.com/es/home 55
Capítulo 14: Mapas de contorno
Examples
Trazado de contorno rellenado simple
Resultado:
https://riptutorial.com/es/home 56
Trazado de contorno simple
Resultado:
https://riptutorial.com/es/home 57
Capítulo 15: Parcelas básicas
Examples
Gráfico de dispersión
# Data
x = [43,76,34,63,56,82,87,55,64,87,95,23,14,65,67,25,23,85]
y = [34,45,34,23,43,76,26,18,24,74,23,56,23,23,34,56,32,23]
https://riptutorial.com/es/home 58
# Create the Scatter Plot
ax.scatter(x, y,
color="blue", # Color of the dots
s=100, # Size of the dots
alpha=0.5, # Alpha/transparency of the dots (1 is opaque, 0 is transparent)
linewidths=1) # Size of edge around the dots
# Data
x = [21, 34, 44, 23]
y = [435, 334, 656, 1999]
labels = ["alice", "bob", "charlie", "diane"]
https://riptutorial.com/es/home 59
fig, ax = plt.subplots(1, figsize=(10, 6))
fig.suptitle('Example Of Labelled Scatterpoints')
Parcelas Sombreadas
https://riptutorial.com/es/home 60
import matplotlib.pyplot as plt
# Data
x = [0,1,2,3,4,5,6,7,8,9]
y1 = [10,20,40,55,58,55,50,40,20,10]
https://riptutorial.com/es/home 61
import matplotlib.pyplot as plt
# Data
x = [0,1,2,3,4,5,6,7,8,9]
y1 = [10,20,40,55,58,55,50,40,20,10]
y2 = [20,30,50,77,82,77,75,68,65,60]
Líneas de parcelas
https://riptutorial.com/es/home 62
import matplotlib.pyplot as plt
# Data
x = [14,23,23,25,34,43,55,56,63,64,65,67,76,82,85,87,87,95]
y = [34,45,34,23,43,76,26,18,24,74,23,56,23,23,34,56,32,23]
Tenga en cuenta que, en general, y no es una función de x y que los valores en x no necesitan
ordenarse. Así es como se ve una gráfica de líneas con valores x sin clasificar:
https://riptutorial.com/es/home 63
Diagrama de datos
Esto es similar a un diagrama de dispersión , pero usa la función plot() lugar. La única diferencia
en el código aquí es el argumento de estilo.
plt.plot(x, y, 'b^')
# Create blue up-facing triangles
https://riptutorial.com/es/home 64
Datos y linea
El argumento de estilo puede tomar símbolos para ambos marcadores y estilo de línea:
plt.plot(x, y, 'go--')
# green circles and dashed line
https://riptutorial.com/es/home 65
Mapa de calor
Los mapas de calor son útiles para visualizar funciones escalares de dos variables. Proporcionan
una imagen “plana” de histogramas bidimensionales (que representan, por ejemplo, la densidad
de un área determinada).
El siguiente código fuente ilustra mapas de calor utilizando números bivariados normalmente
distribuidos centrados en 0 en ambas direcciones (medios [0.0, 0.0] ) y con una matriz de
covarianza dada. Los datos se generan utilizando la función numpy
numpy.random.multivariate_normal ; A continuación, se alimenta a la hist2d función de pyplot
matplotlib.pyplot.hist2d .
https://riptutorial.com/es/home 66
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
https://riptutorial.com/es/home 67
# Plot a colorbar with label.
cb = plt.colorbar()
cb.set_label('Number of entries')
Aquí se muestran los mismos datos que en un histograma 3D (aquí usamos solo 20 contenedores
para la eficiencia). El código se basa en esta demo matplotlib .
https://riptutorial.com/es/home 68
N_numbers = 100000
N_bins = 20
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
hist, xedges, yedges = np.histogram2d(x, y, bins=N_bins)
https://riptutorial.com/es/home 69
Capítulo 16: Parcelas Múltiples
Sintaxis
• Elemento de lista
Examples
Rejilla de subparcelas usando subparcela
"""
================================================================================
CREATE A 2 BY 2 GRID OF SUB-PLOTS WITHIN THE SAME FIGURE.
================================================================================
"""
import matplotlib.pyplot as plt
https://riptutorial.com/es/home 70
# The data
x = [1,2,3,4,5]
y1 = [0.59705847, 0.25786401, 0.63213726, 0.63287317, 0.73791151]
y2 = [1.19411694, 0.51572803, 1.26427451, 1.26574635, 1.47582302]
y3 = [0.86793828, 0.07563408, 0.67670068, 0.78932712, 0.0043694]
# 5 more random values
y4 = [0.43396914, 0.03781704, 0.33835034, 0.39466356, 0.0021847]
# Initialise the figure and a subplot axes. Each subplot sharing (showing) the
# same range of values for the x and y axis in the plots.
fig, axes = plt.subplots(2, 2, figsize=(8, 6), sharex=True, sharey=True)
plt.show()
https://riptutorial.com/es/home 71
"""
================================================================================
DRAW MULTIPLE LINES IN THE SAME PLOT
================================================================================
"""
import matplotlib.pyplot as plt
# The data
x = [1, 2, 3, 4, 5]
y1 = [2, 15, 27, 35, 40]
y2 = [10, 40, 45, 47, 50]
y3 = [5, 25, 40, 45, 47]
# Draw all the lines in the same plot, assigning a label for each one to be
# shown in the legend.
ax.plot(x, y1, color="red", label="My Line 1")
ax.plot(x, y2, color="green", label="My Line 2")
https://riptutorial.com/es/home 72
ax.plot(x, y3, color="blue", label="My Line 3")
plt.show()
El paquete gridspec permite un mayor control sobre la ubicación de las subparcelas. Facilita el
control de los márgenes de las parcelas y el espaciado entre las subparcelas individuales.
Además, permite ejes de diferentes tamaños en la misma figura al definir ejes que ocupan varias
ubicaciones de cuadrícula.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec
fig = plt.figure(0)
fig.clf()
https://riptutorial.com/es/home 73
Un gráfico de 2 funciones en el eje x compartido.
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(111)
https://riptutorial.com/es/home 74
# create line plot of y2(x)
line2, = ax2.plot(x, y2, 'r', label="Function y2")
ax2.set_ylabel('y2', color='r')
plt.show()
https://riptutorial.com/es/home 75
https://riptutorial.com/es/home 76
import matplotlib
matplotlib.use("TKAgg")
https://riptutorial.com/es/home 77
# module to allow user to select csv file
from tkinter.filedialog import askopenfilename
#==============================================================================
# User chosen Data for plots
#==============================================================================
#==============================================================================
# Plots on two different Figures and sets the size of the figures
#==============================================================================
#------------------------------------------------------------------------------
# Figure 1 with 6 plots
#------------------------------------------------------------------------------
# plot one
# Plot column labeled TIME from csv file and color it red
# subplot(2 Rows, 3 Columns, First subplot,)
ax1 = f1.add_subplot(2,3,1)
ax1.plot(data[["TIME"]], label = 'Curve 1', color = "r", marker = '^', markevery = 10)
# added line marker triangle
# plot two
# plot column labeled TIME from csv file and color it green
# subplot(2 Rows, 3 Columns, Second subplot)
ax2 = f1.add_subplot(2,3,2)
ax2.plot(data[["TIME"]], label = 'Curve 2', color = "g", marker = '*', markevery = 10)
# added line marker star
# plot three
# plot column labeled TIME from csv file and color it blue
# subplot(2 Rows, 3 Columns, Third subplot)
ax3 = f1.add_subplot(2,3,3)
ax3.plot(data[["TIME"]], label = 'Curve 3', color = "b", marker = 'D', markevery = 10)
# added line marker diamond
# plot four
# plot column labeled TIME from csv file and color it purple
# subplot(2 Rows, 3 Columns, Fourth subplot)
ax4 = f1.add_subplot(2,3,4)
ax4.plot(data[["TIME"]], label = 'Curve 4', color = "#800080")
https://riptutorial.com/es/home 78
# plot five
# plot column labeled TIME from csv file and color it cyan
# subplot(2 Rows, 3 Columns, Fifth subplot)
ax5 = f1.add_subplot(2,3,5)
ax5.plot(data[["TIME"]], label = 'Curve 5', color = "c")
# plot six
# plot column labeled TIME from csv file and color it black
# subplot(2 Rows, 3 Columns, Sixth subplot)
ax6 = f1.add_subplot(2,3,6)
ax6.plot(data[["TIME"]], label = 'Curve 6', color = "k")
#------------------------------------------------------------------------------
# Figure 2 with 6 plots
#------------------------------------------------------------------------------
# plot one
# Curve 1: plot column labeled Acceleration from csv file and color it red
# Curve 2: plot column labeled TIME from csv file and color it green
# subplot(2 Rows, 3 Columns, First subplot)
ax10 = f2.add_subplot(2,3,1)
ax10.plot(data[["Acceleration"]], label = 'Curve 1', color = "r")
ax10.plot(data[["TIME"]], label = 'Curve 7', color="g", linestyle ='--')
# dashed line
# plot two
# Curve 1: plot column labeled Acceleration from csv file and color it green
# Curve 2: plot column labeled TIME from csv file and color it black
# subplot(2 Rows, 3 Columns, Second subplot)
ax20 = f2.add_subplot(2,3,2)
ax20.plot(data[["Acceleration"]], label = 'Curve 2', color = "g")
ax20.plot(data[["TIME"]], label = 'Curve 8', color = "k", linestyle ='-')
# solid line (default)
# plot three
# Curve 1: plot column labeled Acceleration from csv file and color it blue
# Curve 2: plot column labeled TIME from csv file and color it purple
# subplot(2 Rows, 3 Columns, Third subplot)
ax30 = f2.add_subplot(2,3,3)
ax30.plot(data[["Acceleration"]], label = 'Curve 3', color = "b")
ax30.plot(data[["TIME"]], label = 'Curve 9', color = "#800080", linestyle ='-.')
# dash_dot line
# plot four
# Curve 1: plot column labeled Acceleration from csv file and color it purple
# Curve 2: plot column labeled TIME from csv file and color it red
# subplot(2 Rows, 3 Columns, Fourth subplot)
ax40 = f2.add_subplot(2,3,4)
ax40.plot(data[["Acceleration"]], label = 'Curve 4', color = "#800080")
ax40.plot(data[["TIME"]], label = 'Curve 10', color = "r", linestyle =':')
# dotted line
# plot five
# Curve 1: plot column labeled Acceleration from csv file and color it cyan
# Curve 2: plot column labeled TIME from csv file and color it blue
# subplot(2 Rows, 3 Columns, Fifth subplot)
https://riptutorial.com/es/home 79
ax50 = f2.add_subplot(2,3,5)
ax50.plot(data[["Acceleration"]], label = 'Curve 5', color = "c")
ax50.plot(data[["TIME"]], label = 'Curve 11', color = "b", marker = 'o', markevery = 10)
# added line marker circle
# plot six
# Curve 1: plot column labeled Acceleration from csv file and color it black
# Curve 2: plot column labeled TIME from csv file and color it cyan
# subplot(2 Rows, 3 Columns, Sixth subplot)
ax60 = f2.add_subplot(2,3,6)
ax60.plot(data[["Acceleration"]], label = 'Curve 6', color = "k")
ax60.plot(data[["TIME"]], label = 'Curve 12', color = "c", marker = 's', markevery = 10)
# added line marker square
#==============================================================================
# Figure Plot options
#==============================================================================
#------------------------------------------------------------------------------
# Figure 1 options
#------------------------------------------------------------------------------
https://riptutorial.com/es/home 80
ax4.set_ylim([0,20])
#------------------------------------------------------------------------------
# Figure 2 options
#------------------------------------------------------------------------------
https://riptutorial.com/es/home 81
ax40.set_ylim([-20,20])
#==============================================================================
# User chosen file location Save PDF
#==============================================================================
pdf.close()
#==============================================================================
# Show plot
#==============================================================================
# manually set the subplot spacing when there are multiple plots
#plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace =None, hspace=None )
plt.show()
https://riptutorial.com/es/home 82
Capítulo 17: Parcelas tridimensionales
Observaciones
El trazado tridimensional en matplotlib ha sido históricamente un poco kludge, ya que el motor de
renderizado es inherentemente 2D. El hecho de que las configuraciones 3d se representen
trazando una porción 2d después de la otra implica que a menudo hay problemas relacionados
con la profundidad aparente de los objetos. El núcleo del problema es que dos objetos no
conectados pueden estar completamente detrás o completamente uno frente al otro, lo que lleva
a artefactos como se muestra en la siguiente figura de dos anillos entrelazados (haga clic para ver
un gif animado):
Sin embargo, esto puede ser arreglado. Este artefacto solo existe cuando se trazan múltiples
superficies en el mismo trazado, ya que cada una se representa como una forma plana 2D, con
un solo parámetro que determina la distancia de la vista. Notará que una sola superficie
complicada no sufre el mismo problema.
https://riptutorial.com/es/home 83
La forma de remediar esto es unir los objetos de la parcela utilizando puentes transparentes:
fig = plt.figure()
ax = fig.gca(projection='3d')
X = np.arange(0, 6, 0.25)
Y = np.arange(0, 6, 0.25)
X, Y = np.meshgrid(X, Y)
Z1 = np.empty_like(X)
Z2 = np.empty_like(X)
C1 = np.empty_like(X, dtype=object)
C2 = np.empty_like(X, dtype=object)
for i in range(len(X)):
for j in range(len(X[0])):
z1 = 0.5*(erf((X[i,j]+Y[i,j]-4.5)*0.5)+1)
z2 = 0.5*(erf((-X[i,j]-Y[i,j]+4.5)*0.5)+1)
Z1[i,j] = z1
Z2[i,j] = z2
# Join the two surfaces flipping one of them (using also the bridge)
X_full = np.vstack([X, X_bridge, np.flipud(X)])
Y_full = np.vstack([Y, Y_bridge, np.flipud(Y)])
Z_full = np.vstack([Z1, Z_bridge, np.flipud(Z2)])
color_full = np.vstack([C1, color_bridge, np.flipud(C2)])
plt.show()
https://riptutorial.com/es/home 84
https://riptutorial.com/es/home 85
Examples
Creando ejes tridimensionales.
Los ejes de matplotlib son bidimensionales por defecto. Con el fin de crear gráficos de tres
dimensiones, tenemos que importar el Axes3D clase de la caja de herramientas mplot3d , que
permitirá a un nuevo tipo de proyección para una ejes, a saber '3d' :
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
Además de las generalizaciones sencillas de las gráficas bidimensionales (como las gráficas
lineales , las gráficas de dispersión , las gráficas de barras , las gráficas de contorno ), hay varios
métodos de trazado de superficie disponibles, por ejemplo, ax.plot_surface :
https://riptutorial.com/es/home 86
# generate example data
import numpy as np
x,y = np.meshgrid(np.linspace(-1,1,15),np.linspace(-1,1,15))
z = np.cos(x*np.pi)*np.sin(y*np.pi)
https://riptutorial.com/es/home 87
Capítulo 18: Sistemas de coordenadas
Observaciones
Matplotlib tiene cuatro sistemas de coordenadas distintos que pueden aprovecharse para facilitar
el posicionamiento de diferentes objetos, por ejemplo, texto. Cada sistema tiene un objeto de
transformación correspondiente que transforma las coordenadas de ese sistema al llamado
sistema de coordenadas de visualización.
El sistema de coordenadas de datos es el sistema definido por los datos en los ejes
respectivos. Es útil cuando se intenta colocar algún objeto en relación con los datos trazados. El
rango viene dado por las propiedades xlim y ylim de Axes . Su objeto de transformación
correspondiente es ax.transData .
El sistema de coordenadas de ejes es el sistema vinculado a su objeto Axes . Los puntos (0, 0) y
(1, 1) definen las esquinas inferior izquierda y superior derecha de los ejes. Como tal, es útil
cuando se coloca en relación con los ejes, como el centro superior de la trama. Su objeto de
transformación correspondiente es ax.transAxes .
https://riptutorial.com/es/home 88
Más detalles están disponibles aquí .
Examples
Sistemas de coordenadas y texto.
Los sistemas de coordenadas de Matplotlib son muy útiles al tratar de anotar los gráficos que
realiza. A veces, le gustaría colocar el texto en relación con sus datos, como cuando intenta
etiquetar un punto específico. Otras veces tal vez le gustaría agregar un texto en la parte superior
de la figura. Esto se puede lograr fácilmente seleccionando un sistema de coordenadas apropiado
pasando un objeto de transform parámetro de transform en llamada a text() .
fig, ax = plt.subplots()
https://riptutorial.com/es/home 89
2., 3., 'important point', # x, y, text,
ha='center', va='bottom', # text alignment,
transform=ax.transData # coordinate system transformation
)
plt.text( # position text relative to Axes
1.0, 1.0, 'axes corner',
ha='right', va='top',
transform=ax.transAxes
)
plt.text( # position text relative to Figure
0.0, 1.0, 'figure corner',
ha='left', va='top',
transform=fig.transFigure
)
plt.text( # position text absolutely at specific pixel on image
200, 300, 'pixel (200, 300)',
ha='center', va='center',
transform=None
)
plt.show()
https://riptutorial.com/es/home 90
Lea Sistemas de coordenadas en línea: https://riptutorial.com/es/matplotlib/topic/4566/sistemas-
de-coordenadas
https://riptutorial.com/es/home 91
Creditos
S.
Capítulos Contributors
No
Animaciones y
2 FiN, smurfendrek123, user2314737
tramas interactivas.
Figuras y objetos de
5 David Zwicker, Josh, Serenity, tom
ejes
Líneas de cuadrícula
10 y marcas de ronrest
garrapatas
Manipulación de
12 Bosoneando
imagen
Parcelas
16 Andras Deak, Serenity, will
tridimensionales
https://riptutorial.com/es/home 92
Sistemas de
17 jure
coordenadas
https://riptutorial.com/es/home 93