在一个图中创建多条线的3D图

时间:2015-12-05 02:50:51

标签: python arrays numpy matplotlib plot

我目前在3d绘图中绘制几条不同的线条时遇到了一个小问题。我有一个列表,其中包含三个numpy数组,对应于每行三个点的xyz坐标,即

lines=[[array([10,0,0]),array([10,0,101.5]),array([-5,0,250])],[array([9,0,0]), array([9,0,101.5]),array([-4,0,250])]]

代表2行,每行有3组xyz坐标(这里的第一个是(10,0,0),(10,0,101.5)和(-5,0,250))。

一般来说,我会在这个列表中有n行,每行有3组xyz坐标。我想用matplotlib在单个3d图上绘制这些线。我到目前为止所做的就是创建每个包含一行的n个图。

感谢您的帮助!

编辑: 我有一个列表'lines'包含'line'对象,这些对象只是列表本身包含3个numpy数组,每行3个点。我尝试使用以下方法:

for line in lines:
    fig = plt.figure()
    ax = fig.gca(projection='3d')

    z = []
    for i in [0,1,2]:
        z.append(line[i][2])

    x = []
    for i in [0,1,2]:
        x.append(line[i][0])

    y = []
    for i in [0,1,2]:
        y.append(line[i][1])

    ax.plot(x, y, z, label='path')

    plt.show()

我想我明白为什么这给了我2行1和2的图,但我想不出办法将两行放在同一个图上。

2 个答案:

答案 0 :(得分:0)

你几乎得到了它。问题的解决方案很简单,只需将所需的状态移出for循环:

import matplotlib.pyplot as plt

lines=[[array([10,0,0]),array([10,0,101.5]),array([-5,0,250])],[array([9,0,0]), array([9,0,101.5]),array([-4,0,250])]]


fig = plt.figure()
ax = fig.gca(projection='3d')
for line in lines:

    z = []
    for i in [0,1,2]:
        z.append(line[i][2])

    x = []
    for i in [0,1,2]:
        x.append(line[i][0])

    y = []
    for i in [0,1,2]:
        y.append(line[i][1])

    ax.plot(x, y, z, label='path')

plt.show()

答案 1 :(得分:0)

我在尝试绘制位置之间的 3D 路径时遇到了类似的问题,这是我找到的最接近/最有用的解决方案。因此,如果其他人正在尝试这样做并且可能会发现这个类似的解决方案会有所启发:

for location in list_of_locations:
    x_list.append(locdata[location].x) # locdata is a dictionary with the co-ordinates of each named location
    y_list.append(locdata[location].y)
    z_list.append(locdata[location].z)

fig = plt.figure()
ax = fig.gca(projection='3d')
for i in range(len(x_list)-1):
    xs = [x_list[i], x_list[i+1]]
    ys = [y_list[i], y_list[i+1]]
    zs = [z_list[i], z_list[i+1]]
    ax.plot(xs,ys,zs)
plt.show()

我确信它不需要是两个单独的 for 循环,但对于我的小数据集来说,这完全没问题,而且易于阅读。