我正在尝试使用 Python 在 Django Web 应用程序中制作一些交互式图形可视化。我找到了 Graphviz,并且能够使用 Pydot(Graphviz 点语言的 Python 接口)在我的应用程序上输出静态图(作为 .png 图像)。
但是,我希望使我的图表更具交互性,例如当将鼠标移到节点上时能够突出显示节点,使节点可单击,将节点拖动到不同的位置并缩放图表。
我可以在 Graphviz 中做到这一点吗?或者一般来说有没有办法为我的 Django 应用程序制作交互式图表而无需使用 Flash?我不想使用 Flash,因为我对它不太熟悉,而且我想可视化相当大的数据集。
尝试Javascript Infovis 工具包。这一切都是在浏览器画布中实现的,因此不需要 Flash,只需要一个支持
<canvas>
标签的不错的浏览器即可。图形可视化示例是这里、这里和这里,其他演示是这里。
您可以使用 D3.js 进行图形可视化(请参阅 此处了解 D3js 中的图形可视化示例,并查看 如何制作交互式网络可视化)。
对于后端(如果需要的不仅仅是一个 json 文件来表示图形 - 即如果它很大),那么您可以使用用于图形的 Python 模块,NetworkX。
旁注,这是我的简单交互式图形可视化示例:
您只需使用 DOT 和 HTML 就可以非常简单地完成类似的操作。
生成客户端地图并将其覆盖在您的 PNG 图像上。 (将地图代码插入HTML页面。)
dot test.dot -Tpng -o test.png -Tcmapx -o test.map
SVG 导出可直接点击。
似乎适合您尝试做的方法可能是在浏览器和/或 javascript 中使用 svg 。 我认为大多数现代浏览器都支持 SVG,并且允许您制作一些非常酷的交互式图表。 服务器可以提供呈现图形所需的数据点的 json 提要。 我不知道可用的工具,但我见过一些非常酷的图形演示,这些演示是通过客户端方法在没有闪存的情况下构建的。
作为替代方案,您可以预先渲染一堆用户可能会查看的图形图像,然后在用户与图形交互时获取这些图像。 如果图表不经常更改并且用户所做的更改数量很小,那么这可能会起作用,但每次图表更改时都必须重新渲染。
不久前我已经做了你想做的事。 背景是一个粗糙的销售队伍模式的可视化。
首先,graphviz 只适合绘图,而不适合绘图。 你可以生成 SVG,但我无法让它与 I.E. 一起使用。经过大量(结果是徒劳的)努力。
我确实发现这个 Java Applet ZGRViewer 就足够了,虽然小程序对我来说有点过时,但它在跨浏览器上运行得很好。
我基本上手动编写了一个调用服务的进程,该服务生成点文件并运行它们(dotty,是思考吗?) - 可视化小程序读取本机点文件格式。
我还遇到了一些我想过的 V2 的事情(但从未发生过) - 它是 AJAX 控制工具包的一部分 - Seadragon。
如果你想看ASP.NET中的代码,我可以发布它。