我正在尝试使用Python在我的Django Web应用程序中进行一些交互式图形可视化。我找到了Graphviz并且能够使用Pydot(Graphviz的点语言的Python接口)在我的应用程序上输出静态图形(作为.png图像)。
但是,我希望使我的图形更具交互性,例如能够在将鼠标移到其上时突出显示节点,使节点可点击,将节点拖动到其他位置并放大图形。
我有没有办法在Graphviz中做到这一点?或者一般来说,有没有办法为我的Django应用程序制作交互式图形而无需使用Flash?我不想使用闪存,因为我不熟悉它,因为我想想象一个相当大的数据集。
答案 0 :(得分:17)
试试The Javascript Infovis Toolkit。它全部在浏览器画布中实现,因此不需要Flash,只有一个支持<canvas>
标记的体面浏览器。图形可视化示例为here,here和here,其他演示为here。
答案 1 :(得分:12)
有Canviz(source)。但是,节点还没有可点击(它们是使用图像映射的旧版本。代码库已经更改,现在使用javascript在客户端进行渲染,这就是为什么还没有重新启用可点击链接。
这是我发现的最好的,但是他们还有很多其他的。
mxGraph(非自由)
答案 2 :(得分:8)
您可以使用D3.js进行图形可视化(请参阅here for examples of graph visualizations in D3js,然后查看How to Make an Interactive Network Visualization)。
对于后端(如果需要的东西不仅仅是一个json文件来表示图形 - 即它是否很大),那么你可以使用Python模块来表示图形NetworkX。
旁注,这里是my simple interactive graph visualization example:
答案 3 :(得分:3)
只需使用DOT和HTML即可完成此类操作。
生成客户端地图并将其覆盖在PNG图像上。 (将地图代码插入HTML页面。)
dot test.dot -Tpng -o test.png -Tcmapx -o test.map
SVG导出可以直接点击。
答案 4 :(得分:1)
似乎一种适合您尝试做的方法可能是在浏览器中使用svg和/或javascript。我认为大多数现代浏览器都支持SVG,并允许你做一些非常酷的交互式图形。服务器可以提供渲染图形所需的数据点的json提要。我不知道可用的工具,但我已经看到一些非常酷的图形演示,无需通过客户端方法构建。
作为替代方案,您可以预渲染用户可能会查看的一组图形图像,然后在用户与图形交互时获取这些图形。如果图形不经常更改,并且用户所做的更改次数很少,则可能会有效,但每次图形更改时都必须重新渲染。
答案 5 :(得分:1)
我已经做了你不久前想做的事。上下文可视化一个粗糙的SalesForce架构。
首先,graphviz只适用于绘图,而不适用于绘图。你可以生成SVG,但是我无法让它与I.E.一起工作。经过相当多的努力(结果是徒劳无功)。
我发现这个Java Applet ZGRViewer已经足够了,虽然applet对我的品味感觉有点过时,但它在浏览器上运行得非常好。
我基本上手工编写了一个调用生成点文件的服务的进程,然后运行它们思考(dotty,是吗?) - visulazation applet读取本机点文件格式。
我也遇到了一些我想到的V2(从未发生过) - 它是AJAX控制工具包的一部分 - Seadragon。
如果你想在ASP.NET中看到代码,我可以发布它。