簡體   English   中英

在一個圖中創建多條線的 3D 圖

[英]Creating a 3D plot of several lines in one figure

我目前在 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 個圖,每個圖都包含一條線。

謝謝您的幫助!

編輯:我有一個包含 'line' 對象的列表 'lines',這些對象只是列表本身,其中包含每行 3 個點的 3 個 numpy 數組。 我嘗試使用以下方法:

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()

我想我明白為什么這給了我第 1 行和第 2 行的 2 個圖,但我想不出將兩條線放在同一個圖上的方法。

你幾乎明白了。 解決您的問題很簡單,只需將所需的語句移出 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()

我在嘗試繪制位置之間的 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 循環,但對於我的小數據集來說,這完全沒問題,而且易於閱讀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM