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')
mapa de colores normalizaciones symlognorm
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()
mapa de colores normalizaciones symlognorm

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

Galería generada por Sphinx-Gallery