Colormap-Normalisierungen SymLogNorm #

Demonstration der Verwendung von Norm zur Abbildung von Farbtabellen auf Daten auf nichtlineare Weise.

Synthetischer Datensatz bestehend aus zwei Buckeln, einem negativen und einem positiven, der positive mit 8-facher Amplitude. Linear ist der negative Buckel fast unsichtbar, und es ist sehr schwierig, jedes Detail seines Profils zu erkennen. Wenn die logarithmische Skalierung sowohl auf positive als auch auf negative Werte angewendet wird, ist es viel einfacher, die Form jedes Buckels zu erkennen.

Siehe 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')
Colormap-Normalisierungen symlognorm
Text(-2.5, 1.5, 'linear')

Um die beste Visualisierung für einen bestimmten Datensatz zu finden, kann es notwendig sein, mit mehreren verschiedenen Farbskalen zu experimentieren. Neben der SymLogNormSkalierung besteht auch die Möglichkeit, AsinhNorm(experimentell) zu verwenden, was einen glatteren Übergang zwischen dem linearen und dem logarithmischen Bereich der auf die Datenwerte angewendeten Transformation "Z" aufweist. In den Diagrammen unten kann es möglich sein, konturähnliche Artefakte um jeden Buckel herum zu sehen, obwohl der Datensatz selbst keine scharfen Merkmale enthält. Die asinhSkalierung zeigt eine glattere Schattierung jedes Buckels.

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()
Colormap-Normalisierungen symlognorm

Gesamtlaufzeit des Skripts: (0 Minuten 3,374 Sekunden)

Galerie generiert von Sphinx-Gallery