Frage

Dies ist ein sehr spezifischer inforgraphic challange altough die fundemental Frage ist, wie Sie bögen zwischen Worten matplotlib, cario oder einen anderen Python libary bauen Sie.

Bei einer der folgenden Datenstruktur.

ich, du, 7 | ich, Apfel, 9 | Apfel, sie, 1 | Fahrrad, me, 5

Namen würden horizontal die Namen mit den meisten Beziehungen größer als die andere angezeigt werden, und dann würde es gewichtet Archs zwischen den Namen werden. Ein 10 gewichtete Bogen würde doppelt so dick wie ein 5 gewichtete Bogen sein.

Inspiration kommt aus: ähnlich diverstiy. http://similardiversity.net/

Lassen Sie die Herausforderung beginnen!

War es hilfreich?

Lösung

Es gibt mehrere Bibliotheken, mindestens eines davon auf Matplotlib beruht, die das tun, was Sie wollen. Ich empfehle NetworkX (www.networkx.lanl.gov) Ihre Graphenstruktur zu bauen, und welche können Sie dann zum Plotten verwenden, um die entsprechenden Matplotlib Methoden aufrufen. NetworkX und Matplotlib arbeiten sehr gut zusammen.

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()

Wie Sie sehen können, können Sie die Kanten durch Anlegen eines Faktor skalieren könnte das ‚Gewicht‘ Parameter zu einem der ‚Kante‘ Methoden zu variieren, genauso wie ich es für Knoten Skalierung.

Ich würde auch empfehlen pygraphviz (natürlich als Backend mit graphviz). Es ist sehr ähnlich zu Netwworkx (gleicher Hauptentwickler).

Andere Tipps

matplotlib ist nicht die richtige Bibliothek hier, da es nicht eine Allzweck-Grafik-Bibliothek ist. Was Sie hier brauchen, ist entweder so etwas wie Kairo oder viel einfacher, können Sie mit den Grafikfunktionen tun jeden GUI-Toolkit, wie PyQt. Ein weiterer möglicher Ansatz ist PyGame, die auch gute Zeichnung Fähigkeiten hat.

Wenn Sie ein Beispiel möchten, finden Sie in diesem Kairo Proben Seite, die erste Probe - Bogen. Sie schreiben Sie einfach den Text Worte und dann für einen Bogen von beliebiger Breite und Farbe zwischen ihnen den Bogen-Code verwenden.

Ich weiß nicht wirklich sehen, wo die Schwierigkeit oder Herausforderung. Alles, was Sie brauchen, ist eine Grafikbibliothek, den Text und Halbkreise, die möglich ist, in so ziemlich alles zeichnen. Es besteht keine Notwendigkeit für Bezier-Kurven. Zum Beispiel könnten Sie einfach eine SVG-Datei erstellen (dann brauchen Sie nicht einmal eine Bibliothek und können diese schön in einer Webseite einbetten und einige JavaScript verwenden, um es interaktiv zu machen).

Der eigentliche Plot ist einfach: der Mittelpunkt eines Kreises in der Mitte zwischen den beiden Worten ist, wobei der Radius der halben Abstand zwischen ihnen ist. Sie können dann den Hub einstellen andere Mengen zu reflektieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top