我有一个非常简单的问题,就是使用Matplotlib重新绘制一些3D数据。最初,我在画布上有一个带有3D投影的图形:
self.fig = plt.figure()
self.canvas = FigCanvas(self.mainPanel, -1, self.fig)
self.axes = self.fig.add_subplot(111, projection='3d')
然后我添加一些数据并使用canvas.draw()进行更新。情节本身会按预期更新,但我在图的外部得到了额外的2D轴(-0.05到0.05),我无法弄清楚如何阻止它:
self.axes.clear()
self.axes = self.fig.add_subplot(111, projection='3d')
xs = np.random.random_sample(100)
ys = np.random.random_sample(100)
zs = np.random.random_sample(100)
self.axes.scatter(xs, ys, zs, c='r', marker='o')
self.canvas.draw()
有什么想法吗?我现在就去圈子了!
答案 0 :(得分:3)
而不是axes.clear()
+ fig.add_subplot
,请使用remove
对象的mpl_toolkits.mplot3d.art3d.Patch3DCollection
方法:
In [31]: fig = plt.figure()
In [32]: ax = fig.add_subplot(111, projection='3d')
In [33]: xs = np.random.random_sample(100)
In [34]: ys = np.random.random_sample(100)
In [35]: zs = np.random.random_sample(100)
In [36]: a = ax.scatter(xs, ys, zs, c='r', marker='o') #draws
In [37]: a.remove() #clean
In [38]: a = ax.scatter(xs, ys, zs, c='r', marker='o') #draws again
如果您仍有问题,可以玩这个:
import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import interactive
interactive(True)
xs = np.random.random_sample(100)
ys = np.random.random_sample(100)
zs = np.random.random_sample(100)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
a = ax.scatter(xs, ys, zs, c='r', marker='o')
plt.draw()
raw_input('press for new image')
a.remove()
xs = np.random.random_sample(1000)
ys = np.random.random_sample(1000)
zs = np.random.random_sample(1000)
a = ax.scatter(xs, ys, zs, c='r', marker='o')
plt.draw()
raw_input('press to end')
答案 1 :(得分:2)
Joquin的建议运作良好,并强调我可能会以错误的方式开始策划。但是,为了完整起见,我最终发现只需使用:
即可摆脱2D轴self.axes.get_xaxis().set_visible(False)
self.axes.get_yaxis().set_visible(False)
这似乎是至少从3D图中删除2D标签的一种方式。