Matplotlib scatterplot; couleur en fonction d'une troisième variable

je veux faire un scatterplot (en utilisant matplotlib) où les points sont ombrés selon une troisième variable. Je suis très proche de cela:

plt.scatter(w, M, c=p, marker='s')

où w et M sont les points de données et p est la variable que je veux ombrager par rapport à.

Cependant, je veux le faire en gris plutôt qu'en couleur. Quelqu'un peut-il aider?

115
demandé sur Joe Kington 2011-11-20 19:38:12

3 réponses

il n'est pas nécessaire de régler manuellement les couleurs. À la place, spécifiez un colormap en échelle 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 colormaps , vous pouvez également spécifier le cmap kwarg à scatter . Pour utiliser la version inversée de l'un de ces, il suffit de spécifier le " _r " version de l'un d'eux. Par exemple: gray_r au lieu de gray . Y est-ce que plusieurs colormaps à échelle de gris différents sont pré-fabriqués (par ex. 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()
115
répondu Joe Kington 2015-09-16 12:39:20

dans les couleurs de gris matplotlib peut être donné comme une chaîne d'une valeur numérique entre 0-1.

Par exemple c = '0.1'

alors vous pouvez convertir votre troisième variable dans une valeur à l'intérieur de cette gamme et de l'utiliser pour colorer vos points.

Dans l'exemple suivant, j'ai utilisé la position y du point comme valeur qui détermine 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

21
répondu joaquin 2011-11-20 16:50:17

parfois, vous pouvez avoir besoin de tracer la couleur précisément basée sur le cas de la valeur de x . Par exemple, vous pouvez avoir une base de données avec 3 types de variables et quelques points de données. Et vous voulez faire à la suite,

  • points correspondant à la variable physique" A " en rouge.
  • points correspondant à la variable physique " B " en bleu.
  • points correspondant à la variable physique " C " dans VERT.

dans ce cas, vous devrez peut-être écrire à une fonction courte pour faire correspondre les valeurs x aux noms de couleur correspondants sous forme de liste, puis passer sur 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

1
répondu Tirtha 2018-07-16 20:48:46