2011-11-20 37 views

Respuesta

19

En matplotlib los colores grises se pueden dar como una cadena de un valor numérico entre 0-1.
Por ejemplo c = '0.1'

Luego puede convertir su tercera variable en un valor dentro de este rango y usarla para colorear sus puntos.
En el siguiente ejemplo que utiliza la posición y del punto como el valor que determina el color:

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

+2

Para el registro, puede aplicar ALPHA como un mapa de colores si proporciona una matriz con forma (n, 4) como argumento 'c', con valores alfa en la cuarta columna. Si la tercera variable es Z, con 'forma = (n, 1)', entonces 'colores = numpy.hstack ((numpy.zeros_like (z), numpy.zeros_like (z), numpy.ones_like (z), z/z .max())) 'da un efecto muy agradable (por supuesto, se puede ajustar). – heltonbiker

+1

¿por qué el voto a favor? – joaquin

+0

Aparece un error: 'la longitud de la secuencia de rgba debe ser 3 o 4' – MattClimbs

101

No hay necesidad de ajustar manualmente los colores. En su lugar, especificar un mapa de color en escala de grises ...

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

O, si prefiere un wider range of colormaps, también puede especificar el kwarg cmap-scatter. Para usar la versión invertida de cualquiera de estos, simplemente especifique la versión "_r" de cualquiera de ellos. P.ej. gray_r en lugar de gray. Hay varios mapas de color de escala de grises prefabricados (por ejemplo, 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() 
+1

¡Gracias! ¿Hay alguna forma de dibujar contornos alrededor de estos puntos que contengan una cierta cantidad del peso total? –

+6

'mpl.cm' también está disponible directamente como' plt.cm'. – heltonbiker

+0

Columna @Thomas: si quieres dibujar contornos, debes interpolar los datos de los puntos a una matriz 2D, luego trazar eso usando 'plt.contour()' o 'plt.contourf()' - pero esa es una pregunta diferente – Zak

Cuestiones relacionadas