Embora a resposta do @ whuber forneça exatamente o que você pediu, gostaria de advertir que o que você pede pode não ser a melhor maneira de representar visualmente seus dados, por dois motivos.
- Os espectadores presumirão naturalmente que as cores são distribuídas igualmente por valor (profundidade) e não por classificação. Você terá que trabalhar duro com sua rotulagem para fazer com que o cérebro cognitivo do espectador anule o que o sistema visual lhes diz.
- A classificação pode não ser mais importante para os espectadores do que a profundidade real. Se houver muitos valores entre 0 e 1, digamos, importa analiticamente como esses valores são distribuídos?
Você conhece melhor sua aplicação, é claro, então não posso dizer qual é a resposta certa, mas abaixo estão algumas alternativas usando dados gerados 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))
Os dados vão de 0 a 12,5 com a seguinte distribuição:
Um gráfico de superfície 3D mostra alguns picos, uma calha rasa e um pequeno monte:
Agora, vamos ver alguns gráficos de contorno em 2D.
Mapeamento de cores linear e reto, que perde os recursos menores, como você observou:
Se a variação nas áreas profundas não for importante, o recorte do mapeamento de cores permitirá mais cores para profundidades menores, mantendo um mapeamento linear nessa área:
Para comparação, aqui está a exibição colorida de classificação (desculpe que minha legenda esteja nos valores de classificação em vez de valores de profundidade):
Não tenho certeza se essa é uma boa representação para o seu aplicativo ou não. Os detalhes na calha rasa são exagerados. Um mapeamento de cores de log é semelhante e tem as vantagens de ter uma interpretação real e pode ser consistente entre os conjuntos de dados, mas o log ainda não é perceptivo (desculpas novamente pela legenda):
Finalmente, aqui está uma abordagem em uma direção ligeiramente diferente que pode ser combinada com qualquer uma das opções acima para aumentar a resolução: um mapeamento de cores em vários tons. Nesse caso, a coloração é linear e cortada:
Posteriormente, uma abordagem que meu software não permite prontamente é usar um mapeamento de cores linear em várias partes, que já vi em alguns mapas de elevação. Por exemplo, as altitudes baixas são verdes em incrementos de 50 pés, as altitudes médias são bronzeadas em incrementos de 200 pés e as altas são cinzas em incrementos de 800 pés.
Conclusão : é melhor se o cérebro do espectador funcionar com o seu sistema de percepção visual em vez de contra ele.