8 votos

Cómo encontrar una adecuada asociación del color con el valor de los datos en una visualización?

Estoy trabajando en un proyecto de software que implica la creación de un visualizador para las simulaciones. Como parte de este proyecto, he creado un gradiente de agua que muestra la profundidad del agua en determinados puntos. Para establecer qué valores se representan los colores, voy a través de los datos y obtener los valores máximo y mínimo que se producen y distribuir de manera uniforme los colores de acuerdo a la escala.

Sin embargo, a menudo hay momentos en estas simulaciones que tienen significativamente más profundos de agua en ellos que en cualquier otra parte en la simulación. Esto hace que la mayoría de los puntos en el mapa para tener colores muy similares y esto no es muy informativo y hace que las zonas donde el agua es más profunda muy difícil de ver.

Mi objetivo es dedicar una mayor gama de colores a profundidades que se producen con más frecuencia. Por ejemplo, si profundidades que van de 0 a 12, pero la mayoría de las profundidades son de entre 1 y 2, quiero más variaciones de color que se producen dentro de ese rango que decir entre 11 y 12 o 4 y 5. Parece que tengo que usar la desviación estándar o algo que implican la distribución normal para hacer esto, pero estoy un poco difusa en cómo funcionan las cosas y cómo los puedo usar para lograr mi objetivo.

Cualquier ayuda que puede ser proporcionada será apreciado. Gracias.

20voto

erik Puntos 3923

Aunque @whuber la respuesta que ofrece justo lo que pedí, me gustaría advertir que lo que pides no puede ser la mejor manera de representar visualmente los datos, por dos razones.

  1. Los espectadores, naturalmente, asumir que los colores están distribuidos uniformemente por valor de (profundidad) en lugar de por valor. Usted tendrá que trabajar duro con su etiquetado para obtener el visor del cerebro cognitivo para invalidar lo que su sistema visual está diciendo.
  2. El rango no puede ser más importante para sus espectadores de lo real en profundidad. Si hay un montón de valores entre 0 y 1, decir, qué importa analíticamente cómo esos valores se distribuyen?

Usted sabe que su mejor aplicación, por supuesto, así que no puedo decir lo que la respuesta correcta es, pero a continuación son algunas de las alternativas utilizando los datos generados por

r = Sqrt((:x * :x + :y * :y) / 400);
t = ArcTan(:y, :x);
z = (12 * Exp(-r * r * 3)) * Abs(Sin(2 * Pi() * r) - r * Cos(3 * t))

Los datos que va de 0 a 12,5 con la siguiente distribución:

histogram

Un 3-D de la superficie de la parcela mostrar algunos de los picos, un poco comedero y un pequeño montículo:

surface plot

Ahora echemos un vistazo a algunos 2-D gráficos de contorno.

Lineal recta mapas de color, que echa de menos los detalles más pequeños, como te has dado cuenta:

linear color mapping

Si la variación en la profundidad de las áreas es importante, entonces el recorte de la asignación de colores permite a los más colores para los más pequeños de profundidades, mientras que el mantenimiento de un lineal en la cartografía de la zona:

clipped linear color mapping

Para la comparación, aquí está el rango de color de la vista (lo siento que mi leyenda se encuentra en el rango de valores en lugar de la profundidad de los valores):

rank color mapping

No estoy seguro de si eso es una buena representación para su aplicación o no. El detalle de la poca profundidad del canal es exagerada. Un registro de asignación de colores es similar y tiene las ventajas de tener algo de real interpretación y puede ser consistentes a través de los conjuntos de datos, pero el registro no es todavía perceptual (disculpas de nuevo por la leyenda):

log color mapping

Finalmente, he aquí un enfoque en una dirección diferente, que puede ser combinado con cualquier de los de arriba para aumentar la resolución: un multi-tonos de color de asignación. En este caso, la coloración es lineal y recortado:

dual clipped linear

Post-finalmente, un enfoque que mi software no estar dispuestas a permitir es el uso de un multi-tonos piece-wise lineal asignación de colores, que la he visto en algunos mapas de elevación. Por ejemplo, las bajas altitudes son verdes en incrementos de 50 pies, a mediados de altitudes se broncea en 200 ft incrementos y los agudos son grises en 800 ft incrementos.

Línea inferior: es mejor si el espectador trabaja el cerebro con su percepción visual del sistema en lugar de en su contra.

9voto

jldugger Puntos 7490

Suena como que usted desee dedicar cada color en su paleta a aproximadamente la misma cantidad de datos.

Para ilustrar, aquí es un histograma de un conjunto de $110$ simulado profundidad de las lecturas:

Histogram

Imagina esto se suavizan. Al hacerlo, el histograma puede ser bien cortadas en segmentos verticales de igual área, utilizando como muchos sectores como te gusta (yo usé $10$ piezas para este ejemplo). Mantener las áreas de igualdad, los cortes tienen que ser flaca donde el histograma es alta, es decir, donde hay un montón de datos-y la grasa donde el histograma es baja, es decir, donde hay pocos datos.

Kernel density, sliced

Una forma de lograr la segmentación fácilmente es imprimir la cantidad total de datos ("la proporción acumulada") en contra de la profundidad. Cortar el eje vertical en intervalos regulares, a continuación, lea las profundidades donde los fragmentos de la cruz de la parcela: el uso de esos como los puntos de corte para la visualización de las profundidades.

CDF

El algoritmo para el cálculo de los puntos de corte a partir de los datos debe ser obvia, y es sencillo escribir en casi cualquier lenguaje de programación: ordenar los valores, dividir la lista en grupos de aproximadamente el mismo tamaño, y elegir los puntos de corte para separar el mayor valor en cada grupo desde el valor menor en el grupo que tiene éxito.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X