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