+-
                                
                                    
                                
                                
                                    
                                
                                
                                    
                                        
                                        
                                        
                                        
                                        
                                            
                                        
                                        
                                    
                                
                            
                        
  我试图在matplotlib中获得一个散点图的三维动画,基于 here发布的2d散点图动画和 here发布的3d线图. 
  
 
 
问题来自set_data和set_offsets不能在3D中工作,所以你应该使用set_3d_properties来处理z信息.玩它通常会窒息,但下面张贴的代码会运行.然而,透明度增加到足以使点在几帧后逐渐消失.我在这做错了什么?我希望这些点在盒子的边界内跳一段时间.即使将步长调整到非常小的尺寸也不会减慢透明度.
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
FLOOR = -10
CEILING = 10
class AnimatedScatter(object):
    def __init__(self, numpoints=5):
        self.numpoints = numpoints
        self.stream = self.data_stream()
        self.angle = 0
        self.fig = plt.figure()
        self.ax = self.fig.add_subplot(111,projection = '3d')
        self.ani = animation.FuncAnimation(self.fig, self.update, interval=100, 
                                           init_func=self.setup_plot, blit=True)
    def change_angle(self):
        self.angle = (self.angle + 1)%360
    def setup_plot(self):
        x, y, z = next(self.stream)
        c = ['b', 'r', 'g', 'y', 'm']
        self.scat = self.ax.scatter(x, y, z,c=c, s=200, animated=True)
        self.ax.set_xlim3d(FLOOR, CEILING)
        self.ax.set_ylim3d(FLOOR, CEILING)
        self.ax.set_zlim3d(FLOOR, CEILING)
        return self.scat,
    def data_stream(self):
        data = np.zeros((3, self.numpoints))
        xyz = data[:3, :]
        while True:
            xyz += 2 * (np.random.random((3, self.numpoints)) - 0.5)
            yield data
    def update(self, i):
        data = next(self.stream)
        data = np.transpose(data)
        self.scat.set_offsets(data[:,:2])
        #self.scat.set_3d_properties(data)
        self.scat.set_3d_properties(data[:,2:],'z')
        self.change_angle()
        self.ax.view_init(30,self.angle)
        plt.draw()
        return self.scat,
    def show(self):
        plt.show()
if __name__ == '__main__':
    a = AnimatedScatter()
    a.show()
 
  最佳答案 
 
  最后找到解决方案,这里是如何更新没有触摸颜色的点: 
  
  
 
    
from mpl_toolkits.mplot3d.art3d import juggle_axes
scat._offsets3d = juggle_axes(xs, ys, zs, 'z')
 
 这是由set_3d_properties内部完成以及重新初始化颜色
  点击查看更多相关文章 
 
转载注明原文:python – 在matplotlib中制作动画三维散点图 - 乐贴网