2009-02-18 71 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年没有真正释放出来,但过了好一会儿注意到这个问题...