我有一个 3D 等高线图,是用 python 的 mayavi 库制作的,我想在其中绘制一些箭头。对于等值线图,我使用
mlab.contour3d
和箭头 mlab.quiver3d
(链接到 mlab 文档、到 quiver3d、到轮廓3d)。为了使示例简单,我在这里使用球体作为轮廓。只要我分别绘制这两件事,即在不同的运行中,它就可以正常工作,请参见下图。
但是,当我尝试合并两个图时,它无法正常工作,两个图的坐标似乎不匹配,请参见下图,其中箭头位于左下角非常小的位置。我也不知道轴及其标签发生了什么。
这是我的代码:
import numpy as np
from mayavi import mlab
# starting coordinates of vector
x = np.array([2.])
y = np.array([1.])
z = np.array([0.])
# components for vectors
u = np.array([3.])
v = np.array([0.])
w = np.array([0.])
# making 3D arrays for quiver3d
XX, YY, ZZ = np.meshgrid(x, y, z)
UU, VV, WW = np.meshgrid(u, v, w)
# coordinates for caluclating the sphere
x_arr = np.linspace(0,5,50)
y_arr = np.linspace(0,5,50)
z_arr = np.linspace(0,5,50)
# center and radius of sphere
xc = 2
yc = 2.5
zc = 3
r = 2
# make the sphere
data2plot = np.zeros( (len(x_arr), len(y_arr), len(z_arr)) )
for ii in range(len(x_arr)):
for jj in range(len(y_arr)):
for kk in range(len(z_arr)):
if np.sqrt( (x_arr[ii]-xc)**2
+(y_arr[jj]-yc)**2
+(z_arr[kk]-zc)**2 ) < r:
data2plot[ii,jj,kk] = 1
fig1 = mlab.figure( bgcolor=(1,1,1), fgcolor=(0,0,0))
# contour plot and arrow-plot, separately, they work, combined not
xx_arr, yy_arr, zz_arr = np.meshgrid(x_arr, y_arr, z_arr, indexing='ij')
contPlot = mlab.contour3d( xx_arr, yy_arr, zz_arr, data2plot,
transparent=True, opacity=.4, figure=fig1)
arrowPlot = mlab.quiver3d(XX, YY, ZZ, UU, VV, WW,
line_width=1, mode='arrow', figure=fig1 )
ax1 = mlab.axes( color=(1,1,1), nb_labels=4 )
mlab.show()
非常感谢任何关于我遗漏或做错的事情的提示!