2011-05-12 49 views
0

亲爱的所有人。我昨天正在探索matplotlib的3d情节功能(令人惊喜的是,它看起来不错)。只要是明确的,具有使用matplotlib绘制3d图,draw()需要附加参数

from mpl_toolkits.mplot3d import Axes3D 

然而,当我尝试不断重绘平局()的情节,我得到画()的错误(3D绘图)从自我需要一个额外的参数放在一边。这个参数被称为渲染器,并且不是可选的。通过查看3D轴的代码,我无法找到我应该放置为渲染器的规范。

你知道我应该如何解决这个问题吗?只需要清楚,我可以使用draw()和正常情节(打开ion()等),所以我的问题仅限于Axes3D。基本上,我想模仿一些我已经写在matlab中的代码,它绘制了一个3d图,然后更新它(用drawnow())。

编辑:我意识到,渲染器参数可能是计算机的具体。我坐在一台安装了Python的Enthought的Windows上。如果您需要更多信息,请告诉我。

+0

你有一些示例代码? – 2011-05-12 08:13:53

回答

0

编辑:我收回。你可以从fig.canvas.renderer得到它。不过,我会留下下面的例子。


似乎没有成为一个记录的方式来获得的渲染器,但你可能只是在_cachedRenderer轴结构内偷看。请注意,在设置之前,您必须绘制一个绘图。

见这个例子中的最后一行:

from mpl_toolkits.mplot3d import Axes3D 
from matplotlib import cm 
from matplotlib.ticker import LinearLocator, FixedLocator, FormatStrFormatter 
import matplotlib.pyplot as plt 
import numpy as np 

fig = plt.figure() 
ax = fig.gca(projection='3d') 
X = np.arange(-5, 5, 0.25) 
xlen = len(X) 
Y = np.arange(-5, 5, 0.25) 
ylen = len(Y) 
X, Y = np.meshgrid(X, Y) 
R = np.sqrt(X**2 + Y**2) 
Z = np.sin(R) 



colortuple = ('y', 'b') 
colors = np.empty(X.shape, dtype=str) 
for y in range(ylen): 
    for x in range(xlen): 
     colors[x, y] = colortuple[(x + y) % len(colortuple)] 

surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, facecolors=colors, 
     linewidth=0, antialiased=False) 

ax.set_zlim3d(-1, 1) 
ax.w_zaxis.set_major_locator(LinearLocator(6)) 
ax.w_zaxis.set_major_formatter(FormatStrFormatter('%.03f')) 

plt.draw() 
print ax._cachedRenderer 
+0

谢谢。事实证明,但这并不是最终解决我的问题,但它绝对回答我的问题!我原来的问题已经解决了,部分原因是这个。 – Har 2011-05-13 11:35:50