2009-02-18 13 views
11

somesuggestions für Graphen gesehen hat, frage ich mich, was das Optimum für mein Problem.optimierte grafische Darstellung für die Web-Zeichnung

Ich möchte ein gerichtetes Diagramm zu einem Servlet/Bild, das im Browser angezeigt wird, rendern. Es sollte eine Art Positionsoptimierung geben. Eine Abhängigkeit von Swing wäre nicht bevorzugt. Algorithmen sind nicht wichtig, da die Struktur des Graphen von der Geschäftslogik bestimmt wird. Es wäre wünschenswert, Etiketten auch Kanten hinzufügen zu können. wäre es optimal, wenn ich dies als png/svg dienen könnte.

Welche Bibliothek/Service würden Sie empfehlen?

Präzisierungen:

1) Die Frage alles über Graphen ist - wie Directed Acyclic Graph - NICHT - Charts.

2) Flot, Google Charts - Graphen, Diagramme, oder habe ich etwas übersehen?

3) Nein, ich brauche die Interaktivität nicht

4) graphviz wäre schön, aber die Grappa Java-Bibliothek ist ziemlich veraltet und basiert auf Swing/AWT gebaut. Auch wenn es theoretisch möglich ist, Bilder zu spiegeln, wäre dies in einer Server-App nicht mein Lieblingsweg.

5) Es wäre in Ordnung, einen Onlinedienst zu verwenden, bei dem die Bilder nicht lokal gehostet werden.

edit: hinzugefügt Links zu Wikipedia Graph/chart Begriff

Antwort

3

Nicht nur Wochen warten, um über das Magic Framework zu hören, das alle Ihre Probleme in einer Codezeile lösen wird, gibt es auch die andere Möglichkeit, nur Code selbst zu schreiben, um genau das zu tun, was Sie wollen ... (Ich sage nicht, dass es 10 Minuten Arbeit ist, aber es ist wahrscheinlich ein oder zwei Tage, und du hast deine Frage vor zwei Wochen gepostet ...)

Habt ihr das zum Beispiel im Wikipedia-Eintrag gesehen? Force-based algorithms - es hat Pseudocode und ein paar Links, die hilfreich sein könnten.

Ich nehme an, es ist der Layout-Algorithmus, der das Problem ist, und nicht die Angelegenheit ein BufferedImage zu erstellen, Zeichnung zu seinem Grafikkontext, PNG-Codierung es und senden Sie es in den Sockel. Sie brauchen wirklich kein Framework für , dass Bit, glaube ich nicht.

+6

Da gewesen, das getan. Wenn Sie wirklich denken, dass jemand robustes, kraftgesteuertes Layout in nur zwei Tagen implementieren kann und am Ende etwas mit JViews oder yFiles (geschweige denn aiSee) erreicht, dann sind Sie ein Träumer. Das ist so, als würde Google Search erneut implementiert und nicht nur verwendet. –

+0

Meine Einschätzungen sind also mehr, als dass jemand, der an die Implementierung von Algorithmen gewöhnt ist, in ein paar Tagen etwas * akzeptables * und "tun was sie wollen" erhält (das Plakat erwähnt "eine Art Optimierung", aber das Problem der Integration in ihr Projekt) war auch wichtig). –

+0

Die Lösung, die ich anstrebe, ist, einen Wrapper für Prefuse zu schreiben, der png von einem meiner Servlets ausgibt. Ich habe keine Pläne, Algorithmen zu schreiben, die selbst Planargraph-Layouts erstellen. –

0

Vielleicht Besuche Google Charts zu klären?

+1

hey nicht so ein schlechter Vorschlag: http://code.google.com/apis/chart/docs/gallery/graphviz.html – bergin

8

Werfen Sie einen Blick auf graphviz

+0

Sie könnten die Details hinzufügen, die runako –

-2

JFreeChart könnte der Weg Sie gehen wollen, aber Sie machen einen Unterschied zwischen Diagramme und Grafiken. Vielleicht kannst du erklären, was du damit meinst. Ich habe diese Begriffe normalerweise synonym verwendet. :)

JFreeChart hat eine gute Streuung, Balken- und Liniendiagramme sowie Spaß diejenigen wie Pie und Dial so vielleicht wird es für Sie arbeiten.

+0

adden Links zur Frage zur Verfügung stellt, um Graph/Chart-Unterschied zu verdeutlichen –

+0

Das macht Sinn. Nun, aiSee, von RegDwight vorgeschlagen, scheint eine gute Wahl zu sein, aber es sieht so aus, als wäre es proprietär. Nicht sicher, ob dies mit Ihrer Situation koscher ist oder nicht. – Drew

5

Wie wäre es mit der Dot-Komponente von Graphviz? Es erzeugt Graphen (keine Diagramme), gibt PNG- und SVG-Signale aus und unterstützt die Beschriftung von Kanten. Sie können den Punkt mit einem Punkt versehen, um das gewünschte Bild zu generieren, und ein img-Tag zurückgeben, das darauf verweist. Alternativ können Sie ein img-Tag zurückgeben, das auf eine URL verweist, die das erforderliche Diagramm generiert (oder eine zwischengespeicherte Kopie abruft).Hier ist der Punkt Info:

