Je travaille sur un projet logiciel qui consiste à créer un visualiseur pour les simulations de crue. Dans le cadre de ce projet, j'ai créé un gradient d'eau qui montre la profondeur de l'eau à des points particuliers. Pour définir quelles valeurs représenteront quelles couleurs, je passe en revue les données et j'obtiens les valeurs minimales et maximales qui se produisent et je distribue uniformément les couleurs selon cette échelle.
Cependant, il y a souvent des moments dans ces simulations qui ont beaucoup plus d'eau profonde que n'importe où ailleurs dans la simulation. Cela fait que la plupart des points sur la carte ont des couleurs très similaires et ce n'est pas très informatif et rend les zones où l'eau est plus profonde très difficiles à voir.
Mon objectif est de dédier une plus large gamme de couleurs aux profondeurs les plus fréquentes. Par exemple, si les profondeurs vont de 0 à 12 mais que la plupart des profondeurs sont comprises entre 1 et 2, je veux que plus de variation de couleur se produise dans cette plage qu'entre 11 et 12 ou 4 et 5. Il semble que je doive utiliser l'écart-type ou quelque chose impliquant une distribution normale pour ce faire, mais je suis un peu flou sur la façon dont ces choses fonctionnent et comment je peux les utiliser pour atteindre mon objectif.
Toute aide pouvant être fournie sera appréciée. Je vous remercie.
la source
Réponses:
Il semble que vous souhaitiez dédier chaque couleur de votre palette à environ la même quantité de données.
Pour illustrer, voici un histogramme d'un ensemble de110 relevés de profondeur simulés:
Imaginez que cela a été lissé. Ce faisant, l'histogramme pourrait être divisé en segments verticaux de surface égale, en utilisant autant de tranches que vous le souhaitez (j'ai utilisé10 morceaux pour cet exemple.) Pour garder les zones égales, les tranches doivent être maigres où l'histogramme est élevé - c'est-à-dire où il y a beaucoup de données - et grasses où l'histogramme est bas - c'est-à-dire où est peu de données.
Une façon de réaliser facilement le découpage consiste à tracer la quantité totale de données ("proportion cumulée") en fonction de la profondeur. Découpez l'axe vertical en intervalles pairs, puis lisez les profondeurs où les tranches traversent le tracé: utilisez-les comme points de coupure pour visualiser les profondeurs.
L'algorithme de calcul des seuils à partir des données doit être évident et simple à écrire dans presque tous les langages de programmation: triez les valeurs, divisez la liste en groupes de taille approximativement égale et choisissez des seuils pour séparer la plus grande valeur de chaque groupe de la plus petite valeur du groupe qui lui succède.
la source
Bien que la réponse de @ whuber fournisse exactement ce que vous avez demandé, je tiens à vous avertir que ce que vous demandez n'est peut-être pas le meilleur moyen de représenter visuellement vos données, pour deux raisons.
Vous connaissez bien votre application, bien sûr, donc je ne peux pas dire quelle est la bonne réponse, mais voici quelques alternatives utilisant des données générées par
Les données vont de 0 à 12,5 avec la distribution suivante:
Un tracé de surface en 3D montre quelques pics, un creux peu profond et un petit monticule:
Voyons maintenant quelques tracés de contour 2D.
Cartographie linéaire linéaire des couleurs, qui manque les plus petites fonctionnalités comme vous l'avez remarqué:
Si la variation dans les zones profondes n'est pas importante, le découpage du mappage de couleurs permet plus de couleurs pour les petites profondeurs tout en conservant un mappage linéaire dans cette zone:
À titre de comparaison, voici la vue par couleur (désolé que ma légende soit dans les valeurs de classement plutôt que dans les valeurs de profondeur):
Je ne sais pas si c'est une bonne représentation pour votre application ou non. Le détail dans le creux peu profond est exagéré. Un mappage de couleurs de journal est similaire et présente les avantages d'avoir une interprétation réelle et peut être cohérent entre les ensembles de données, mais le journal n'est toujours pas perceptif (encore des excuses pour la légende):
Enfin, voici une approche dans une direction légèrement différente qui peut être combinée avec l'une des options ci-dessus pour augmenter la résolution: un mappage de couleurs multicolore. Dans ce cas, la coloration est linéaire et écrêtée:
Post-finalement, une approche que mon logiciel ne permet pas facilement est d'utiliser un mappage de couleurs linéaire par morceaux à plusieurs teintes, que j'ai vu dans certaines cartes d'élévation. Par exemple, les basses altitudes sont des verts par incréments de 50 pieds, les altitudes moyennes sont des bronzages par incréments de 200 pieds et les hautes sont des gris par incréments de 800 pieds.
Conclusion : il est préférable que le cerveau du spectateur travaille avec votre système de perception visuelle plutôt que contre.
la source