Imagen de demostración #

Muchas formas de trazar imágenes en Matplotlib.

La forma más común de trazar imágenes en Matplotlib es con imshow. Los siguientes ejemplos demuestran gran parte de la funcionalidad de imshow y las muchas imágenes que puede crear.

import numpy as np
import matplotlib.cm as cm
import matplotlib.pyplot as plt
import matplotlib.cbook as cbook
from matplotlib.path import Path
from matplotlib.patches import PathPatch


# Fixing random state for reproducibility
np.random.seed(19680801)

Primero generaremos una distribución normal bivariada simple.

delta = 0.025
x = y = np.arange(-3.0, 3.0, delta)
X, Y = np.meshgrid(x, y)
Z1 = np.exp(-X**2 - Y**2)
Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2)
Z = (Z1 - Z2) * 2

fig, ax = plt.subplots()
im = ax.imshow(Z, interpolation='bilinear', cmap=cm.RdYlGn,
               origin='lower', extent=[-3, 3, -3, 3],
               vmax=abs(Z).max(), vmin=-abs(Z).max())

plt.show()
demostración de imagen

También es posible mostrar imágenes de fotografías.

# A sample image
with cbook.get_sample_data('grace_hopper.jpg') as image_file:
    image = plt.imread(image_file)

# And another image, using 256x256 16-bit integers.
w, h = 256, 256
with cbook.get_sample_data('s1045.ima.gz') as datafile:
    s = datafile.read()
A = np.frombuffer(s, np.uint16).astype(float).reshape((w, h))
extent = (0, 25, 0, 25)

fig, ax = plt.subplot_mosaic([
    ['hopper', 'mri']
], figsize=(7, 3.5))

ax['hopper'].imshow(image)
ax['hopper'].axis('off')  # clear x-axis and y-axis

im = ax['mri'].imshow(A, cmap=plt.cm.hot, origin='upper', extent=extent)

markers = [(15.9, 14.5), (16.8, 15)]
x, y = zip(*markers)
ax['mri'].plot(x, y, 'o')

ax['mri'].set_title('MRI')

plt.show()
resonancia magnética

Interpolando imágenes #

También es posible interpolar imágenes antes de mostrarlas. Tenga cuidado, ya que esto puede manipular la apariencia de sus datos, pero puede ser útil para lograr la apariencia que desea. A continuación, mostraremos la misma matriz (pequeña), interpolada con tres métodos de interpolación diferentes.

El centro del píxel en A[i, j] se traza en (i+0,5, i+0,5). Si usa interpolation='nearest', la región delimitada por (i, j) y (i+1, j+1) tendrá el mismo color. Si utiliza la interpolación, el centro del píxel tendrá el mismo color que el más cercano, pero se interpolarán otros píxeles entre los píxeles vecinos.

Para evitar efectos de borde al realizar la interpolación, Matplotlib rellena la matriz de entrada con píxeles idénticos alrededor del borde: si tiene una matriz de 5x5 con colores como se muestra a continuación:

a b c d e
f g h i j
k l m n o
p q r s t
u v w x y

Matplotlib calcula la interpolación y el cambio de tamaño en la matriz rellenada

a a b c d e e
a a b c d e e
f f g h i j j
k k l m n o o
p p q r s t t
o u v w x y y
o u v w x y y

y luego extrae la región central del resultado. (Las versiones extremadamente antiguas de Matplotlib (<0.63) no rellenaron la matriz, sino que ajustaron los límites de la vista para ocultar las áreas de borde afectadas).

Este enfoque permite trazar la extensión completa de una matriz sin efectos de borde y, por ejemplo, superponer varias imágenes de diferentes tamaños con diferentes métodos de interpolación; consulte Capa de imágenes . También implica un impacto en el rendimiento, ya que se debe crear esta nueva matriz acolchada temporal. La interpolación sofisticada también implica un impacto en el rendimiento; para un rendimiento máximo o imágenes muy grandes, se sugiere interpolation='nearest'.

A = np.random.rand(5, 5)

fig, axs = plt.subplots(1, 3, figsize=(10, 3))
for ax, interp in zip(axs, ['nearest', 'bilinear', 'bicubic']):
    ax.imshow(A, interpolation=interp)
    ax.set_title(interp.capitalize())
    ax.grid(True)

plt.show()
más cercano, bilineal, bicúbico

Puede especificar si las imágenes deben trazarse con el origen de la matriz x[0, 0] en la esquina superior izquierda o en la esquina inferior derecha utilizando el parámetro de origen. También puede controlar la configuración predeterminada image.origin en su archivo matplotlibrc . Para más información sobre este tema, consulte la guía completa sobre origen y extensión .

x = np.arange(120).reshape((10, 12))

interp = 'bilinear'
fig, axs = plt.subplots(nrows=2, sharex=True, figsize=(3, 5))
axs[0].set_title('blue should be up')
axs[0].imshow(x, origin='upper', interpolation=interp)

axs[1].set_title('blue should be down')
axs[1].imshow(x, origin='lower', interpolation=interp)
plt.show()
el azul debe estar arriba, el azul debe estar abajo

Finalmente, mostraremos una imagen usando una ruta de clip.

delta = 0.025
x = y = np.arange(-3.0, 3.0, delta)
X, Y = np.meshgrid(x, y)
Z1 = np.exp(-X**2 - Y**2)
Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2)
Z = (Z1 - Z2) * 2

path = Path([[0, 1], [1, 0], [0, -1], [-1, 0], [0, 1]])
patch = PathPatch(path, facecolor='none')

fig, ax = plt.subplots()
ax.add_patch(patch)

im = ax.imshow(Z, interpolation='bilinear', cmap=cm.gray,
               origin='lower', extent=[-3, 3, -3, 3],
               clip_path=patch, clip_on=True)
im.set_clip_path(patch)

plt.show()
demostración de imagen

Referencias

En este ejemplo se muestra el uso de las siguientes funciones, métodos, clases y módulos:

Tiempo total de ejecución del script: (0 minutos 2.555 segundos)

Galería generada por Sphinx-Gallery