优化的网络图形绘制

时间:2009-02-18 17:15:57

标签: java graph server-side graph-layout

看过some suggestions图表,我想知道什么是我的问题的最佳选择。

我想将有向图呈现给浏览器中显示的servlet /图片。应该有某种优化的位置。不依赖于Swing是首选。算法并不重要,因为图的结构由业务逻辑决定。期望能够向边缘添加标签。 如果我可以将其作为png / svg服务,那将是最佳的。

您会推荐哪种图书馆/服务?

澄清:

1)问题是关于图表的问题 - 如Directed Acyclic Graph - NOT - Charts

2)flot,谷歌图表 - 不能绘制图表,只能绘制图表,或者我错过了什么?

3)不,我不需要互动

4)graphviz会很好,但格拉巴java库已经过时了,并且是基于swing / awt构建的。虽然从理论上讲可能会对图像进行摆动,但在服务器应用程序中这不是我最喜欢的方式。

5)使用不在本地托管图像的在线服务会很好。

编辑:添加指向维基百科的链接以澄清图表/图表术语

16 个答案:

答案 0 :(得分:8)

查看graphviz

答案 1 :(得分:6)

yFiles可能对此有用。

答案 2 :(得分:5)

Graphviz的点组件怎么样?它生成图形(不是图表),输出到PNG和SVG,并支持标记边缘。你可以用shell来生成你需要的图像,然后返回一个引用它的img标签。或者,您可以返回一个img标记,该标记引用将生成必需图形(或检索缓存副本)的URL。这是点信息:

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

您可能还会看一下WebDot,它显然是为此目的而设计的:

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

答案 3 :(得分:3)

试试aiSee。它被各种基于网络的应用程序用于data miningstatic program analysismatrix visualizationnetwork analysis等等。它也被一些MediaWikis用作图形布局后端。

他们在aiSee.com上有一个庞大的sample graphs数据库。看看这个。它支持边缘标签,导出到映射的SVG和HTML,并且不依赖于Swing。

答案 4 :(得分:3)

除了等待几个星期才能听到魔法框架将在一行代码中解决所有问题之外,还有另外一种选择就是自己编写一些代码来完成你想要的......(我不是说这是10分钟的工作,但可能是一两天,你在两周前发布了你的问题......)

有没有看过,例如,在Force-based algorithms上的维基百科条目 - 它有伪代码和一些可能有帮助的链接。

我假设它是布局算法的问题,而不是创建BufferedImage,绘制到图形上下文,PNG编码并将其发送到套接字的问题。你真的不需要那个位的框架,我不认为。

答案 5 :(得分:3)

对于服务器端,请尝试JUNG,您可以针对Batik运行它并生成漂亮的SVG或PNG文件。 JUNG有一个很好的设计和非常强大的布局算法......

另外,既然你提到“可以使用在线服务,graphviz会提供一个名为webdot的服务来呈现图形。< / p>

此行还有其他人......例如http://graph.gafol.net/(似乎已经失败)

客户端:

  • 尝试http://arborjs.org/寻找一个专门用于布局的最小(ish)库,使用这个你喜欢自己的渲染例程(div,canvas,svg,paper.js,处理..等等。)

  • 我也喜欢http://sigmajs.org/更完整的方法,内置触控支持,插件,文件格式等。

答案 6 :(得分:3)

我们为此类要求创建mxGraph。我们确实在2006年发布了它,但花了一段时间才注意到这个问题......

答案 7 :(得分:2)

有趣的是,Eclipse项目有一个SWT / JFace组件/框架,能够在纯Java中显示和生成(导入/导出)Graphviz的'DOT'格式:

ZEST (home page & download links)

有关使用示例,请参阅http://wiki.eclipse.org/Graphviz_DOT_as_a_DSL_for_Zest

虽然ZEST被吹捧为Eclipse插件,但似乎DOT操作API可以独立使用,也可以在Eclipse安装外部使用。

干杯

答案 8 :(得分:2)

您可以尝试sigma.js:http://sigmajs.org/

它是Javascript中的一个轻量级开源库,可以在Web上显示大图。

答案 9 :(得分:1)

JPGD是Java中的Graphviz解析器。这是一个放弃了,但代码很好而且清晰,如果你发现错误,我肯定作者会接受提供修复。

虽然宣传为解析器,但它也是一个生成器。您可以将Graphs构建为Node和Edge对象的集合,然后使用Graph.toString()获取.dot。将此作为图形将是Graphviz点可执行文件的简单外壳。

或者,点很容易自己生成。在最简单的情况下,只需要编写一个封装标题

digraph myGraph {

...后跟每条边的一个边定义

node1 -> node2 ;

......接着是一个右大括号

}

答案 10 :(得分:1)

所以我看了所有给定的答案和链接,看起来Prefuse / Flare将是最佳选择。 它们具有非常吸引人的可视化效果,而且它们内置了对图形的支持。

答案 11 :(得分:0)

也许看看Google Charts

答案 12 :(得分:0)

您可以将SVG与Batik结合使用。我已多次使用它来显示图形。使用Java 1.5的Batik非常快。使用此解决方案,您可以使用Java对图形进行编程,而不依赖于Swing。您可以在需要的位置添加标签,将其作为Servlet托管并将其显示为png或svg。

您可以在SVG中创建图形(这是一个XML文档) 您可以使用Batik将SVG文档转换为PNG / JPG图像 您可以使用Servlet将此图像流回浏览器。

在java中,您构建了一个SVG(= XML)文档。 SVG图的样本可以在这里找到: Directed graph和此处:Simple directed graph

答案 13 :(得分:0)

this question,特别是Stephan关于prefuse的回答。我读到你不需要交互性,但预熔也可能有用。

答案 14 :(得分:-2)

我可以全心全意地推荐flot - 优秀!

请参阅examples here

答案 15 :(得分:-2)

JFreeChart可能是您想要的方式,但您可以区分图表和图表。也许你可以解释一下你的意思。我通常使用这些术语同义词。 :)

JFreeChart有很好的散点图,条形图和折线图以及像Pie和Dial这样有趣的图表,所以它可能适合你。