尝试用matplotlib更新3D图形的坐标

4 投票
1 回答
756 浏览
提问于 2025-04-16 07:04

我有一个函数,可以用matplotlib在tkinter中绘制一个3D球体。不过,每次我调用这个函数时,当我想要旋转球体时,性能都会下降。而且,图形只有在我尝试旋转球体后才会更新。

self.A 是一个变量,用来调整球体的大小。

我的函数:

def draw_fig(self):

        self.ax = Axes3D(self.fig)

        u = numpy.linspace(0, 2 * numpy.pi, 100)
        v = numpy.linspace(0, numpy.pi, 100)
        x = self.A * numpy.outer(numpy.cos(u), numpy.sin(v))
        y = self.A * numpy.outer(numpy.sin(u), numpy.sin(v))
        z = self.A * numpy.outer(numpy.ones(numpy.size(u)), numpy.cos(v))

        t = self.ax.plot_surface(x, y, z,  rstride=4, cstride=4,color='lightblue',linewidth=0)

1 个回答

4

你不应该每次都重新生成所有的数据,而是只需要修改你已有的数据。

补充说明:只需把绘图函数中的坐标轴构建代码移出去就可以了。

def __init__...
     u = numpy.linspace(0, 2 * numpy.pi, 100)
     v = numpy.linspace(0, numpy.pi, 100)
     self.x = A * numpy.outer(numpy.cos(u), numpy.sin(v))
     self.y = A * numpy.outer(numpy.sin(u), numpy.sin(v))
     self.z = A * numpy.outer(numpy.ones(numpy.size(u)), numpy.cos(v))
     self.ax = Axes3D(self.fig)

def draw_fig(self):

        t = self.ax.plot_surface(self.x, self.y, self.z,  rstride=4, cstride=4,color='lightblue',linewidth=0)

撰写回答