【问题标题】:Is there a way to create interactive plots (a la D3) in IPython notebooks?有没有办法在 IPython 笔记本中创建交互式绘图(a la D3)?
【发布时间】:2013-07-03 05:24:50
【问题描述】:

我找到了这两个答案: Animated graphs in ipython notebook , How to grab matplotlib plot as html in ipython notebook?

但它们不涉及交互性。我想显示一个带有 2-3 条曲线的图,并让用户悬停这些曲线以接收更多详细信息或控制用于从组合框生成这些曲线的参数

【问题讨论】:

    标签: ipython-notebook


    【解决方案1】:

    在iPython: Manipulate-like command查看以下答案。

    以及以下两个方向:

    1. IPython interact/ive 在 IPython - The Attributes ofSoftware and How They Affect Our Work - Brian Granger 附近 32m:12s;并在IPython's github
    2. Altair 提供强大而简洁的语法,基于 vega-lite;见gallery
    3. MPLD3: Bringing Matplotlib to the Browser

    【讨论】:

    • +1 mpld3 很可爱。您只需导入它,然后在您的 %pylab inline 调用下方运行 mpld3.enable_notebook(),所有绘图都将变为交互式。不过可能会有点慢。
    【解决方案2】:

    您可能想查看Plotly。他们在 IPython Notebooks 中渲染交互式 D3 绘图(示例 here。您也可以导出为静态图像,并在悬停时缩放、悬停、平移和查看文本。交互性是他们强调的重点之一。更多信息,你也可以在 Notebook 中使用IPython widgets,这样可以给你更多的控制和选择。例如:

    【讨论】:

    • +1 指向正确方向的指针。如果您想在 IPython 笔记本中嵌入交互式流图,(就像我一样)plotly 可能是比散景更好的选择(我只能让流散点图在散景中工作,而不是直方图框和晶须等)。
    • 有免费版的 Plotly 吗? (即不需要用户公开他们的地块)
    • @eldad-a 好像可以私下绘制,我绘制了一些,见plot.ly/python/getting-started
    【解决方案3】:

    这里的其他答案似乎已经过时了。 IPython 2.0 支持交互式小部件。 Read the docs including some examples,但请注意 nbviewer.ipython.org 不显示交互式小部件。将示例复制并粘贴到try.jupyter.orgworks。

    【讨论】:

      【解决方案4】:

      另一个解决方案可能是Charts 库。它使您能够使用出色的 Highcharts javascript 库来制作开箱即用的精美交互式绘图。

      一些功能:

      • 您可以下载 .png、.jpg 和 .svg 格式的矢量图,这样您就不会遇到分辨率问题。
      • 交互式图表(缩放、滑动、悬停在点上...)
      • 可用于 IPython 笔记本
      • 使用异步绘图功能同时探索数百种数据结构。

      免责声明:我是库的开发者

      【讨论】:

        【解决方案5】:

        您可以直接从 IPython 笔记本(%%html 和 %%javascript)运行 javascript,因此应该可以运行 D3 代码。检查此video。实现这一点的确切方式尚未确定,因为这是 IPython 2.0 的一个特性。目前有许多可用的 hack,以及尝试将 D3 的某些特性移植到 Python 的项目(例如 bokeh 和 python-nvd3)。

        我还没有测试过这些。我自己的偏见是首先尝试下面的示例,它是静态的,但直接使用 D3(因此它应该理论上适用于交互式绘图):

        【讨论】:

          【解决方案6】:

          与@AFoglia 一样,我将推荐您可能正在寻找的其他库:Tangle、Mathematica Notebooks、IPython / Bokeh、RactiveJS 或ReactJS。

          【讨论】:

            【解决方案7】:

            我不相信标准的 matplotlib 绘图能够实现您想要的交互性。 Chaco 可以做交互式图表,但不能在 ipython 笔记本 AFAICT 中。你最好的选择可能是Bokeh。它输出到 Javascript/HTML,可以做交互式图表,并且有一个从 ipython 使用它的例子。

            【讨论】:

            • 不幸的是,bokeh 使用的是画布实现而不是 svg,因此交互性将受到严重阻碍。 plotly 基于 d3js,提供更丰富的(imo)体验
            猜你喜欢
            • 1970-01-01
            • 2019-11-13
            • 2016-07-04
            • 2015-08-09
            • 1970-01-01
            • 2017-03-22
            • 2020-08-13
            • 2020-08-24
            • 2019-12-20
            相关资源
            最近更新 更多