Comment créer une carte à partir d'un graphique

7

Je veux dessiner une carte polygonale 2D basée sur les données fournies par une autre source pour faciliter l'analyse des actions sur la carte. Les données ont le format suivant:

1 ['2', '4', '5', '7', '17', '10']
2 ['1', '3', '4']
3 ['2', '11', '4']
4 ['1', '2', '3', '11', '13', '18', '5']
5 ['1', '4', '18', '17']
6 ['7', '8']
...

Le premier nombre est l'ID d'un nœud, la liste suivante contient les ID de ses voisins. Comme le nombre de voisins d'un nœud diffère, j'ai besoin de dessiner une carte polygonale.

J'ai donc essayé d'utiliser des polygones de Voronoï pour la représentation cartographique. Le problème est: comment déterminer les points pour satisfaire toutes les relations de voisinage? Je suppose que mon premier essai est plus ou moins une erreur dans mon cycle d'essais et d'erreurs. J'ai utilisé l' outil sfdp de graphviz pour obtenir les positions des points du graphique:

exemple de représentation graphique à l'aide de sfdp

L'utilisation des positions des points a donné la représentation cartographique suivante:

exemple de carte à l'aide du diagramme de voronoi

Le problème de cette approche est que, par exemple, les nœuds 4 et 1 sont voisins, mais dans le diagramme de Voronoï, ils ne le sont pas à cause de la position des nœuds. Donc pour moi, cette approche a échoué.

Google, j'ai trouvé beaucoup de tutoriels générant des cartes avec des polygones ou des tuiles mais je n'ai pas encore découvert comment je peux créer une carte pour mes données données. Je suppose qu'il existe une approche utilisant (plusieurs) hexagones / triangles / carrés ou un mélange pour atteindre ce dont j'ai besoin mais je ne sais pas ce que je vais chercher.

Y a-t-il un mot clé ou un algorithme qui peut m'aider ici?

Mise à jour / résultat : pour être complet: voici mon résultat après avoir utilisé les suggestions de la réponse acceptée: résultat

maggie
la source
À partir des données fournies, plusieurs cartes pourraient être créées, notamment avec les points 12 et 9 qui n'ont qu'une seule relation. Est-ce un problème particulier?
lewisjb
@Pyro: non ce n'est pas un problème. C'est juste utilisé pour l'analyse.
maggie
vous trouverez un algorithme pour ce double problème répertorié comme triangulation de Delaunay et diagrammes de Voronoi.
tinyfiledialogs

Réponses:

12

Ce que vous voulez, c'est produire un double graphique ; c'est-à-dire un graphique produit en convertissant des faces en sommets et en les connectant en fonction des faces adjacentes dans le graphique d'origine. Exemple:

double graphique

Le problème, comme vous pouvez le voir, est que si vous souhaitez conserver la même disposition du graphique, vous obtiendrez des bords vraiment sinueux dans le graphique double. En outre, vous vous retrouverez souvent avec un multigraph - un graphique où certains sommets ont plusieurs bords entre eux. Il est cependant garanti d'être planaire, c'est donc quelque chose.

Pour utiliser votre exemple, nous pouvons produire le double graphique dans les étapes suivantes:

Étape 1: pour chaque face du graphique d'origine, créez un sommet

centroïdes et anneau extérieur

Notez que nous créons un "anneau" extérieur pour représenter le "sommet" le plus à l'extérieur - c'est ainsi que nous pouvons avoir un graphique plus joli à la fin, sans les bords courbés fous.

Étape 2: Pour chaque arête du graphique d'origine, connectez les deux faces-sommets avec une arête

De plus, vous devrez faire quelque chose pour que ces bords ne se chevauchent pas. L'écart entre 3 et 12 est particulièrement problématique. Ces nouveaux bords peuvent avoir besoin d'être pliés pour que cela soit possible. C'est ce que vous obtenez pour avoir un graphique concave.

bords

Étape 3: Jouer le risque

graphique en couleur

congusbongus
la source
Merci pour l'astuce. J'ai commencé une approche similaire avant mon truc voronoi mais je ne l'ai pas mis au point. Je vais le faire et publier mes résultats ensuite.
maggie
C'est intéressant aussi, si cela vous aide, essayez de chercher des informations sur la dualité voronoi-delaunay. C'est un bon début pour au moins le comprendre: scicomp.stackexchange.com/questions/771/…
Gustavo Maciel
1
Une question supplémentaire: quelle approche utiliseriez-vous si vous n'avez pas l'aide de sfdp? Existe-t-il une approche générale pour créer une représentation graphique appropriée pour obtenir les positions de nœuds nécessaires?
maggie
@maggie, vous voudrez quelque chose qui exécute des dispositions de graphes planaires . Ce n'est pas un problème trivial, et je ne peux pas recommander un package spécifique, mais il y a des options ici et ici .
congusbongus
1

Si la première image, où chaque point est un petit carré avec une certaine couleur, est ce que vous recherchez, vous devez construire la triangulation de Delaunay.

Blas Soriano
la source
1
Cela pourrait utiliser un peu plus de contenu pour rendre la réponse un peu plus concise.
Tom 'Blue' Piddock