Matplotlib-Bildtransparenz

Beginner

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

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.