2012-10-12 103 views
11

Estoy usando la clase matplotlib.patches.Polygon para dibujar polígonos en un mapa. De hecho, se proporciona la información sobre las coordenadas de las esquinas de los polígonos y un valor de datos de coma flotante para cada "polígono". Ahora me gustaría convertir estos valores de datos (que van de 0 a 3e15) en información de color para visualizarlo bien. ¿Cuál es la mejor práctica para hacer eso en Python?Cómo convertir valores de datos en información de color para matplotlib?

Un fragmento de mi código:

poly = Polygon(xy, facecolor=data, edgecolor='none') 
plt.gca().add_patch(poly) 
+0

de ayuda (matplotlib.pyplot .plot): 'puede especificar los colores de muchas maneras extrañas y maravillosas, incluidos los nombres completos ('verde'), cadenas hexadecimales ('# 008000'), las tuplas RGB o RGBA ((0,1,0,1)) o intensidades de escala de grises como una cadena ('0,8') ' –

Respuesta

20

En el sistema de color RGB dos bits de datos se utilizan para cada color, rojo, verde, y azul. Eso significa que cada color se ejecuta en una escala de 0 a 255. Negro sería 00,00,00, mientras que el blanco sería 255,255,255. Matplotlib tiene muchos mapas de color predefinidos para que los use. Todos ellos están normalizados a 255, por lo que éstas van de 0 a 1. Por lo que sólo es necesario normalizar los datos, entonces se puede seleccionar manualmente los colores de un mapa de color de la siguiente manera:

>>> import matplotlib.pyplot as plt 

>>> Blues = plt.get_cmap('Blues') 
>>> print Blues(0) 
(0.9686274528503418, 0.9843137264251709, 1.0, 1.0) 
>>> print Blues(0.5) 
(0.41708574119736169, 0.68063054575639614, 0.83823145908467911, 1.0) 
>>> print Blues(1.0) 
(0.96555171293370867, 0.9823452528785257, 0.9990157632266774, 1.0) 

Aquí están todos los predefined colormaps. Si Si está interesado en crear sus propios mapas de color, here es un buen ejemplo. También here es un documento de IBM sobre la elección de los colores con cuidado, algo que debería considerar si utiliza color para visualizar datos.

+0

¡Thx! ¡Funciona de maravilla! – HyperCube

+0

Estoy confundido, 256 es 2 ** 8, tal vez se refiere a 8 bits = 1 byte de datos para cada color? – Ziofil

3

para convertir un valor de que va desde 0 a + infinito a un valor que va de 0,0 a 1,0

import matplotlib.pyplot as plt 

price_change = price_change ** 2/(1 + price_change ** 2) 
Blues = plt.get_cmap('Blues') 
print Blues(price_change) 

Una lista completa de los mapas de color es aquí: http://matplotlib.org/users/colormaps.html

Cuestiones relacionadas