2009-05-20 10 views
4

J'essaie d'utiliser GraphPlot fonction pour construire un Graph, où chaque nœud est une image. Je voulais afficher l'image comme mon sommet. Est-ce que quelqu'un sait comment faire cela?Mathematica GraphPlot avec des images

J'ai essayé quelque chose comme ceci:

GraphPlot[ Map[If[# > 2.0 , 0, 1] &, 
imgDistT, {2}], 
VertexRenderingFunction -> (Inset[imgs[[#2]], #1, Center] &) ] 

Mais cela ne fonctionne pas. imgs est ma liste d'images correspondant à chaque numéro de sommet.

Comme une vérification de bon sens, si je fais ceci:

GraphPlot[ 
Map[If[# > 2.0 , 0, 1] &, imgDistT, {2}], 
VertexRenderingFunction -> (Inset[Text[#2], #1, Center] &) ] 

puis qui fonctionne et il me montre le nombre de sommets à chaque noeud.

Répondre

4
imgs = ExampleData /@ ExampleData["TestImage"]; 
GraphPlot[{1 -> 4, 1 -> 5, 2 -> 3, 2 -> 4, 2 -> 5, 3 -> 4, 3 -> 5}, 
    VertexRenderingFunction -> (Inset[Image[imgs[[#2]], ImageSize -> 100], #1] &)] 

enter image description here

Modifier

- plaisanterie de notation infixée retirée -

+1

Je suis sûr que vous pouvez presser dans une petite notation infixe supplémentaire si vous avez essayé ... – Simon

+0

Honnêtement, je ne comprends pas l'obsession de l'infixe. Il est maintenant plus d'une blague que toute autre chose: P – abcd

+0

@yoda Yep. Je vais terminer mes messages d'infixe ici. Je considère juste que la notation '~' est déroutante et je l'utilise peu et seulement pour les opérateurs _spelled_ de cette façon (comme un b PLUS, un OR b, etc.) ou ceux comme JOIN avec des significations très faciles à comprendre. Les programmes Mathematica sont généralement difficiles à suivre sans complexité supplémentaire. –

2

Deux questions possibles:

  • Il ressemble à votre graphique, Map[If[# > 2.0 , 0, 1] &, imgDistT, {2}], contiendra des zéros et ceux mais des zéros sont des indices non valides pour le tableau imgs

  • Les images peuvent ne pas apparaître correctement en raison Pour mettre à l'échelle des problèmes, par exemple, ils peuvent être vraiment gros, seule la partie blanche peut être visible. Essayez de spécifier une taille d'image explicite.

Quelle est la sortie de

GraphPlot[Map[If[# > 2.0 , 0, 1] &, imgDistT, {2}], 
VertexRenderingFunction -> (Module[{tmp = 
     Inset[Image[imgs[[#2]], ImageSize -> 10], #1, Center]}, 
    Print[tmp]; tmp] &)] 

?