Python和Matplotlib:在Jupyter Notebook中进行3D绘图交互

cqc*_*991 52 python matplotlib jupyter-notebook

我使用Jupyter Notebook来分析数据集.笔记本中有很多情节,其中一些是3d图.

在此输入图像描述

我想知道是否有可能使3d绘图具有交互性,所以我可以稍后再详细介绍它?

也许我们可以在上面添加一个按钮?点击它可以弹出一个3d图,人们可以缩放,平移,旋转等.


我的思想:

1. matplotlib,%qt

这不适合我的情况,因为我需要在3d情节之后继续绘图.%qt会影响以后的情节.

2. mpld3

mpld3在我的情况下几乎是理想的,不需要重写任何东西,与matplotlib兼容.但是,它只支持2D绘图.我没有看到任何有关3D的计划(https://github.com/mpld3/mpld3/issues/223).

散景+ visjs

没有在bokeh图库中找到3d绘图的任何实际示例.我只找到使用的https://demo.bokehplots.com/apps/surface3dvisjs.

4. Javascript 3D情节?

因为我需要的只是直线和外观,是否可以使用浏览器中的js将数据传递给js plot以使其具有交互性?(然后我们可能还需要添加3d轴.)这可能类似于visjs,和mpld3.

eld*_*d-a 58

尝试:

%matplotlib notebook

看到jakevdp 在这里回复

编辑JupyterLab用户:

按照说明安装jupyter-matplotlib

然后不再需要上面的魔术命令,如示例中所示:

# Enabling the `widget` backend.
# This requires jupyter-matplotlib a.k.a. ipympl.
# ipympl can be install via pip or conda.
%matplotlib widget
# aka import ipympl

import matplotlib.pyplot as plt

plt.plot([0, 1, 2, 2])
plt.show()
Run Code Online (Sandbox Code Playgroud)

最后,请注意Maarten Breddels的回复 ; 恕我直言ipyvolume确实非常令人印象深刻(和有用!).

  • 我在笔记本中使用了2d和3d图.如何在`%matplotlib notebook`和`%matplotlib inline`之间切换.2.我的笔记本需要很长时间才能运行(5分钟).使用`%matplotlib notebook`将在所有单元格完成后渲染图像,而不是在单元格完成后渲染. (2认同)
  • 无法真正帮助您提供有关此的有价值的信息(我还没有在这个级别上玩过它)。从外观上看:`inline` 嵌入了一个自动生成的静态 png,而 `notebook` 可以让你在 matplotlib 中摆弄图像,直到你点击“关闭”按钮并切换到静态图像。我会搜索一个自动“关闭”命令,该命令将放置在不需要交互模式的无花果中。不知道现阶段是否实施。 (2认同)

Maa*_*els 13

有一个名为ipyvolume的新库可以做你想要的,文档显示现场演示.当前版本不执行网格和线条,但是git repo中的master会执行(与版本0.4一样).(免责声明:我是作者)


Ole*_*leb 10

您可以使用Plotly库。它可以直接在Jupyter Notebook中渲染交互式3D图。

为此,您首先需要通过运行以下命令安装Plotly:

pip install plotly
Run Code Online (Sandbox Code Playgroud)

您可能还想通过运行以下命令来升级库:

pip install plotly --upgrade
Run Code Online (Sandbox Code Playgroud)

之后,在Jupyter Notebook中,您可以编写如下内容:

# Import dependencies
import plotly
import plotly.graph_objs as go

# Configure Plotly to be rendered inline in the notebook.
plotly.offline.init_notebook_mode()

# Configure the trace.
trace = go.Scatter3d(
    x=[1, 2, 3],  # <-- Put your data instead
    y=[4, 5, 6],  # <-- Put your data instead
    z=[7, 8, 9],  # <-- Put your data instead
    mode='markers',
    marker={
        'size': 10,
        'opacity': 0.8,
    }
)

# Configure the layout.
layout = go.Layout(
    margin={'l': 0, 'r': 0, 'b': 0, 't': 0}
)

data = [trace]

plot_figure = go.Figure(data=data, layout=layout)

# Render the plot.
plotly.offline.iplot(plot_figure)
Run Code Online (Sandbox Code Playgroud)

结果,以下图表将在Jupyter Notebook中为您绘制,并且您将能够与其进行交互。当然,您将需要提供您的特定数据,而不是建议的数据。

在此处输入图片说明


gen*_*der 6

在此列表中缺少Plotly。我已经链接了python绑定页面。它绝对具有动画和交互式3D图表。而且由于它是开源的,所以大多数都可以脱机使用。当然,它正在与Jupyter合作