2009-02-18 102 views
11

看到somesuggestions圖形,我不知道什麼是我的問題的最佳。爲網絡優化圖形繪製

我想渲染一個有向圖到一個顯示在瀏覽器中的servlet /圖片。應該有一些優化的位置。對Swing沒有依賴性是首選。算法並不重要,因爲圖的結構由業務邏輯決定。希望能夠向邊緣添加標籤。 這將是最佳的,如果我可以將其作爲png/svg服務。

你會推薦哪種圖書館/服務?

澄清:

1)現在的問題是關於圖像 - 像Directed Acyclic Graph - 不 - Charts

2)flot,谷歌圖表 - 不能繪製圖表,只有圖表,或者我錯過了什麼?

3)不,我不需要交互

4)graphviz的將是很好的,但格拉帕java庫是相當過時,在擺動/ AWT是建立。雖然在理論上可能會渲染圖像,但在服務器應用程序中這不是我最喜歡的方式。 5)如果使用在線服務,圖像不在本地託管,那將是很好的選擇。

編輯:添加鏈接到維基百科澄清圖形/圖長期

回答

3

除了等待數週聽到那將解決一行代碼所有問題的魔術框架,還有的只是寫一些代碼自己做你想要什麼其他的選擇...(我不是說這是10分鐘的工作,但可能是一兩天,並且你在兩週前發佈了你的問題......)

你有沒有看過,例如,在維基百科條目上Force-based algorithms - 它有僞代碼和一些可能有用的鏈接。

我假設它是佈局算法是這樣的問題,而不是創建一個BufferedImage,繪製其圖形上下文的事,PNG編碼併發送下來的插座。你真的不需要的那個框架,我不認爲這是位。

0

也許退房Google Charts

+1

哎不是一個壞建議:http://code.google.com/apis/chart/docs/gallery/graphviz.html – bergin 2011-02-24 10:52:52

8

看看graphviz

+0

您可能要添加的細節,runako提供 – 2009-03-01 00:43:20

-2

JFreeChart可能是您想要的方式,但是您可以區分圖表和圖形。也許你可以解釋一下你的意思。我通常使用這些術語的同義詞。 :)

JFreeChart具有良好的散點圖,條形圖和折線圖以及Pie和Dial等有趣的功能,因此它可能適用於您。

+0

ADDEN鏈接的問題,以澄清圖形/圖表差 – 2009-02-25 16:18:02

+0

這是有道理的。那麼,RegDwight建議的aiSee看起來是一個不錯的選擇,但它看起來是專有的。不知道這是否與你的情況猶太教。 – Drew 2009-02-25 17:06:19

5

Graphviz的點組件如何?它生成圖形(不是圖表),輸出到PNG和SVG,並支持標註邊緣。你可以掏出點來生成你需要的圖像,並返回一個引用它的img標籤。或者,您可以返回一個引用可生成必需圖形的URL(或檢索緩存副本)的img標記。這裏的點信息:

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

您還可以看看WebDot,這顯然是爲此而設計的:

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

0

您可以組合使用SVG與蠟染。我已經多次使用這個來顯示圖形。 Java 1.5的蠟染速度非常快。有了這個解決方案,您可以用Java編程您的圖表,而不依賴於Swing。您可以在需要的地方添加標籤,將其作爲Servlet託管並顯示爲png或svg。

您可以創建在SVG圖形(這是一個XML文檔)。
您可以使用Batik將SVG文檔轉換爲PNG/JPG圖像。
您可以使用Servlet將此圖像傳回瀏覽器。

在java中你建立一個SVG(= XML)文檔。對SVG圖形的樣品可以在這裏找到: Directed graph這裏:Simple directed graph

+0

第一個樣本已用GraphViz繪製。第二個與Inkscape。在調用Batik進行渲染之前,您是否有任何關於Java圖形佈局的建議? – dolmen 2010-09-05 07:10:11

+0

如何創建佈局取決於您要構建的圖形類型/種類。我的圖形非常結構化,可以使用具有x,y座標的網格進行計算。我爲addNode和connectNodes創建了一些計算方法。 – Edwin 2010-09-06 05:39:17

0

this question,特別是史蒂芬約prefuse答案。我讀過你不需要交互性,但預先填充仍然可能有用。

1

JPGD是Java中的Graphviz解析器。這是一個廢棄的小,但代碼很好,清晰,如果您發現錯誤,我相信作者會接受提供的修復程序。

雖然作爲解析器公佈,但它也是一個生成器。您可以將圖形構建爲Node和Edge對象的集合,然後使用Graph.toString()獲取.dot。以圖形的形式獲取它將成爲Graphviz點可執行文件的簡單外殼。

或者,點很容易產生自己。在最簡單的情況下,它只是一個寫一個盆栽頭

digraph myGraph { 

的事......接着每邊

node1 -> node2 ; 

一個邊緣清晰度......然後是右括號

} 
1

,所以我把alook在所有給定的解答和鏈接,它看起來像Prefuse/Flare意願的最佳選擇。 他們有非常吸引人的visialisations,再加上他們已經建立了對圖形的支持。

3

對於服務器端,嘗試JUNG,您可以針對Batik運行它,並製作出漂亮SVG或PNG文件。 JUNG有一個很好的設計和非常強大的佈局算法...

此外,由於你提到「這將是蠻好用的一個在線服務,graphviz的提供服務,稱爲webdot渲染圖。

還有其他沿着這條線,以及...例如http://graph.gafol.net/(似乎是向下)

客戶端:

  • 嘗試http://arborjs.org/爲最小(ISH)庫,是專注於佈局,使用這就是你喜歡更喜歡自己的渲染程序( div,canvas,svg,paper.js,processing ...等)。

  • 我也喜歡http://sigmajs.org/一個更完整的方法,建立觸摸支持,插件,文件格式等

2

您可以嘗試sigma.js:http://sigmajs.org/

這是在Javascript輕量級,開源庫顯示在Web上大圖。

3

我們爲這種需求創造mxGraph。我們在2006年沒有真正釋放出來,但過了好一會兒注意到這個問題...