http://www.graphviz.org/pdf/dotguide.pdf

Sie könnten auch einen Blick auf webdot nehmen, die offensichtlich für diesen Zweck ausgelegt ist:

http://www.graphviz.org/webdot/

0

Sie SVG in Kombination mit Batik verwenden können. Ich habe dies mehrmals zum Anzeigen von Grafiken verwendet. Batik mit Java 1.5 ist sehr schnell. Mit dieser Lösung können Sie Ihr Diagramm in Java ohne Abhängigkeit von Swing programmieren. Sie können Etiketten an den gewünschten Stellen hinzufügen, als Servlet hosten und als PNG oder SVG anzeigen.

Sie können die Grafiken in SVG erstellen (dies ist ein XML-Dokument).
Sie verwenden Batik, um das SVG-Dokument in ein PNG/JPG-Bild umzuwandeln.
Sie können ein Servlet verwenden, um dieses Bild zurück zum Browser zu streamen.

In Java erstellen Sie ein SVG (= XML) -Dokument. Directed graph und hier: Simple directed graph für diese

+0

Die erste Probe wurde mit GraphViz grafisch dargestellt. Der zweite mit Inkscape. Haben Sie Ratschläge für das Java-Diagramm-Layout, bevor Sie Batik zum Rendern aufrufen? – dolmen

+0

Wie das Layout erstellt wird, hängt davon ab, welche Art/Art von Diagramm Sie erstellen möchten. Meine Graphen waren sehr strukturiert und konnten mit einem Gitter mit x, y Koordinaten berechnet werden. Ich habe Methoden für addNode und connectNodes erstellt, die etwas berechnet haben. – Edwin

6

yFiles könnte nützlich sein, Proben für die SVG-Grafiken können hier gefunden werden.

0

Siehe this question, insbesondere Stephan's Antwort über Vorverwendung. Ich lese, dass Sie keine Interaktivität benötigen, aber die Vorabsicherung kann immer noch nützlich sein.

1

JPGD ist ein Graphviz-Parser in Java. Es ist ein kleines aufgegeben, aber der Code ist nett und klar, und wenn Sie Fehler finden, bin ich sicher, dass der Autor beigetragene Korrekturen akzeptieren würde.

Obwohl als Parser beworben, ist es auch ein Generator. Sie können Graphs als Sammlungen von Node- und Edge-Objekten erstellen und dann mithilfe von Graph.toString() .dot abrufen. Dies als Grafik zu erhalten, wäre eine einfache Shell für die ausführbare Datei von Graphviz.

Alternativ ist dot sehr einfach selbst zu generieren. Im einfachsten Fall ist es nur eine Frage der eine Topf Header schreiben

digraph myGraph { 

... gefolgt von einer Randschärfe pro Kante

node1 -> node2 ; 

... gefolgt von einer schließenden Klammer

} 
1

so nahm ich alook an alle gegebenen Antworten und Links, es sieht aus wie Prefuse/Flare wird von der optimalen Wahl. sie haben sehr ansprechende visialisations, plus sie haben Unterstützung für Graphen eingebaut.

3

Für serverside, versuchen Sie JUNG, können Sie es gegen Batik ausführen und schöne SVG oder PNG-Dateien zu produzieren. JUNG hat ein schönes Design und sehr leistungsstarke Layout-Algorithmen ...

Auch da Sie erwähnen, dass „es gut wäre, einen Online-Service zu verwenden“, einen Dienst graphviz bietet webdot namens Graphen zu machen.

Es gibt andere entlang dieser Linie auch ... z. http://graph.gafol.net/ (scheint nach unten zu sein)

Client-Seite:

  • Versuchen http://arborjs.org/ für eine minimale (ish) Bibliothek ist es Layout gewidmet, verwenden Sie dies können Sie Ihre eigene Rendering-Routinen bevorzugen mögen (Div, Leinwand, Svg, paper.js, Verarbeitung ... usw.).

  • Ich mag auch http://sigmajs.org/ für eine vollständigere Ansatz, bauen in Touch-Unterstützung, Plug-ins, Dateiformate usw.

2

Interessanterweise hat das Eclipse-Projekt eine SWT/JFace Komponente/Rahmen anzeigen kann und Erzeugen (Import/Export) Graphviz des 'DOT' -Format, in reinem Java:

ZEST (home page & download links)

Siehe http://wiki.eclipse.org/Graphviz_DOT_as_a_DSL_for_Zest für Verwendungsbeispiele.

Obwohl ZEST als Eclipse-Plugin angepriesen wird, scheint es, dass die DOT-Manipulations-APIs eigenständig und extern zu einer Eclipse-Installation verwendet werden können.

Prost

Reiche

2

Sie können sigma.js versuchen: http://sigmajs.org/

Es ist eine leichte, Open-Source-Bibliothek in Javascript auf der Web große Graphen angezeigt werden soll.

+0

Wirklich große Bibliothek, danke – Kerb

3

Wir erstellen mxGraph für solche Anforderungen. Wir haben es tatsächlich im Jahr 2006 veröffentlicht, aber es dauerte eine Weile, um diese Frage zu bemerken ...

Verwandte Themen