2011-11-16 21 views
5

Por favor, considere este fragmento simplificado:cómo asignar valores de color RGB a la rejilla de malla con matplotlib

import numpy as np 

x = np.arange(3) 
y = np.arange(2) 

X, Y = np.meshgrid(x,y) 

me gustaría asignar valores de color ya preparadas para cada celda de la cuadrícula. I tienen valores de color de misma forma que la rejilla XY para cada canal RGB como valores RGB normalizados - por lo que es 3 arrays numpy que consisten cada uno de 0 a 1 flotador, que representan el valor del canal

I primero intentado con matplotlib.pyplot.pcolor ya que parece exacta herramienta para lo que quiero, pero no puedo entender cómo se hace el mapeo de color.

Parece que la matriz de colores (C en la documentación) está mapeada en el mapa de colores predeterminado (o asignado manualmente), pero no puedo obtener la lógica de los valores en esta matriz de colores y su función.
Si los valores se asignan en el mapa de colores predeterminado (o asignado) del valor de la celda de cuadrícula, ¿cuál es el propósito de la matriz de color C?
Hice esta matriz C a mano para el ejemplo anterior (matriz nux 2x1), pero independientemente de sus valores obtengo los mismos colores que parecen depender únicamente del valor de la celda de la cuadrícula y no de los valores en esta matriz en C.

Así que estoy confundido aqui para solicitar ayuda especie, que no necesariamente tiene que ser la explicación de esta función pcolor, pero tal vez lo que es la forma correcta para asignar valores de color a la rejilla de malla con matplotlib

Respuesta

4

Usted quiere imshow en lugar de pcolor. (Aunque puede utilizar pcolor o pcolormesh para esto.)

import numpy as np 
import matplotlib.pyplot as plt 

# Make some random data to represent your r, g, b bands. 
ny, nx = 2, 3 
r, g, b = [np.random.random(ny*nx).reshape((ny, nx)) for _ in range(3)] 

c = np.dstack([r,g,b]) 

plt.imshow(c, interpolation='nearest') 
plt.show() 

enter image description here

+1

Gracias. Parte de la malla actual: http://i.imgur.com/ZBWAs.jpg – theta

+2

¡Muy bien! ¿Es eso datos de MODIS? Además, para datos continuos, probablemente no desee la interpolación "más cercana" que he especificado en mi ejemplo. El método de interpolación predeterminado es bilineal, y sería una mejor opción para sus datos. –

+0

Gracias de nuevo por la punta de interpolación, la imagen se amplía con matplotlib y en 1: 1 es belleza, por supuesto. Y tiene razón, me parece increíble que lo haya pensado solo por una parte de la imagen :) Cheers – theta

Cuestiones relacionadas