web-dev-qa-db-fra.com

Diagramme de dispersion Matplotlib; couleur en fonction d'une troisième variable

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?

136
Thomas Collett

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

enter image description here

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()
140
Joe Kington

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

enter image description here

25
joaquin

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,

  • Tracez les points correspondant à la variable physique 'A' en ROUGE.
  • Tracez les points correspondant à la variable physique 'B' en BLEU.
  • Tracez les points correspondant à la variable physique 'C' en VERT.

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

Coloring scatter plot as a function of x variable

6
Tirtha