亲爱的。我昨天正在探索matplotlib的3d绘图功能(令人惊喜,它看起来不错)。只是要明确,
from mpl_toolkits.mplot3d import Axes3D
然而,当我尝试用draw()连续重绘绘图时,我得到的错误是draw()(对于3d绘图)除了self之外还需要一个额外的参数。此参数称为渲染器,不是可选的。查看3d轴的代码,我找不到我应该放置为渲染器的规范。
你知道我应该如何解决这个问题吗?为了清楚起见,我可以使用draw()和普通图(转动离子()等),所以我的问题只适用于Axes3D。
基本上,我想模仿我在matlab中编写的一些代码,它绘制一个3d绘图然后更新它(使用drawnow())。
编辑:我意识到渲染器参数可能是特定于计算机的。我坐在一个带有Enthought安装Python的Windows上。如果您需要更多信息,请与我们联系。
答案 0 :(得分: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