Question

Ceci est un challange inforgraphic très spécifique barbante la question est de savoir comment construire fundemental-vous entre les mots en utilisant archs matplotlib, Cario ou un autre libary python.

Compte tenu de la structure de données suivante.

moi, vous, 7 | moi, pomme, 9 | pomme, vous, 1 | vélo, moi, 5

Les noms seront affichés horizontalement les noms avec les plus grandes relations que les autres et alors il y aurait pondérés entre les archs noms. A 10 arc pondéré serait deux fois l'épaisseur d'un 5 arc pondéré.

L'inspiration vient de: diverstiy similaire. http://similardiversity.net/

Laissez le challange commencer!

Était-ce utile?

La solution

Il existe plusieurs bibliothèques, au moins un qui repose sur Matplotlib, qui fera ce que vous voulez. Je recommande NetworkX (www.networkx.lanl.gov) pour construire votre structure graphique, et que vous pouvez ensuite utiliser pour appeler les méthodes Matplotlib pertinentes pour tracer. NetworkX et Matplotlib fonctionnent très bien ensemble.

import networkx as NX
import matplotlib.pyplot as PLT
Gh = NX.Graph()
Gh.add_edge("You", "Bike", weight=1.0)
Gh.add_edge("Bike", "Apple", weight=0.9)
Gh.add_edge("Me", "Bike", weight=1.1)
all_nodes = Gh.nodes()
# to scale node size with degree:
scaled_node_size = lambda(node) : NX.degree(Gh, node) * 700
position = NX.spring_layout(Gh)    # just choose a layout scheme
NX.draw_networkx_nodes(Gh, position, node_size=map(scaled_node_size, all_nodes))
NX.draw_network_edges(Gh, position, Gh.edges(), width=1.0, alpha=1.0, edge_color="red")
# now for the Matplotlib part:
PLT.axis("off")
PLT.show()

Comme vous pouvez le voir, vous pouvez escalader les bords en appliquant un facteur pour faire varier le paramètre « poids » à l'une des méthodes « de pointe », de la même façon que je l'ai fait pour mise à l'échelle du nœud.

Je recommande également pygraphviz (évidemment en utilisant graphviz comme back-end). Il est très similaire à Netwworkx (même développeur principal).

Autres conseils

matplotlib n'est pas la bibliothèque ici, puisque ce n'est pas une bibliothèque graphique à usage général. Qu'est-ce que vous avez besoin ici est soit quelque chose comme Caire , ou beaucoup plus simple, vous pouvez faire avec les capacités graphiques d'une boîte à outils de l'interface graphique, comme PyQt. Une autre approche possible est PyGame, qui a de bonnes capacités de dessin aussi bien.

Si vous voulez un exemple, voir cette échantillons Le Caire, le premier échantillon - arc. Vous venez d'écrire les mots de texte, puis utilisez le code d'arc pour un arc de toute la largeur et la couleur entre eux.

Je ne vois pas vraiment où la difficulté ou le défi est. Tout ce que vous avez besoin est une bibliothèque graphique qui peut dessiner le texte et les cercles demi, ce qui est possible dans à peu près tout. Il n'y a pas besoin de courbes de Bézier. Par exemple, vous pouvez simplement créer un fichier SVG (vous ne même pas besoin de bibliothèque et peut bien intégrer cela dans une page Web et d'utiliser certains JavaScript afin de le rendre interactif).

Le tracé réel est simple: le centre d'un cercle est au milieu entre les deux mots, le rayon est la moitié de la distance entre eux. Vous pouvez alors régler la course pour refléter d'autres quantités.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top