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?
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]
.
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()
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.
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()
Vous pouvez ajouter une barre de couleur en utilisant
plt.scatter(x, y, c=t, cmap='viridis')
plt.colorbar()
plt.show()
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 .
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')