Introduction
Ce laboratoire vous montrera comment mélanger la transparence avec la couleur dans des images 2D à l'aide de Matplotlib. L'objectif est de souligner certaines parties des données avec imshow.
Conseils sur la machine virtuelle
Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Notebook pour accéder à Jupyter Notebook pour la pratique.
Parfois, vous devrez peut-être attendre quelques secondes pour que Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations de Jupyter Notebook.
Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session, et nous résoudrons rapidement le problème pour vous.
Générer des données
Nous commencerons par générer deux blobs 2D dans une grille 2D. Un blob sera positif et l'autre négatif.
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))
## Générer l'espace dans lequel les blobs seront situés
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)
## Générer les blobs. La plage des valeurs est approximativement de -.0002 à.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))
## Nous créerons également un fond gris dans lequel les pixels vont se fondre
greys = np.full((*weights.shape, 3), 70, dtype=np.uint8)
Tracer les blobs
Ensuite, nous allons tracer ces blobs à l'aide de imshow sans transparence.
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()
Incorporer la transparence
La manière la plus simple d'inclure la transparence lors de la tracé de données avec imshow est de passer un tableau correspondant à la forme des données à l'argument alpha.
## Créer une canal alpha avec des valeurs croissant linéairement vers la droite.
alphas = np.ones(weights.shape)
alphas[:, 30:] = np.linspace(1, 0, 70)
## Créer la figure et l'image
fig, ax = plt.subplots()
ax.imshow(greys)
ax.imshow(weights, alpha=alphas, **imshow_kwargs)
ax.set_axis_off()
plt.show()
Utiliser la transparence pour souligner les valeurs
Enfin, nous allons recréer le même tracé, mais cette fois-ci, nous utiliserons la transparence pour souligner les valeurs extrêmes dans les données. Cela est souvent utilisé pour souligner les points de données avec des p-valeurs plus petites. Nous ajouterons également des lignes de contour pour souligner les valeurs de l'image.
## Créer un canal alpha basé sur les valeurs de poids
alphas = Normalize(0,.3, clip=True)(np.abs(weights))
alphas = np.clip(alphas,.4, 1) ## valeur d'alpha limitée en bas à.4
## Créer la figure et l'image
fig, ax = plt.subplots()
ax.imshow(greys)
ax.imshow(weights, alpha=alphas, **imshow_kwargs)
## Ajouter des lignes de contour pour souligner davantage différents niveaux.
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()
Sommaire
Dans ce laboratoire, nous avons appris à mélanger la transparence avec la couleur dans des images 2D à l'aide de Matplotlib. Nous avons également appris à souligner certaines parties des données avec imshow.