11

看过一些关于图表的 建议后,我想知道最适合我的问题的是什么。

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

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

澄清:

1)问题都是关于 Graphs - like Directed Acyclic Graph - NOT - Charts的。

2)flot,Google Charts - 无法绘制图表,只能绘制图表,还是我错过了什么?

3)不,我不需要交互

4) graphviz 会很好,但是 grappa java 库已经过时了,并且是建立在 swing/awt 之上的。虽然理论上可以将摇摆渲染到图像上,但在服务器应用程序中这不是我最喜欢的方式。

5) 可以使用不在本地托管图像的在线服务。

编辑:添加了指向 Wikipedia 的链接以阐明图形/图表术语

4

16 回答 16

8

看看graphviz

于 2009-02-18T17:21:40.037 回答
6

yFiles可能对此有用。

于 2009-02-28T19:27:01.463 回答
5

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

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

您还可以查看 WebDot,它显然是为此目的而设计的:

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

于 2009-02-25T16:34:10.670 回答
3

试试aiSee。它被各种基于 Web 的应用程序用于数据挖掘静态程序分析矩阵可视化网络分析等等。它也被一些MediaWikis用作他们的图形布局后端。

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

于 2009-02-20T20:58:54.710 回答
3

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

例如,您是否看过维基百科关于基于力的算法的条目——它有伪代码和一些可能有用的链接。

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

于 2009-03-03T00:18:36.800 回答
3

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

此外,由于您提到“使用在线服务会很好”,graphviz 提供了一个名为webdot的服务来呈现图形。

沿着这条线还有其他......例如http://graph.gafol.net/(似乎已经关闭)

客户端:

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

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

于 2009-07-23T12:33:52.580 回答
3

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

于 2013-01-23T20:02:07.597 回答
2

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

ZEST(主页和下载链接)

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

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

干杯

富有的

于 2011-11-06T23:44:23.593 回答
2

你可以试试 sigma.js:http ://sigmajs.org/

它是一个轻量级的 Javascript 开源库,用于在 Web 上显示大型图形。

于 2012-04-25T22:35:19.157 回答
1

JPGD是 Java 中的 Graphviz 解析器。它有点被遗弃了,但代码很好而且清晰,如果你发现错误,我相信作者会接受贡献的修复。

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

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

digraph myGraph {

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

node1 -> node2 ;

...后跟一个右大括号

}
于 2009-03-02T09:37:00.803 回答
1

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

于 2009-03-02T23:15:56.077 回答
0

也许看看谷歌图表

于 2009-02-18T17:20:18.417 回答
0

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

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

在 java 中,您构建一个 SVG(=XML) 文档。可以在此处找到 SVG 图的示例 :有向和此处:简单有向图

于 2009-02-25T17:03:01.117 回答
0

看到这个问题,尤其是斯蒂芬关于 prefuse 的回答。我读到您不需要交互性,但 prefuse 仍然可能有用。

于 2009-03-02T09:27:07.647 回答
-2

我可以全心全意地推荐flot - 太棒了!

请参阅此处的示例

于 2009-02-18T17:28:05.230 回答
-2

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

JFreeChart 有很好的散点图、条形图和折线图,还有像 Pie 和 Dial 这样有趣的图,所以也许它对你有用。

于 2009-02-25T14:38:45.050 回答