Noter
Cliquez ici pour télécharger l'exemple de code complet
Normalisations de la palette de couleurs SymLogNorm #
Démonstration de l'utilisation de la norme pour mapper des palettes de couleurs sur des données de manière non linéaire.
Ensemble de données synthétique composé de deux bosses, une négative et une positive, la positive avec 8 fois l'amplitude. Linéairement, la bosse négative est presque invisible et il est très difficile de voir le moindre détail de son profil. Avec la mise à l'échelle logarithmique appliquée aux valeurs positives et négatives, il est beaucoup plus facile de voir la forme de chaque bosse.
Voir SymLogNorm.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as colors
def rbf(x, y):
return 1.0 / (1 + 5 * ((x ** 2) + (y ** 2)))
N = 200
gain = 8
X, Y = np.mgrid[-3:3:complex(0, N), -2:2:complex(0, N)]
Z1 = rbf(X + 0.5, Y + 0.5)
Z2 = rbf(X - 0.5, Y - 0.5)
Z = gain * Z1 - Z2
shadeopts = {'cmap': 'PRGn', 'shading': 'gouraud'}
colormap = 'PRGn'
lnrwidth = 0.5
fig, ax = plt.subplots(2, 1, sharex=True, sharey=True)
pcm = ax[0].pcolormesh(X, Y, Z,
norm=colors.SymLogNorm(linthresh=lnrwidth, linscale=1,
vmin=-gain, vmax=gain, base=10),
**shadeopts)
fig.colorbar(pcm, ax=ax[0], extend='both')
ax[0].text(-2.5, 1.5, 'symlog')
pcm = ax[1].pcolormesh(X, Y, Z, vmin=-gain, vmax=gain,
**shadeopts)
fig.colorbar(pcm, ax=ax[1], extend='both')
ax[1].text(-2.5, 1.5, 'linear')

Text(-2.5, 1.5, 'linear')
Afin de trouver la meilleure visualisation pour un ensemble de données particulier, il peut être nécessaire d'expérimenter plusieurs échelles de couleurs différentes. En plus de la mise à l' SymLogNorméchelle, il existe également la possibilité d'utiliser AsinhNorm(expérimental), qui a une transition plus douce entre les régions linéaires et logarithmiques de la transformation appliquée aux valeurs de données, "Z". Dans les graphiques ci-dessous, il peut être possible de voir des artefacts de type contour autour de chaque bosse malgré l'absence de caractéristiques nettes dans l'ensemble de données lui-même. La mise à l' asinhéchelle montre un ombrage plus lisse de chaque bosse.
fig, ax = plt.subplots(2, 1, sharex=True, sharey=True)
pcm = ax[0].pcolormesh(X, Y, Z,
norm=colors.SymLogNorm(linthresh=lnrwidth, linscale=1,
vmin=-gain, vmax=gain, base=10),
**shadeopts)
fig.colorbar(pcm, ax=ax[0], extend='both')
ax[0].text(-2.5, 1.5, 'symlog')
pcm = ax[1].pcolormesh(X, Y, Z,
norm=colors.AsinhNorm(linear_width=lnrwidth,
vmin=-gain, vmax=gain),
**shadeopts)
fig.colorbar(pcm, ax=ax[1], extend='both')
ax[1].text(-2.5, 1.5, 'asinh')
plt.show()

Durée totale d'exécution du script : (0 minutes 3,374 secondes)