Je veux faire un nuage de points (en utilisant matplotlib) où les points sont ombrés selon une troisième variable. Je suis très proche de ça:
plt.scatter(w, M, c=p, marker='s')
où w et M sont les points de données et p est la variable à ombrer par rapport à.
Cependant, je veux le faire en niveaux de gris plutôt qu'en couleurs. Quelqu'un peut-il aider?
Il n'est pas nécessaire de définir manuellement les couleurs. Au lieu de cela, spécifiez une palette de couleurs en niveaux de gris ...
import numpy as np
import matplotlib.pyplot as plt
# Generate data...
x = np.random.random(10)
y = np.random.random(10)
# Plot...
plt.scatter(x, y, c=y, s=500)
plt.gray()
plt.show()
Ou, si vous préférez un plus large gamme de couleurs , vous pouvez également spécifier le cmap
kwarg à scatter
. Pour utiliser la version inversée de l’un d’eux, spécifiez simplement la version "_r
" de l’un d’eux. Par exemple. gray_r
au lieu de gray
. Plusieurs nuances de couleurs en niveaux de gris sont prédéfinies (par exemple, gray
, Gist_yarg
, binary
, etc.).
import matplotlib.pyplot as plt
import numpy as np
# Generate data...
x = np.random.random(10)
y = np.random.random(10)
plt.scatter(x, y, c=y, s=500, cmap='gray')
plt.show()
Dans matplotlib, les couleurs grises peuvent être définies comme une chaîne de valeur numérique comprise entre 0 et 1.
Par exemple c = '0.1'
Vous pouvez ensuite convertir votre troisième variable en une valeur comprise dans cette plage et l’utiliser pour colorer vos points.
Dans l'exemple suivant, j'ai utilisé la position y du point comme valeur déterminant la couleur:
from matplotlib import pyplot as plt
x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
y = [125, 32, 54, 253, 67, 87, 233, 56, 67]
color = [str(item/255.) for item in y]
plt.scatter(x, y, s=500, c=color)
plt.show()
Parfois, vous devrez peut-être tracer une couleur avec précision en fonction du cas de la valeur x . Par exemple, vous pouvez avoir un cadre de données avec 3 types de variables et des points de données. Et tu veux faire suite,
Dans ce cas, vous devrez peut-être écrire sur une fonction courte pour mapper les valeurs x sur les noms de couleurs correspondants sous forme de liste, puis transmettre cette liste à la commande plt.scatter
.
x=['A','B','B','C','A','B']
y=[15,30,25,18,22,13]
# Function to map the colors as a list from the input list of x variables
def pltcolor(lst):
cols=[]
for l in lst:
if l=='A':
cols.append('red')
Elif l=='B':
cols.append('blue')
else:
cols.append('green')
return cols
# Create the colors list using the function above
cols=pltcolor(x)
plt.scatter(x=x,y=y,s=500,c=cols) #Pass on the list created by the function here
plt.grid(True)
plt.show()