ipython notebook 3.0.0
matplotlib 1.4.3
OS X 10.11.4
我正在创建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散点图的最佳方法是什么?
答案 0 :(得分:0)
在IPython中,即使您没有使用内联后端,也最好使用%matplotlib
。这告诉IPython和matplotlib与eventloops一起工作,应该有助于挂起。要使用默认的GUI后端,请使用:
%matplotlib
或者指定qt后端:
%matplotlib qt
这样可以避免在绘制绘图时需要plt.show()
和内核阻塞。
为了获得最佳效果,请在任何绘图命令之前在笔记本的第一个单元格中自行运行。