2016-06-08 2 views
1

Я создал прекрасное векторное поле 3D-смещения в python, используя Matplotlib, и я доволен результатами. Однако визуально не очень восточно видеть величину смещений только в направлении. Есть ли способ в python, чтобы я мог использовать цветовую шкалу для стрелок, чтобы величина смещений была более ясной/более заметной.Цветовое отображение функции 3D-колчана с использованием matplotlib

Это то, что я до сих пор

#%% 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 error: вы должны сначала задать массив как отображаемый. Извините, что я новичок в 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-векторное поле'); ax.view_init (elev = 18, azim = 30); ax.dist = 8; plt.colorbar (qq, cmap = plt.cm.jet); plt.show() –

+0

Я не думаю, что вы опубликовали работы в 3D –