2016-06-08 63 views
1

我使用Matplotlib在python中創建了一個可愛的3D位移矢量場,我對結果感到滿意。然而,從視覺上看,只有方向才能看到位移的大小。 Python中有沒有一種方法可以對箭頭使用色標,以便位移的大小更清晰/更明顯。使用matplotlib繪製3D顫抖功能顏色映射

這是我迄今爲止

#%% Import Libraries 

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

#%% Import tsv file of results 

path = 'W:/Scott/Continuous_DIC_Results/A35_L7-8_500x500x1000/' 
name = 'Z=-5,200,-20,20,spm100' 

results = np.loadtxt(path+name+'.tsv', dtype=float, comments='#', delimiter=None, converters=None, skiprows=1, usecols=(1,2,3,4,5,6), unpack=False, ndmin=0) 

Z,Y,X = results[:,0], results[:,1],results[:,2] 
dz,dy,dx = results[:,3],results[:,4],results[:,5] 


#%% Plot Displacement Field 

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

ax.quiver(X, Y, Z, dx, dy, dz,    # data 
      length=20,      # arrow length 
      color='Tomato'     # arrow colour 
     ) 

ax.set_title('3D Vector Field')    # title 
ax.view_init(elev=18, azim=30)    # camera elevation and angle 
ax.dist=8         # camera distance 

plt.show() 

My Displacement Vector Field

回答

1

你必須計算風速(或您的大小使用另一個數組),那麼增加這個數組顫動功能:

import matplotlib as mpl 
import matplotlib.pyplot as plt 
from numpy import arange,meshgrid,sqrt 

u,v = arange(-50,51,10),arange(-50,51,10) 
u,v = meshgrid(u,v) 
M = sqrt(u*u+v*v) # magnitude 
x,y = u,v 
qq=plt.quiver(x,y,u,v,M,cmap=plt.cm.jet) 
plt.colorbar(qq, cmap=plt.cm.jet) 
plt.show() 

enter image description here

+0

我試過這個,但現在我得到一個ty pe錯誤:您必須首先將數組設置爲可映射。抱歉,我是Matplotlib的新用戶 –

+0

fig = plt.figure(); ax = fig.gca(projection ='3d'); qq = ax.quiver(X,Y,Z,dx,dy,dz,mag,cmap = plt.cm.jet); ax.set_title('3D Vector Field'); ax.view_init(elevation = 18,azim = 30); ax.dist = 8; plt.colorbar(qq,cmap = plt.cm.jet); plt.show() –

+0

我不認爲你發佈的作品在3D –