Normalisation des cartes de couleurs de Matplotlib

Beginner

This tutorial is from open-source community. Access the source code

Introduction

Dans la visualisation de données, les cartes de couleurs sont utilisées pour représenter des données numériques à travers des couleurs. Cependant, parfois la distribution des données peut être non linéaire, ce qui peut rendre difficile la discernement des détails des données. Dans de tels cas, la normalisation des cartes de couleurs peut être utilisée pour projeter les cartes de couleurs sur les données de manière non linéaire afin d'aider à visualiser les données de manière plus précise. Matplotlib fournit plusieurs méthodes de normalisation, y compris SymLogNorm et AsinhNorm, qui peuvent être utilisées pour normaliser les cartes de couleurs. Ce laboratoire démontrera comment utiliser SymLogNorm et AsinhNorm pour projeter les cartes de couleurs sur des données non linéaires.

Conseils sur la machine virtuelle

Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Notebook pour accéder à Jupyter Notebook pour la pratique.

Parfois, vous devrez peut-être attendre quelques secondes pour que Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations de Jupyter Notebook.

Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez des commentaires après la session, et nous résoudrons rapidement le problème pour vous.

Importation des bibliothèques requises

Dans cette étape, nous allons importer les bibliothèques nécessaires, y compris Matplotlib, NumPy et les couleurs de Matplotlib.

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.colors as colors

Création de données synthétiques

Dans cette étape, nous allons créer un ensemble de données synthétiques composé de deux bosses, l'une négative et l'autre positive, avec l'amplitude de la bosse positive huit fois supérieure à celle de la bosse négative. Nous allons ensuite appliquer SymLogNorm pour visualiser les données.

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

Appliquer SymLogNorm

Dans cette étape, nous allons appliquer SymLogNorm aux données synthétiques et visualiser les résultats.

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')

plt.show()

Appliquer AsinhNorm

Dans cette étape, nous allons appliquer AsinhNorm aux données synthétiques et visualiser les résultats.

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()

Sommaire

Dans ce laboratoire, nous avons appris à utiliser SymLogNorm et AsinhNorm pour projeter des cartes de couleurs sur des données non linéaires. En appliquant ces méthodes de normalisation, nous pouvons visualiser les données plus précisément et discerner plus facilement les détails des données.