Estoy trabajando en un proyecto de software que implica crear un visualizador para simulaciones de inundación. Como parte de este proyecto, he creado un gradiente de agua que muestra la profundidad del agua en puntos particulares. Para establecer qué valores representarán qué colores, reviso los datos y obtengo los valores mínimos y máximos que ocurren y distribuyo uniformemente los colores de acuerdo con esa escala.
Sin embargo, a menudo hay puntos de tiempo en estas simulaciones que tienen agua significativamente más profunda que en cualquier otro lugar de la simulación. Esto hace que la mayoría de los puntos en el mapa tengan colores muy similares y esto no es muy informativo y hace que las áreas donde el agua es más profunda sean muy difíciles de ver.
Mi objetivo es dedicar una gama más amplia de colores a las profundidades que ocurren con mayor frecuencia. Por ejemplo, si las profundidades van de 0 a 12 pero la mayoría de las profundidades están entre 1 y 2, quiero que ocurra más variación de color dentro de ese rango que entre 11 y 12 o 4 y 5. Parece que necesito usar la desviación estándar o hay algo que implica una distribución normal para hacer esto, pero estoy un poco confuso sobre cómo funcionan estas cosas y cómo puedo usarlas para lograr mi objetivo.
Cualquier ayuda que se pueda proporcionar será apreciada. Gracias.
fuente
Respuestas:
Parece que es posible que desee dedicar cada color en su paleta a aproximadamente la misma cantidad de datos.
Para ilustrar, aquí hay un histograma de un conjunto de110 lecturas de profundidad simuladas:
Imagina que esto se suavizara. Al hacerlo, el histograma se podría dividir uniformemente en segmentos verticales de igual área, usando tantas rebanadas como desee (yo usé10 piezas para este ejemplo.) Para mantener las áreas iguales, los cortes deben ser delgados donde el histograma es alto, es decir, donde hay muchos datos, y gordo donde el histograma es bajo, es decir, donde hay Es poca información.
Una forma de realizar el corte fácilmente es trazar la cantidad total de datos ("proporción acumulativa") contra la profundidad. Corta el eje vertical en intervalos pares, luego lee las profundidades donde las rebanadas cruzan la trama: úsalas como puntos de corte para visualizar las profundidades.
El algoritmo para calcular los puntos de corte a partir de los datos debe ser obvio y fácil de escribir en casi cualquier lenguaje de programación: clasifique los valores, divida la lista en grupos de aproximadamente el mismo tamaño y elija puntos de corte para separar el valor más grande en cada grupo del valor más pequeño en el grupo que lo sucede.
fuente
Aunque la respuesta de @ whuber proporciona exactamente lo que solicitó, me gustaría advertir que lo que pide puede no ser la mejor manera de representar visualmente sus datos, por dos razones.
Usted conoce mejor su aplicación, por supuesto, así que no puedo decir cuál es la respuesta correcta, pero a continuación se presentan algunas alternativas que utilizan datos generados por
Los datos van de 0 a 12.5 con la siguiente distribución:
Un diagrama de superficie tridimensional muestra algunos picos, un canal poco profundo y un pequeño montículo:
Ahora veamos algunas gráficas de contorno en 2-D.
Mapeo de color lineal recto, que pierde las características más pequeñas como has notado:
Si la variación en las áreas profundas no es importante, recortar el mapeo de color permite más colores para las profundidades más pequeñas mientras se mantiene un mapeo lineal en esa área:
A modo de comparación, aquí está la vista de color de rango (lo siento, mi leyenda está en valores de rango en lugar de valores de profundidad):
No estoy seguro de si esa es una buena representación para su aplicación o no. El detalle en el canal poco profundo es exagerado. Un mapeo de color de registro es similar y tiene las ventajas de tener una interpretación real y puede ser coherente en todos los conjuntos de datos, pero el registro aún no es perceptivo (nuevamente disculpas por la leyenda):
Finalmente, aquí hay un enfoque en una dirección ligeramente diferente que se puede combinar con cualquiera de los anteriores para aumentar la resolución: un mapeo de colores de múltiples tonos. En este caso, el color es lineal y recortado:
Después de finalmente, un enfoque que mi software no permite fácilmente es utilizar un mapeo de color lineal por partes de varios tonos, que he visto en algunos mapas de elevación. Por ejemplo, las altitudes bajas son verdes en incrementos de 50 pies, las altitudes medias son bronceadas en incrementos de 200 pies y las altas son grises en incrementos de 800 pies.
En pocas palabras : es mejor si el cerebro del espectador trabaja con su sistema de percepción visual en lugar de en contra de él.
fuente