我正在使用mayavi(3.3.2)来显示音量等值面.
一般来说,我的卷没有立方体素; 例如,采样网格在X和Y方向上可能是1mm x 1mm,但在Z方向上可能是1.4mm.
如何使用mayavi mlab.contour3d或mlab.pipeline.iso_surface?使用正确的空间比例显示此类体积?我真的更愿意不将卷重新采样为立方网格.
说明问题的另一种方法:我可以做些什么来使下面的代码显示一个球体而不是一个扁平的elipsoid(将它volume与预期的1:1:2纵横比体素作为给定,并且不重新生成或重新采样体积).
import numpy as np
from enthought.mayavi import mlab
def sqr(x): return x*x
s=64
x,y,z = np.ogrid[0:s,0:s,0:s/2]
volume = np.sqrt(sqr(x-s/2)+sqr(y-s/2)+sqr(2*z-s/2))
isos = mlab.contour3d(volume,contours=[5,15,25],transparent=True)
mlab.show()
Run Code Online (Sandbox Code Playgroud)
我猜测应该有一些方法来获取底层的VTK图形管道(它的变换等)并插入适当的各向异性缩放(如果没有某种方式通过mlab API更直接地进行).
我在python脚本中导入mayavi来显示一些3D数据集,事实证明以下天真轴标签不起作用
from mayavi import mlab
axes =mlab.axes(xlabel='$\alpha$', ylabel='$\beta$', zlabel='$\sigma$')
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?我无法从谷歌或用户手册中找到解决方案.
如何在Python Mayavi中在3D空间中绘制线条?MLAB模块是否有一个函数允许我指定将绘制的线的起点和终点?
我想使用mayavi.mlab.surf()与mayavi2进行三维绘图.这个函数有一个名为warp_scale的参数,可用于缩放z轴,我正在寻找类似的东西,但是对于x和y轴.
我可以通过乘以x和y数组然后使用mayavi.mlab.axes()中的ranges参数来手动执行此操作来更正轴标签,但是我正在寻找像warp_scale更直接的方法.
谢谢!
我正在尝试使用mayavi中的一系列数据文件制作动画.不幸的是我注意到相机没有锁定(它是缩放和缩小).我认为它正在发生,因为我的网格的Z组件正在改变,mayavi正在尝试重新计算比例.
我该如何解决?

