2010-06-05 7 views
4

J'ai un ensemble dense de points dans l'avion. Je veux qu'ils soient colorés de sorte que les points proches les uns des autres aient la même couleur, et une couleur différente s'ils sont loin. Pour plus de simplicité, supposons qu'il y a, disons, 5 couleurs différentes à choisir. J'ai S'avère pas la moindre idée comment faire ..Coloriage points de fermeture

J'utilise Tkinter avec Python, par la façon dont

+0

Je suis un peu confus. Avez-vous des bouquets de points? "Proximité" et "farness" ne sont pas discrets. Les choses qui sont proches deviennent progressivement loin. –

+0

Au moins une question intéressante pas de la série "Comment l'utiliser avec l'outil X". –

+0

Vous avez raison, Noufal. Je pense qu'il est un peu difficile de dire exactement, mais si les points étaient également répartis à l'intérieur d'un cercle, il serait logique de le diviser simplement en tranches de pizza et de donner à chaque tranche une couleur différente. – ooboo

Répondre

2

Si vous pouvez utiliser la couleur de votre choix, vous pouvez utiliser le fait que les couleurs sont (presque) continues. Colorez les points en fonction de leurs coordonnées x, y, de sorte que vous obtiendrez comme effet secondaire que points rapprochés auront un un peu similaire couleur.

Vous pouvez utiliser quelque chose comme

point.color(R,G,B) = (point.normalized_x, 0.5, 1-point.normalized.y) 

où normalized_x est (x-min_x/(max_x-min_x)), de sorte qu'il donnerait 0 pour le point avec une valeur minimale de x et 1 pour le point avec maximal x valeur.

Si vous avez vraiment besoin d'utiliser un petit nombre de couleurs et ont point proche ont exactement la même couleur , alors vous devrez faire quelques clustering vos données (K-means étant simple et largement utilisé algorithme). Après le clustering, vous attribuez simplement une couleur à chaque point en fonction de l'identifiant de son cluster. Python a quelques bonnes implémentations, y compris scipy's clustering.

+0

oui. Il semble que le réglage du clustering soit la partie la plus difficile. –

+0

Oui, c'est probablement la meilleure idée. J'ai demandé des couleurs distinctes parce que je pensais que cela simplifierait les choses, mais il s'avère que ce n'est pas le cas. Je vais maintenant devoir lire sur le clustering. Merci :) – ooboo

0

je commencerais à identifier les concentrations des taches dans le plan. Trouvez les centres de ces agglomérations et attribuez-leur chaque couleur unique. Ensuite, pour d'autres spots, vous pouvez simplement calculer la couleur en utilisant le principe linéaire. Par exemple, si un centre est rouge et l'autre est jaune, un point quelque part au milieu deviendrait orange.

J'utiliserais probablement une fonction exponentielle au lieu d'un principe linéaire. Cela permet de conserver les groupes de points plus ou moins de la même couleur, ce qui donne seulement un changement de couleur notable aux points éloignés, ou, pour être plus précis, au loin et quelque part entre les points.

0

Une approche consiste à parcourir vos points et à les partitionner en ensembles avec un «centre». Puisque vous avez 5 couleurs, vous aurez 5 ensembles. Vous comparez la distance du nouveau point de chacun des centres et ensuite le placez dans le même groupe que le plus proche.

Chaque ensemble correspond à une couleur différente, vous pouvez donc simplement le tracer une fois ce partitionnement terminé.

+0

J'aime cette idée - mais je ne suis pas sûr de savoir comment choisir ces centres, et comment s'assurer que chaque ensemble a plus ou moins le même nombre de points – ooboo