Notiz
Klicken Sie hier , um den vollständigen Beispielcode herunterzuladen
Mischen Sie Transparenz mit Farbe in 2D-Bildern #
Mischen Sie Transparenz mit Farbe, um Teile von Daten mit imshow hervorzuheben.
Eine übliche Verwendung für matplotlib.pyplot.imshow
ist das Zeichnen einer statistischen 2D-Karte. Die Funktion macht es einfach, eine 2D-Matrix als Bild zu visualisieren und der Ausgabe Transparenz zu verleihen. Beispielsweise kann man eine Statistik (z. B. eine t-Statistik) darstellen und die Transparenz jedes Pixels gemäß seinem p-Wert einfärben. Dieses Beispiel zeigt, wie Sie diesen Effekt erzielen können.
Zuerst generieren wir einige Daten, in diesem Fall erstellen wir zwei 2D-„Blobs“ in einem 2D-Gitter. Ein Blob wird positiv und der andere negativ sein.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import Normalize
def normal_pdf(x, mean, var):
return np.exp(-(x - mean)**2 / (2*var))
# Generate the space in which the blobs will live
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)
# Generate the blobs. The range of the values is roughly -.0002 to .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))
# We'll also create a grey background into which the pixels will fade
greys = np.full((*weights.shape, 3), 70, dtype=np.uint8)
# First we'll plot these blobs using ``imshow`` without transparency.
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()
Transparenz einblenden #
Die einfachste Möglichkeit, beim Zeichnen von Daten mit Transparenz einzubeziehen,
matplotlib.pyplot.imshow
besteht darin, ein Array zu übergeben, das der Form der Daten entspricht, an das alpha
Argument. Zum Beispiel erstellen wir einen Farbverlauf, der sich unten von links nach rechts bewegt.
# Create an alpha channel of linearly increasing values moving to the right.
alphas = np.ones(weights.shape)
alphas[:, 30:] = np.linspace(1, 0, 70)
# Create the figure and image
# Note that the absolute values may be slightly different
fig, ax = plt.subplots()
ax.imshow(greys)
ax.imshow(weights, alpha=alphas, **imshow_kwargs)
ax.set_axis_off()
Verwenden von Transparenz zum Hervorheben von Werten mit hoher Amplitude #
Abschließend erstellen wir dasselbe Diagramm neu, aber dieses Mal verwenden wir Transparenz, um die Extremwerte in den Daten hervorzuheben. Dies wird häufig verwendet, um Datenpunkte mit kleineren p-Werten hervorzuheben. Wir fügen auch Konturlinien hinzu, um die Bildwerte hervorzuheben.
# Create an alpha channel based on weight values
# Any value whose absolute value is > .0001 will have zero transparency
alphas = Normalize(0, .3, clip=True)(np.abs(weights))
alphas = np.clip(alphas, .4, 1) # alpha value clipped at the bottom at .4
# Create the figure and image
# Note that the absolute values may be slightly different
fig, ax = plt.subplots()
ax.imshow(greys)
ax.imshow(weights, alpha=alphas, **imshow_kwargs)
# Add contour lines to further highlight different levels.
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()
Verweise
In diesem Beispiel wird die Verwendung der folgenden Funktionen, Methoden, Klassen und Module gezeigt: