web-dev-qa-db-fra.com

Scatter plot et mapping de couleur dans Python

J'ai une gamme de points x et y stockés dans des tableaux numpy. Ceux-ci représentent x(t) et y(t) où t = 0 ... T-1

Je trace un diagramme de dispersion en utilisant

import matplotlib.pyplot as plt

plt.scatter(x,y)
plt.show()

Je voudrais avoir une palette de couleurs représentant le temps (donc colorer les points en fonction de l'index dans les tableaux numpy)

Quel est le moyen le plus simple de le faire?

75
Vincent

Voici un exemple

import numpy as np
import matplotlib.pyplot as plt

x = np.random.Rand(100)
y = np.random.Rand(100)
t = np.arange(100)

plt.scatter(x, y, c=t)
plt.show()

Ici, vous définissez la couleur en fonction de l'index, t, qui est simplement un tableau de [1, 2, ..., 100]enter image description here

Peut-être un exemple plus facile à comprendre est le légèrement plus simple

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(100)
y = x
t = x
plt.scatter(x, y, c=t)
plt.show()

enter image description here

Notez que le tableau que vous transmettez sous la forme c n'a pas besoin d'ordre ni de type particulier, c'est-à-dire qu'il n'a pas besoin d'être trié ni d'entiers comme dans ces exemples. La routine de traçage redimensionnera la palette de couleurs de sorte que les valeurs minimales/maximales dans c correspondent au bas/haut de la palette.

Colormaps

Vous pouvez changer la palette de couleurs en ajoutant

import matplotlib.cm as cm
plt.scatter(x, y, c=t, cmap=cm.cmap_name)

L'importation de matplotlib.cm est facultative, car vous pouvez également appeler des tables de couleurs sous la forme cmap="cmap_name". Il existe une page de référence de tables de couleurs montrant à quoi chacune ressemble. Sachez également que vous pouvez inverser une palette de couleurs en l'appelant simplement comme suit: cmap_name_r. Donc soit

plt.scatter(x, y, c=t, cmap=cm.cmap_name_r)
# or
plt.scatter(x, y, c=t, cmap="cmap_name_r")

marchera. Les exemples sont "jet_r" ou cm.plasma_r. Voici un exemple avec la nouvelle palette de couleurs 1.5 viridis:

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(100)
y = x
t = x
fig, (ax1, ax2) = plt.subplots(1, 2)
ax1.scatter(x, y, c=t, cmap='viridis')
ax2.scatter(x, y, c=t, cmap='viridis_r')
plt.show()

enter image description here

Barres de couleur

Vous pouvez ajouter une barre de couleur en utilisant

plt.scatter(x, y, c=t, cmap='viridis')
plt.colorbar()
plt.show()

enter image description here

Notez que si vous utilisez des figures et des sous-graphes de manière explicite (par exemple, fig, ax = plt.subplots() ou ax = fig.add_subplot(111)), l'ajout d'une barre de couleur peut être un peu plus complexe. On peut trouver de bons exemples ici pour une barre de couleur de sous-parcelle unique et ici pour 2 sous-parcelles de barre de couleur 1 .

138
wflynny

Pour ajouter à la réponse de wflynny ci-dessus, vous pouvez trouver les cartes de couleurs disponibles ici

Exemple:

import matplotlib.cm as cm
plt.scatter(x, y, c=t, cmap=cm.jet)

ou bien,

plt.scatter(x, y, c=t, cmap='jet')
9
Nathan