Observação
Clique aqui para baixar o código de exemplo completo
Normalizações de mapa de cores SymLogNorm #
Demonstração do uso de norma para mapear mapas de cores em dados de maneiras não lineares.
Conjunto de dados sintéticos que consiste em duas protuberâncias, uma negativa e uma positiva, a positiva com 8 vezes a amplitude. Linearmente, a protuberância negativa é quase invisível e é muito difícil ver qualquer detalhe de seu perfil. Com a escala logarítmica aplicada a valores positivos e negativos, é muito mais fácil ver a forma de cada saliência.
Veja 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 a melhor visualização para qualquer conjunto de dados específico, pode ser necessário experimentar várias escalas de cores diferentes. Além do SymLogNorm
escalonamento, há também a opção de utilização AsinhNorm
(experimental), que possui uma transição mais suave entre as regiões linear e logarítmica da transformação aplicada aos valores dos dados, "Z". Nos gráficos abaixo, pode ser possível ver artefatos semelhantes a contornos ao redor de cada saliência, apesar de não haver recursos nítidos no próprio conjunto de dados. A asinh
escala mostra um sombreamento mais suave de cada saliência.
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 total de execução do script: (0 minutos 3,374 segundos)