Nota
Haga clic aquí para descargar el código de ejemplo completo
Mapa de colores Normalizaciones SymLogNorm #
Demostración del uso de normas para mapear mapas de colores en datos de manera no lineal.
Conjunto de datos sintéticos que consta de dos jorobas, una negativa y otra positiva, la positiva con 8 veces la amplitud. Linealmente, la joroba negativa es casi invisible, y es muy difícil ver algún detalle de su perfil. Con la escala logarítmica aplicada a valores positivos y negativos, es mucho más fácil ver la forma de cada joroba.
ver 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')
Para encontrar la mejor visualización para cualquier conjunto de datos en particular, puede ser necesario experimentar con múltiples escalas de color diferentes. Además del SymLogNormescalado, también existe la opción de usar AsinhNorm(experimental), que tiene una transición más suave entre las regiones lineales y logarítmicas de la transformación aplicada a los valores de los datos, "Z". En los gráficos a continuación, es posible ver artefactos similares a contornos alrededor de cada joroba a pesar de que no hay características nítidas en el conjunto de datos en sí. La asinhescala muestra un sombreado más suave de cada joroba.
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()

Tiempo total de ejecución del script: (0 minutos 3.374 segundos)