Matplotlib:Web 服务器上的交互式绘图

Posted

技术标签:

【中文标题】Matplotlib:Web 服务器上的交互式绘图【英文标题】:Matplotlib: interactive plot on a web server 【发布时间】:2011-03-22 06:11:51 【问题描述】:

我目前在我的 django 网站上使用 Open Flash Chart 2,但我发现它的可定制性不足。 (如果您想要通常的条形图、饼图,那就太好了,但是自制形状呢……)。虽然它是开源的,但我不想深入研究 Flex 代码。

我对 matplotlib 思考了很多,但 documentation 在 Web 应用程序开发方面相当糟糕。

有人在他的网络应用程序中使用 matplotlib 吗? 我会很感激这些网站上的链接,以找出可以实现的目标。 谢谢

【问题讨论】:

【参考方案1】:

如果您正在 Web 应用程序中寻找类似 flash 的交互性,matplotlib 可能不是您想要的。不过,渲染静态图像以在 Web 应用程序中提供服务是很好的。 (而且非常灵活)

但是,最近有很多关于使 matplotlib 更面向 Web 交互性的发展。看看新的 html5/Canvas 后端。 http://code.google.com/p/mplh5canvas/ 还没完结,不过还是值得一玩的。

【讨论】:

+1 来自我;不知道 HTML 5/Matplotlib 项目,虽然我很高兴看到它。 谢谢乔。你知道这个 mplh5canvas 是否会让我在 web 应用程序上使用 ginput() 函数? 使用 matplotlib 1.3 中包含的新webagg,您可以在浏览器中使用交互式绘图,我想应该可以在网站中使用它们(但没有尝试过也没有见过示例)。 @jorgeca - 是的,mplh5canvas 或多或少已经死了。 webagg 在这方面是半官方的前进方向(在我回答这个问题时它还不存在)。但是,webagg 依赖于运行活动的 Python 进程来渲染图像。它基本上是一个类似 VNC 的协议。光栅化的图像来回传输。它不适合嵌入网页中。 @jorgeca - 这里的决定背后有更多细节:mdboom.github.io/blog/2012/10/11/… 基本上,如果您要绘制大量数据,将数据的 json 文件推送到浏览器需要更多带宽,而不仅仅是推送渲染图像。【参考方案2】:

您可以使用 MPLD3 将您现有的 matplotlib 内容导出到浏览器。 Matplotlib 本身非常强大,尽管我同意文档不是很广泛。 我只是通过尝试一些东西并在网上找到示例来学习它。 'matplotlib example X',其中 X 有点关于你试图绘制的内容,在网上找到数量惊人的代码。

【讨论】:

【参考方案3】:

我从来没有使用过matplotlib,但是使用Google 的图表API http://code.google.com/intl/pl-PL/apis/chart/ 来制作图表怎么样?

【讨论】:

这看起来会比尝试使用 matplotlib 生成图像要好很多 ... 链接失效了?【参考方案4】:

用当前的事态复活一个老问题。截至 2013 年秋季,现在有一个在基于 Tornado 的网络服务器中嵌入 matplotlib 的 WebAgg 后端的示例:https://github.com/matplotlib/matplotlib/blob/master/examples/user_interfaces/embedding_webagg.py

这利用 websockets 将图形更新发送到浏览器,这允许在客户端呈现非常好的交互式绘图。这意味着服务器上不会生成任何图像!

【讨论】:

【参考方案5】:

这个工具不错,但如果它与 matplotlib 一起使用,那就太棒了。http://www.highcharts.com/

【讨论】:

以上是关于Matplotlib:Web 服务器上的交互式绘图的主要内容,如果未能解决你的问题,请参考以下文章

PySimpleGUI 中的交互式 matplotlib 绘图

使用下拉和 matplotlib 绘制交互式绘图

使用 matplotlib 在 Spyder 中进行交互式(?)绘图

如何在 Spyder/IPython/matplotlib 中再次获得交互式绘图?

Python之神奇的绘图库matplotlib

Python 和 Matplotlib:在 Jupyter Notebook 中制作交互式 3D 绘图