Einführung
In diesem Lab werden Sie lernen, wie Sie in 2D-Bildern Transparenz mit Farbe mithilfe von Matplotlib kombinieren. Ziel ist es, bestimmte Teile von Daten mit imshow hervorzuheben.
Tipps für die VM
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 der Einschränkungen von Jupyter Notebook nicht automatisiert werden.
Wenn Sie während des Lernens Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.
Daten generieren
Wir beginnen mit der Erzeugung von zwei 2D-Blob's in einem 2D-Gitter. Ein Blob wird positiv und das andere negativ sein.
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import Normalize
def normal_pdf(x, mean, var):
return np.exp(-(x - mean)**2 / (2*var))
## Generiere den Raum, in dem die Blob's leben werden
xmin, xmax, ymin, ymax = (0, 100, 0, 100)
n_bins = 100
xx = np.linspace(xmin, xmax, n_bins)
yy = np.linspace(ymin, ymax, n_bins)
## Generiere die Blob's. Der Wertebereich liegt grob zwischen -.0002 und.0002
means_high = [20, 50]
means_low = [50, 60]
var = [150, 200]
gauss_x_high = normal_pdf(xx, means_high[0], var[0])
gauss_y_high = normal_pdf(yy, means_high[1], var[0])
gauss_x_low = normal_pdf(xx, means_low[0], var[1])
gauss_y_low = normal_pdf(yy, means_low[1], var[1])
weights = (np.outer(gauss_y_high, gauss_x_high)
- np.outer(gauss_y_low, gauss_x_low))
## Wir werden auch einen grauen Hintergrund erstellen, in den die Pixel abblenden
greys = np.full((*weights.shape, 3), 70, dtype=np.uint8)
Die Blob's plotten
Als nächstes werden wir diese Blob's mit imshow ohne Transparenz plotten.
vmax = np.abs(weights).max()
imshow_kwargs = {
'vmax': vmax,
'vmin': -vmax,
'cmap': 'RdYlBu',
'extent': (xmin, xmax, ymin, ymax),
}
fig, ax = plt.subplots()
ax.imshow(greys)
ax.imshow(weights, **imshow_kwargs)
ax.set_axis_off()
plt.show()
Transparenz hinzufügen
Der einfachste Weg, Transparenz bei der Darstellung von Daten mit imshow zu verwenden, ist es, ein Array mit der gleichen Form wie die Daten an das Argument alpha zu übergeben.
## Erstelle einen Alphakanal mit linear zunehmenden Werten, die nach rechts gehen.
alphas = np.ones(weights.shape)
alphas[:, 30:] = np.linspace(1, 0, 70)
## Erstelle die Figur und das Bild
fig, ax = plt.subplots()
ax.imshow(greys)
ax.imshow(weights, alpha=alphas, **imshow_kwargs)
ax.set_axis_off()
plt.show()
Verwenden von Transparenz, um Werte hervorzuheben
Schließlich werden wir das gleiche Diagramm neu erstellen, aber diesmal verwenden wir Transparenz, um die Extremwerte in den Daten hervorzuheben. Dies wird oft verwendet, um Datenpunkte mit kleineren p-Werten hervorzuheben. Wir werden auch Konturlinien hinzufügen, um die Bildwerte zu betonen.
## Erstelle einen Alphakanal basierend auf den Gewichts-Werten
alphas = Normalize(0,.3, clip=True)(np.abs(weights))
alphas = np.clip(alphas,.4, 1) ## alpha-Wert wird unten bei.4 abgeschnitten
## Erstelle die Figur und das Bild
fig, ax = plt.subplots()
ax.imshow(greys)
ax.imshow(weights, alpha=alphas, **imshow_kwargs)
## Füge Konturlinien hinzu, um verschiedene Ebenen weiter hervorzuheben.
ax.contour(weights[::-1], levels=[-.1,.1], colors='k', linestyles='-')
ax.set_axis_off()
plt.show()
ax.contour(weights[::-1], levels=[-.0001,.0001], colors='k', linestyles='-')
ax.set_axis_off()
plt.show()
Zusammenfassung
In diesem Lab haben wir gelernt, wie man in 2D-Bildern Transparenz mit Farbe mithilfe von Matplotlib kombinieren kann. Wir haben auch gelernt, wie man bestimmte Teile von Daten mit imshow hervorheben kann.