Nota
Fare clic qui per scaricare il codice di esempio completo
Normalizzazioni della mappa dei colori SymLogNorm #
Dimostrazione dell'uso della norma per mappare le mappe dei colori sui dati in modi non lineari.
Set di dati sintetici costituito da due gobbe, una negativa e una positiva, la positiva con 8 volte l'ampiezza. Linearmente, la gobba negativa è quasi invisibile, ed è molto difficile vedere qualsiasi dettaglio del suo profilo. Con il ridimensionamento logaritmico applicato sia ai valori positivi che a quelli negativi, è molto più facile vedere la forma di ciascuna gobba.
Vedi 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')
Per trovare la migliore visualizzazione per un particolare set di dati, potrebbe essere necessario sperimentare più scale di colori diverse. Oltre al SymLogNorm
ridimensionamento, esiste anche l'opzione di utilizzo AsinhNorm
(sperimentale), che ha una transizione più uniforme tra le regioni lineari e logaritmiche della trasformazione applicata ai valori dei dati, "Z". Nei grafici sottostanti, potrebbe essere possibile vedere artefatti simili a contorni attorno a ciascuna gobba nonostante non vi siano caratteristiche nitide nel set di dati stesso. Il asinh
ridimensionamento mostra un'ombreggiatura più uniforme di ogni gobba.
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()
Tempo di esecuzione totale dello script: (0 minuti 3,374 secondi)