Matplotlib: 重新绘制3D图,使用canvas.draw()时添加额外轴

2024-09-26 17:37:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个很简单的问题,用Matplotlib来回复一些3D数据。最初,我有一个图形,在画布上有一个3D投影:

self.fig = plt.figure()
self.canvas = FigCanvas(self.mainPanel, -1, self.fig)
self.axes = self.fig.add_subplot(111, projection='3d')

enter image description here

然后添加一些数据并使用画布.draw()更新。绘图本身按预期更新,但我在图形的外部得到了额外的2D轴(-0.05到0.05),我不知道如何停止它:

^{pr2}$

enter image description here

有什么想法吗?我现在要绕圈子了!在


Tags: 数据selfadd图形matplotlib画布figplt
2条回答

不要使用axes.clear()+fig.add_subplot,而是使用mpl_toolkits.mplot3d.art3d.Patch3DCollection对象的remove方法:

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

如果您仍然有问题,您可以使用以下方法:

^{pr2}$

乔奎恩的建议很管用,并强调了我可能是打算从错误的方式开始。但是,为了完整起见,我最终发现,您可以通过使用以下命令来消除二维轴:

self.axes.get_xaxis().set_visible(False)
self.axes.get_yaxis().set_visible(False)

这似乎是一种至少可以从3D打印中删除2D标签的方法。在

相关问题 更多 >

    热门问题