2016-01-29 31 views

回答

2

這很奇怪。看起來u,v,w只是建立方向,長度參數影響所有長度相同。您不能將數組放入長度參數中。

作爲一個典型的解決辦法,你可以單獨繪製每個箭頭:

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

print(matplotlib.__version__) 

fig = plt.figure() 
ax = fig.gca(projection='3d') 

x, y, z = np.meshgrid(np.arange(-1, 1, 0.4), 
         np.arange(-1, 1, 0.4), 
         np.arange(-1, 1, 0.4)) 
x = x.reshape(np.product(x.shape)) 
y = y.reshape(np.product(y.shape)) 
z = z.reshape(np.product(z.shape)) 

scale = 0.02 
u = np.sin(np.pi * x) * np.cos(np.pi * y) * np.cos(np.pi * z) 
v = -np.cos(np.pi * x) * np.sin(np.pi * y) * np.cos(np.pi * z) 
w = np.sqrt(2.0/3.0) * np.cos(np.pi * x) * np.cos(np.pi * y) * np.sin(np.pi * z) 
lengths = np.sqrt(x**2+y**2+z**2) 

for x1,y1,z1,u1,v1,w1,l in zip(x,y,z,u,v,w,lengths): 
    ax.quiver(x1, y1, z1, u1, v1, w1, pivot = 'middle', length=l*0.5) 

ax.scatter(x,y,z, color = 'black') 
plt.show() 

3d Quiver

+0

分別設置每個長度是一個工作,周圍,​​但它似乎工作... 感謝您的答案! – SeF

2

只是圍繞文檔探針http://matplotlib.org/mpl_toolkits/mplot3d/api.html 爲您工作嗎?

仍不明顯,箭頭的長度是正確的,但至少現在看3D

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

print(matplotlib.__version__) 

fig = plt.figure() 
ax = fig.gca(projection='3d') 

x, y, z = np.meshgrid(np.arange(-1, 1, 0.4), 
         np.arange(-1, 1, 0.4), 
         np.arange(-1, 1, 0.4)) 
scale = 0.02 
u = np.sin(np.pi * x) * np.cos(np.pi * y) * np.cos(np.pi * z) 
v = -np.cos(np.pi * x) * np.sin(np.pi * y) * np.cos(np.pi * z) 
w = np.sqrt(2.0/3.0) * np.cos(np.pi * x) * np.cos(np.pi * y) * np.sin(np.pi * z) 

ax.quiver(x, y, z, u, v, w, pivot = 'middle', arrow_length_ratio = 0.02) 
ax.scatter(x,y,z, color = 'black') 
plt.show() 

enter image description here

+0

感謝您的回答,對你有據可查的代碼! 像往常一樣,箭頭的方向是正確的,但不是它們的長度。嘗試使用常數函數u = 0.001 v = 0.001 w = 0.001 然後用u = 1 v = 1 w = 1 長度總是相同的。 – SeF

+0

關於賞金,Xorile博士應該得到25分,f5r5e5d應該得到25分......對不起,我無法分手! – SeF

+0

看起來像這應該是固定在matplotlib 2.0,其中有當前的候選版本和beta版本 - 雖然我不建設他們,找不到安裝pkg – f5r5e5d