Matplotlib-Bildvisualisierungstechniken

Beginner

This tutorial is from open-source community. Access the source code

Einführung

Matplotlib ist eine Diagrammbibliothek für die Programmiersprache Python und seine Erweiterung für numerische Mathematik, NumPy. Es bietet eine objektorientierte Schnittstelle zur Einbettung von Diagrammen in Anwendungen mit allgemeinen GUI-Toolkits wie Tkinter, wxPython, Qt oder GTK. In diesem Lab werden wir lernen, wie man verschiedene Arten von Bildern mit Matplotlib darstellt.

VM-Tipps

Nachdem der VM-Start abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu nutzen.

Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund von Einschränkungen in Jupyter Notebook nicht automatisiert werden.

Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.

Importiere erforderliche Bibliotheken

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

Plotte eine zweidimensionale Normalverteilung

## Generiere eine einfache zweidimensionale Normalverteilung
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

## Plotte die Verteilung
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()

Plotte Bilder von Bildern

## Lade ein Beispielbild
with cbook.get_sample_data('grace_hopper.jpg') as image_file:
    image = plt.imread(image_file)

## Lade ein weiteres Bild mit 256x256 16-Bit-Ganzzahlen.
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)

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

ax['hopper'].imshow(image)
ax['hopper'].axis('off')  ## Entferne die x-Achse und die y-Achse

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

Interpoliere Bilder

## Interpoliere das gleiche Array mit drei verschiedenen Interpolationsmethoden
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()

Steuere das Bild-Origin

## Bestimme, ob Bilder mit dem Array-Origin x[0, 0] in der oberen linken oder unteren rechten Ecke geplottet werden sollen
x = np.arange(120).reshape((10, 12))

interp = 'bilinear'
fig, axs = plt.subplots(nrows=2, sharex=True, figsize=(3, 5))
axs[0].set_title('blau sollte oben sein')
axs[0].imshow(x, origin='upper', interpolation=interp)

axs[1].set_title('blau sollte unten sein')
axs[1].imshow(x, origin='lower', interpolation=interp)
plt.show()

Zeige Bilder mit einem Clip-Pfad

## Zeige ein Bild mit einem Clip-Pfad
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()

Zusammenfassung

In diesem Lab haben wir gelernt, wie man verschiedene Arten von Bildern mit Matplotlib darstellt. Wir haben eine zweidimensionale Normalverteilung, Bilder von Bildern, interpoliert Bilder und Bilder mit einem Clip-Pfad geplottet. Wir haben auch gelernt, wie man das Bild-Origin steuert.