import numpy
from mayavi import mlab
mlab.figure(size = (1024,768),bgcolor = (1,1,1))
mlab.view(azimuth=45, elevation=60, distance=0.01, focalpoint=(0,0,0))
#mlab.move(forward=23, right=32, up=12)
for i in range(8240,8243):
n=numpy.arange(10,400,20)
k=numpy.arange(10,400,20)
[x,y] = numpy.meshgrid(k,n)
z=numpy.zeros((20,20))
z[:] = 5
M = numpy.loadtxt('B:\\Dropbox\\Master.Diploma\\presentation\\movie\\1disk_j9.5xyz\\'+'{0:05}'.format(i)+'.txt')
Mx = M[:,0]; My = M[:,1]; Mz = M[:,2]
Mx = Mx.reshape(20,20); My = My.reshape(20,20); Mz = Mz.reshape(20,20);
s = mlab.quiver3d(x,y,z,Mx, My, -Mz, mode="cone",resolution=40,scale_factor=0.016,color = (0.8,0.8,0.01))
Mz = numpy.loadtxt('B:\\Dropbox\\Master.Diploma\\presentation\\movie\\Mzi\\' + '{0:05}'.format(i) + '.txt')
n=numpy.arange(2.5,400,2)
k=numpy.arange(2.5,400,2)
[x,y] = numpy.meshgrid(k,n)
f = mlab.mesh(x, y, -Mz/1.5,representation = …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过RGB堆栈制作一系列2D平面的3D绘图,如下所示:

我知道可以mpl_toolkits.mplot3d通过将每个像素的x,y,z坐标和RGB(A)颜色传递给plot_surface:
import numpy as np
from matplotlib import pyplot as pp
from mpl_toolkits.mplot3d.axes3d import Axes3D
def plot_stack_slices(rgbstack, scale=(1., 1., 1.), z_interval=10.):
fig, ax = pp.subplots(1,1,subplot_kw={'projection':'3d'})
ax.invert_zaxis()
ax.hold(True)
sx, sy, sz = scale
nz, ny, nx, nc = rgbstack.shape
stack_xyz = np.mgrid[:nx*sx:nx*1j, :ny*sy:ny*1j, :nz*sz:nz*1j]
slices = rgbstack[::-z_interval]
slice_xyz = np.rollaxis(stack_xyz, 3, 0)[::-z_interval]
surflist = []
for (img,xyz) in zip(slices, slice_xyz):
x, y, z = xyz
s = ax.plot_surface(x, y, z, facecolors=img**0.75,
rstride=50, cstride=50)
surflist.append(s)
return fig, …Run Code Online (Sandbox Code Playgroud) 我有一大堆数据,我试图在3D中表示希望发现一个模式.我花了很长时间阅读,研究和编码,但后来我意识到我的主要问题不是编程,而是实际上选择了一种可视化数据的方法.
Matplotlib的mplot3d提供了很多选项(线框,轮廓,填充轮廓等),MayaVi也是如此.但是有很多选择(每个都有自己的学习曲线),我几乎迷失了,不知道从哪里开始!所以我的问题基本上是你必须处理这些数据时使用哪种绘图方法?
我的数据是基于日期的.对于每个时间点,我绘制一个值(列表'Actual').
但是对于每个时间点,我也有一个上限,一个下限和一个中间点.这些限制和中点基于种子,在不同的平面上.
我希望在我的"实际"读数中发生重大变化时或之前发现该点或识别模式.是在所有飞机的上限都满足时?或者彼此接近?当实际值接触上/中/下限时?是否在一个平面上的Uppers触及另一架飞机的降落时?
在我粘贴的代码中,我将数据集简化为几个元素.我只是使用简单的散点图和线图,但由于数据集的大小(可能是mplot3d的限制?),我无法用它来发现我正在寻找的趋势.
dates = [20110101,20110104,20110105,20110106,20110107,20110108,20110111,20110112]
zAxis0= [ 0, 0, 0, 0, 0, 0, 0, 0]
Actual= [ 1132, 1184, 1177, 950, 1066, 1098, 1116, 1211]
zAxis1= [ 1, 1, 1, 1, 1, 1, 1, 1]
Tops1 = [ 1156, 1250, 1156, 1187, 1187, 1187, 1156, 1156]
Mids1 = [ 1125, 1187, 1125, 1156, 1156, 1156, 1140, 1140]
Lows1 = [ 1093, 1125, 1093, 1125, 1125, 1125, 1125, 1125]
zAxis2= [ 2, 2, 2, 2, …Run Code Online (Sandbox Code Playgroud) 我正在使用mayavi.mlab生成网格图,并希望背景不透明度为0.(或透明).这可能吗?
以下导入
from mayavi import mlab
Run Code Online (Sandbox Code Playgroud)
生成值错误.
我使用setuptools安装了Mayavi(如此处所述).gui工作得很好(这里和那里有一些bug,但我仍然可以使用模块等).我猜测安装不顺利.任何建议我如何修复我的安装(如果这是什么问题)?
编辑1:
我卸载mayavi并重新安装它(使用pip),但valueError它仍然存在.
编辑2:
我安装的系统是虚拟的Ubuntu 15.04(使用VMware 6.0.6).我在这里粘贴了pip install mayavi输出.
编辑3:
重新安装以前的版本后Mayavi : 4.3.1,我仍然得到相同的错误.我在用Python : 2.7.9.
以下是我所做的粗略解释vtk:
vtkClipClosedSurface切断迷宫之一,使我得到了没有打开的表面的对象.一个规则的表面看起来是这样的,有一个封闭的表面看起来是这样.这是我的问题:对于我的结构的更复杂的版本,我得到这个:
你能看到它在左上角是如何正常工作的,靠近右下方它会停止创建曲面吗?有时我在最后一部分也会得到非常奇怪的三角形.
根据我的理解,vtkClipClosedSurface从表面法线知道在哪里关闭表面和不在哪里.问题是:我的结构的法线很好,它们都指向正确的方向.如果仔细观察结构,你会注意到下部基本上是顶部的反转,它逐渐变化,都在一个表面上.
我尝试修改我的结构,然后切割许多东西vtkSmoothPolyDataFilter,vtkCleanPolyData或者vtkPolyDataNormals.我甚至试图用边界表面提取vtkFeatureEdges,这导致了更糟糕的结果.甚至vtkFillHolesFilter没有产生任何可接受的结果.我的表面看起来完美无瑕,足以创造一个边界.
我不知道还有什么可以尝试的.其他结构也会发生这种情况.使用CAD工具修复它是不可能的,因为它应该是开箱即用的.请帮我!
这是几何不能正确关闭曲面的几何示例.这次我使用的vtkFillHolesFilter结果是结构内部的表面,而它们只应占据te对象的边界.

如果你需要更详细的我的管道纲要,这里有:
mayavi.mlab.contour3dPolyData通过提取actor.mapper.inputtvtk为常规格式vtkvtkClipClosedSurface 使用平面集合切除部分结构(当平面集合与结构边界相同时会发生错误)编辑:好的,这没有得到足够的重视,所以我构建了一个最小的,完整的,可验证的工作示例来重现行为:
import numpy as np
import vtk # VTK version 7.0
from mayavi import mlab # mayavi version 4.4.4
from mayavi.api import Engine, OffScreenEngine
from tvtk.api import tvtk
def schwarz_D(x, y, z, linear_term=0): …Run Code Online (Sandbox Code Playgroud) mayavi ×10
python ×10
matplotlib ×2
3d ×1
axes ×1
background ×1
draw ×1
line ×1
mplot3d ×1
plot ×1
python-3.x ×1
r ×1
scale ×1
scipy ×1
surf ×1
textures ×1
transparent ×1
volume ×1
vtk ×1