2016-03-08 92 views
1

我想用matplotlib繪製幾個3D點。我的座標存儲在二維數組,因爲我得到了多個病例,所以我想繪製所有的情況下與「for循環」相同的3D情節,但當我這樣做,結果出現在不同的情節...Matplotlib - 繪製3D與for循環

作爲例子:

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 
import numpy as np 

X = np.array([[3,2,1],[4,5,6]]) 
Y = np.array([[1,2,1],[2,3,4]]) 
Z = np.array([[10,11,12],[13,12,16]]) 

for i in range(0,X.shape[0]): 

    fig = plt.figure() 
    ax = fig.add_subplot(111, projection='3d') 

    ax.scatter(X[i,:], Y[i,:], Z[i,:], c='r', marker='o') 

    ax.set_xlabel('Z') 
    ax.set_ylabel('X') 
    ax.set_zlabel('Y') 

    plt.show() 

回答

1

您創建一個新的圖中,每個迭代和繪製它每次迭代。你也總是創建1x1子圖網格的第一個超圖。

你可能需要一個x.shape[0] x 1網格或1 x x.shape[0]格:

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 
import numpy as np 

X = np.array([[3,2,1],[4,5,6]]) 
Y = np.array([[1,2,1],[2,3,4]]) 
Z = np.array([[10,11,12],[13,12,16]]) 

# Create figure outside the loop 
fig = plt.figure() 

for i in range(0,X.shape[0]): 

    # Add the i+1 subplot of the x.shape[0] x 1 grid 
    ax = fig.add_subplot(X.shape[0], 1, i+1, projection='3d') 

    ax.scatter(X[i,:], Y[i,:], Z[i,:], c='r', marker='o') 

    ax.set_xlabel('Z') 
    ax.set_ylabel('X') 
    ax.set_zlabel('Y') 
# Show it outside the loop 
plt.show() 

編輯:

如果你想將它們全部繪製在同一個情節使用:

fig = plt.figure() 
ax = fig.add_subplot(1, 1, 1, projection='3d') 
ax.set_xlabel('Z') 
ax.set_ylabel('X') 
ax.set_zlabel('Y') 

for i in range(0,X.shape[0]): 
    # Only do the scatter inside the loop 
    ax.scatter(X[i,:], Y[i,:], Z[i,:], c='r', marker='o') 

plt.show() 
+0

謝謝爲你的幫助,但即時通訊嘗試繪製在同一個網格上的所有夫婦。 – user3601754

+0

@ user3601754 - 我在答案的最後附加了它,如果能解決您的問題,請查看它。 – MSeifert

+0

是否可以爲每對情侶使用不同的標記或顏色? – user3601754