0

ipython 笔记本 3.0.0

matplotlib 1.4.3

OS X 10.11.4

我正在创建一个 3D 数据立方体的交互式 3D 散点图。我在这里包含了一个玩具示例,它产生了我在尝试绘制数据立方体时遇到的相同问题。

如果我在笔记本之外生成一个 matplot 窗口,当我手动关闭它(单击红色 x)时,它会随着“轮子”停止,直到我强制退出。

#Generate matplot window outside of the notebook

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

#from matplot3d tutorial

def randrange(n, vmin, vmax):
    return (vmax - vmin)*np.random.rand(n) + vmin

fig = plt.figure() ax = fig.add_subplot(111, projection='3d') n = 100 for c, m, zl, zh in [('r', 'o', -50, -25), ('b', '^', -30, -5)]:
    xs = randrange(n, 23, 32)
    ys = randrange(n, 0, 100)
    zs = randrange(n, zl, zh)
    ax.scatter(xs, ys, zs, c=c, marker=m)

ax.set_xlabel('X Label') ax.set_ylabel('Y Label') ax.set_zlabel('Z Label')

plt.show()

我尝试在笔记本中使用 mpld3,但显示非交互式图像以及错误

“TypeError: array([ 2., 20.]) 不是 JSON 可序列化的”

#Use mpld3 within notebook

import matplotlib.pyplot as plt
import numpy as np
import mpld3
from mpl_toolkits.mplot3d import Axes3D
mpld3.enable_notebook()

def randrange(n, vmin, vmax):
    return (vmax - vmin)*np.random.rand(n) + vmin

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
n = 100
for c, m, zl, zh in [('r', 'o', -50, -25), ('b', '^', -30, -5)]:
    xs = randrange(n, 23, 32)
    ys = randrange(n, 0, 100)
    zs = randrange(n, zl, zh)
    ax.scatter(xs, ys, zs, c=c, marker=m)

ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')

对 JSON 序列化的一些快速研究一直没有成果。

创建不会停止的交互式 3D matplotlib 散点图的最佳方法是什么?

4

1 回答 1

0

在 IPython 中,即使您不使用内联后端,最好使用%matplotlib. 这告诉 IPython 和 matplotlib 与事件循环一起工作,并且应该有助于解决问题。要使用默认的 GUI 后端,请使用:

%matplotlib

或者指定 qt 后端:

%matplotlib qt

plt.show()这避免了绘制绘图时对内核的需要和阻塞。

为获得最佳效果,请在任何绘图命令之前在笔记本的第一个单元格中单独运行此命令。

于 2016-06-26T10:07:02.683 回答