使用matplotlib从CSV数据绘制3D轨迹

时间:2016-03-03 18:00:40

标签: python animation matplotlib 3d

我正在尝试绘制来自CSV文件的车辆的3D轨迹,绘图很容易,我想制作动画,实际上是动作的“重放”。我根据此示例(http://matplotlib.org/examples/animation/simple_3danim.html)创建了代码,然后将其修改为仅绘制一行并从pandas读取的CSV文件中读取数据,代码如下所示:

import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d.axes3d as p3
import matplotlib.animation as animation
import pandas as pd

def update_lines(num, data, line):
    # NOTE: there is no .set_data() for 3 dim data...
    x = data['x'].values[num]
    y = data['y'].values[num]
    z = data['z'].values[num]
    line[0].set_data(x,y)
    line[0].set_3d_properties(z)
    print z
    return line

# Attaching 3D axis to the figure
fig = plt.figure()
ax = p3.Axes3D(fig)

# Reading the data from a CSV file using pandas
data = pd.read_csv('data.csv',sep=',',header=0)

# Creating fifty line objects.
# NOTE: Can't pass empty arrays into 3d version of plot()
x = np.array([0])
y = np.array([0])
z = np.array([0])

line = ax.plot(x, y, z)

# Setting the axes properties
ax.set_xlim3d([0.0, 3.0])
ax.set_xlabel('X')

ax.set_ylim3d([0.0, 3.0])
ax.set_ylabel('Y')

ax.set_zlim3d([0.0, 2.0])
ax.set_zlabel('Z')

ax.set_title('3D Test')

# Creating the Animation object
line_ani = animation.FuncAnimation(fig, update_lines, len(data), fargs=(data, line),
                                   interval=10, blit=False)

plt.show()

我打印z只是为了查看数据是否正确迭代,但我得到的只是这样的白色情节:

Plot showing absolutely nothing.

1 个答案:

答案 0 :(得分:0)

至少,您的代码存在两个问题:

  1. 构建数据的方式
  2. 每秒帧数
  3. 这里是修改后的工作示例,请看一下数据变量如何 安排:

    import numpy as np
    import matplotlib.pyplot as plt
    import mpl_toolkits.mplot3d.axes3d as p3
    import matplotlib.animation as animation
    import pandas as pd
    from sys import exit
    def update_lines(num, data, line):
        # NOTE: there is no .set_data() for 3 dim data...
        line.set_data(data[0:2, :num])    
        line.set_3d_properties(data[2, :num])    
        return line
    
    # Attaching 3D axis to the figure
    fig = plt.figure()
    ax = p3.Axes3D(fig)
    
    # Reading the data from a CSV file using pandas
    repo = pd.read_csv('data.csv',sep=',',header=0)
    data = np.array((repo['x'].values, repo['y'].values, repo['z'].values))
    print data.shape[1]
    #exit()
    
    # Creating fifty line objects.
    # NOTE: Can't pass empty arrays into 3d version of plot()
    line = ax.plot(data[0, 0:1], data[1, 0:1], data[2, 0:1])[0]
    
    # Setting the axes properties
    ax.set_xlim3d([-2.0, 2.0])
    ax.set_xlabel('X')
    
    ax.set_ylim3d([-2.0, 2.0])
    ax.set_ylabel('Y')
    
    ax.set_zlim3d([-2.0, 2.0])
    ax.set_zlabel('Z')
    
    ax.set_title('3D Test')
    
    # Creating the Animation object
    line_ani = animation.FuncAnimation(fig, update_lines, data.shape[1], fargs=(data, line), interval=50, blit=False)
    
    plt.show()
    

    你可以看到被追踪的that flight的美丽