Web 应用程序中的交互式 Graphviz 图表

问题描述 投票:0回答:6

我正在尝试使用 Python 在 Django Web 应用程序中制作一些交互式图形可视化。我找到了 Graphviz,并且能够使用 Pydot(Graphviz 点语言的 Python 接口)在我的应用程序上输出静态图(作为 .png 图像)。

但是,我希望使我的图表更具交互性,例如当将鼠标移到节点上时能够突出显示节点,使节点可单击,将节点拖动到不同的位置并缩放图表。

我可以在 Graphviz 中做到这一点吗?或者一般来说有没有办法为我的 Django 应用程序制作交互式图表而无需使用 Flash?我不想使用 Flash,因为我对它不太熟悉,而且我想可视化相当大的数据集。

django web-applications graph graphviz pydot
6个回答
19
投票

尝试Javascript Infovis 工具包。这一切都是在浏览器画布中实现的,因此不需要 Flash,只需要一个支持

<canvas>
标签的不错的浏览器即可。图形可视化示例是这里这里这里,其他演示是这里


12
投票

Canviz来源)。但是,节点尚不可单击(它们处于使用图像映射的旧版本中。代码库已更改,现在使用 JavaScript 进行客户端渲染,这就是尚未重新启用可单击链接的原因。

这是我发现的最好的,但是还有很多其他的。

mxGraph(非免费)


11
投票

您可以使用 D3.js 进行图形可视化(请参阅 此处了解 D3js 中的图形可视化示例,并查看 如何制作交互式网络可视化)。

对于后端(如果需要的不仅仅是一个 json 文件来表示图形 - 即如果它很大),那么您可以使用用于图形的 Python 模块,NetworkX

旁注,这是我的简单交互式图形可视化示例

enter image description here


5
投票

您只需使用 DOT 和 HTML 就可以非常简单地完成类似的操作。

生成客户端地图并将其覆盖在您的 PNG 图像上。 (将地图代码插入HTML页面。)

dot test.dot -Tpng -o test.png -Tcmapx -o test.map

SVG 导出可直接点击。


1
投票

似乎适合您尝试做的方法可能是在浏览器和/或 javascript 中使用 svg 。 我认为大多数现代浏览器都支持 SVG,并且允许您制作一些非常酷的交互式图表。 服务器可以提供呈现图形所需的数据点的 json 提要。 我不知道可用的工具,但我见过一些非常酷的图形演示,这些演示是通过客户端方法在没有闪存的情况下构建的。

作为替代方案,您可以预先渲染一堆用户可能会查看的图形图像,然后在用户与图形交互时获取这些图像。 如果图表不经常更改并且用户所做的更改数量很小,那么这可能会起作用,但每次图表更改时都必须重新渲染。


1
投票

不久前我已经做了你想做的事。 背景是一个粗糙的销售队伍模式的可视化。

首先,graphviz 只适合绘图,而不适合绘图。 你可以生成 SVG,但我无法让它与 I.E. 一起使用。经过大量(结果是徒劳的)努力。

我确实发现这个 Java Applet ZGRViewer 就足够了,虽然小程序对我来说有点过时,但它在跨浏览器上运行得很好。

我基本上手动编写了一个调用服务的进程,该服务生成点文件并运行它们(dotty,是思考吗?) - 可视化小程序读取本机点文件格式。

我还遇到了一些我想过的 V2 的事情(但从未发生过) - 它是 AJAX 控制工具包的一部分 - Seadragon

如果你想看ASP.NET中的代码,我可以发布它。

© www.soinside.com 2019 - 2024. All rights reserved.