我想用Mayavi.
virtualenv
安装了.但我没有用它来安装.我手动安装了它的所有依赖项,包括VTK
.
因为VTK
,我按照其安装指南并安装了python包装器.
现在,如果我打开一个新的终端窗口并打开python,我可以导入vtk
而不会出现任何错误.
我尝试使用以下命令安装Mayavi:
pip install mayavi
Run Code Online (Sandbox Code Playgroud)
但是发生以下错误:
Downloading/unpacking mayavi
Running setup.py egg_info for package mayavi
build_src
building extension "tvtk.array_ext" sources
building data_files sources
build_src: building npy-pkg config files
no previously-included directories found matching 'artwork'
no previously-included directories found matching 'docs/pdf'
Requirement already satisfied (use --upgrade to upgrade): apptools in /Library/Python/2.7/site-packages (from mayavi)
Requirement already satisfied (use --upgrade to upgrade): traits in /Library/Python/2.7/site-packages …
Run Code Online (Sandbox Code Playgroud) 我有一个大的(x,y,z)蛋白质位置数据集,并希望绘制高占有率的区域作为热图.理想情况下,输出应该类似于下面的体积可视化,但我不确定如何使用matplotlib实现这一点.
我最初的想法是将我的位置显示为3D散点图,并通过KDE为其密度着色.我用测试数据将其编码如下:
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
mu, sigma = 0, 0.1
x = np.random.normal(mu, sigma, 1000)
y = np.random.normal(mu, sigma, 1000)
z = np.random.normal(mu, sigma, 1000)
xyz = np.vstack([x,y,z])
density = stats.gaussian_kde(xyz)(xyz)
idx = density.argsort()
x, y, z, density = x[idx], y[idx], z[idx], density[idx]
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x, y, z, c=density)
plt.show()
Run Code Online (Sandbox Code Playgroud)
这很好用!但是,我的真实数据包含数千个数据点,并且计算kde和散点图变得非常慢.
我的真实数据的一小部分:
我的研究表明,更好的选择是评估网格上的高斯kde.我只是不确定如何在3D中:
import numpy as np
from scipy import stats
import …
Run Code Online (Sandbox Code Playgroud) 我想从Hacker's Delight那里制作这样的情节:
有什么方法可以在Python中实现这一目标?一种易于交互式调整图形(改变当前观察到的X/Y切片)的解决方案将是理想的.
matplotlib和mplot3d模块都没有这个功能AFAICT.我发现mayavi2但是它非常笨重(我甚至找不到调整大小的选项)并且从ipython运行时似乎只能正常工作.
或者gnuplot可以工作,但我不想为此学习另一种语言语法.
mayavi是否可以单独指定每个点的大小和颜色?
那个API对我来说很麻烦.
points3d(x, y, z...)
points3d(x, y, z, s, ...)
points3d(x, y, z, f, ...)
x, y and z are numpy arrays, or lists, all of the same shape, giving the positions of the points.
If only 3 arrays x, y, z are given, all the points are drawn with the same size and color.
In addition, you can pass a fourth array s of the same shape as x, y, and z giving an associated scalar value for each …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在TraitsUI中创建一个包含两个Mayavi数字的GUI.我根据Mayavi文档中的多个引擎示例实现了这些数字.
但是,当我向其中一个图形添加颜色条并运行GUI脚本时,除了所需的TraitsUI窗口外,它有时会打开一个空白的Mayavi场景编辑器窗口.这个空白窗口并不总是出现,从不在重新启动python内核后的第一次运行,有时只是在连续几次运行脚本并关闭每次出现的窗口之后.
运行下面大大减少的代码会产生相同的行为,删除该mlab.colorbar(s)
行可以解决问题.如何在不打开空白窗口的情况下获得彩条?对于表面图,似乎没有明显的方法将颜色条指定给特定的图形.我在Windows 7上运行Python 3.5(但在Ubuntu上遇到相同的问题).
from traits.api import HasTraits, Instance, on_trait_change
from traitsui.api import View, Item
import numpy as np
from mayavi.core.api import Engine
from mayavi.core.ui.api import SceneEditor, MlabSceneModel
from mayavi import mlab
#Generate a test surface to display
def test_surf():
x, y = np.mgrid[-7.:7.05:0.1, -5.:5.05:0.05]
z = np.sin(x + y) + np.sin(2 * x - y) + np.cos(3 * x + 4 * y)
return x, y, z
class MyApp(HasTraits):
#Create a mayavi scene with …
Run Code Online (Sandbox Code Playgroud) 我正在尝试制作粒子轨迹的视频.但是,某种程度上我的场景永远不会更新 这是一个非常简单的例子:
from __future__ import absolute_import, division, print_function
from mayavi import mlab
import numpy as np
import math
alpha = np.linspace(0, 2*math.pi, 100)
xs = np.cos(alpha)
ys = np.sin(alpha)
zs = np.zeros_like(xs)
mlab.points3d(0,0,0)
plt = mlab.points3d(xs[:1], ys[:1], zs[:1])
@mlab.animate(delay=100)
def anim():
f = mlab.gcf()
while True:
for (x, y, z) in zip(xs, ys, zs):
print('Updating scene...')
plt.mlab_source.x[0] = x
plt.mlab_source.y[0] = y
plt.mlab_source.z[0] = z
f.scene.render()
yield
anim()
mlab.show()
Run Code Online (Sandbox Code Playgroud)
如果我运行此脚本,它会显示一个包含两个点和动画GUI的窗口.它还在终端上打印连续的"正在更新场景..."消息流.但是,场景根本不显示任何移动.
我究竟做错了什么?
Python 2.7,Mayavi 4.1,VTK 5.8
我正在运行Fedora 17(x64)机器,我尝试安装Mayavi for python via
yum install mayavi
Run Code Online (Sandbox Code Playgroud)
哪个工作正常,除了每次我写一个代码,我称之为mayavi模块(如mlab):
from enthought.mayavi import mlab
Run Code Online (Sandbox Code Playgroud)
它因错误而大叫
********************************************************************************
WARNING: Imported VTK version (5.8) does not match the one used
to build the TVTK classes (5.6). This may cause problems.
Please rebuild TVTK.
********************************************************************************
Run Code Online (Sandbox Code Playgroud)
我用谷歌搜索,但我不知道如何重建TVTK以匹配VTK的版本.我怀疑这是导致异常行为,但我不能确定.你如何重建TVTK?
我正在使用Mayavi渲染一些由3D体积内的多个2D平面组成的成像数据,其位置,方向和比例由4x4刚体仿射变换矩阵定义.每架飞机包括:
mayavi.mlab.imshow
mayavi.mlab.points3d
和mayavi.mlab.plot3d
分别.我通过用我的仿射矩阵点击它们的坐标,将我的点和线顶点从2D参考平面转换为3D空间.基于我刚才的问题/答案在这里,我想通了,我可以设置的位置和方向ImageActor
个别对象,使用:
obj = mlab.imshow(img)
obj.actor.orientation = [pitch, roll, yaw] # the required orientation (deg)
obj.actor.position = [dx, dy, dz] # the required position
obj.actor.scale = [sx, sy, sz] # the required scale
Run Code Online (Sandbox Code Playgroud)
现在情节看起来像这样:
所有东西都很好地排列,但是很难解释,因为这些平面的间距非常密集.我现在希望能够做的是通过一些比例因子"拉伸"z轴.在点和线的情况下,这很容易做到 - 我所做的就是将所有变换后的z坐标乘以比例因子.
但是,我无法弄清楚如何将相同的变换应用于图像.如果我只是缩放z位置,那么图像的旋转和缩放当然是错误的,并且我绘制的点/线将不再与图像位于同一平面上:
我需要做的是应用一个非刚性仿射变换,它包含剪切以及旋转,平移和缩放到我的图像.
有没有什么方法可以手动应用剪切ImageActor
,甚至更好的只是直接应用我预先计算的任意4x4仿射矩阵?
我正在使用MayaVi Python库来绘制3d点,使用points3d
该类.文档指定通过第四个参数指定每个点的颜色s
:
此外,您可以传递与x,y和z相同形状的第四个数组s,为每个点提供关联的标量值,或者返回标量值的函数f(x,y,z).此标量值可用于调整点的颜色和大小.
这指定了每个点的标量值,将点映射到颜色映射,例如copper
,jet
或hsv
.例如,从他们的文件:
import numpy
from mayavi.mlab import *
def test_points3d():
t = numpy.linspace(0, 4*numpy.pi, 20)
cos = numpy.cos
sin = numpy.sin
x = sin(2*t)
y = cos(t)
z = cos(2*t)
s = 2+sin(t)
return points3d(x, y, z, s, colormap="copper", scale_factor=.25)
Run Code Online (Sandbox Code Playgroud)
得到:
相反,我想将每个点的实际值指定为(r,g,b)元组.这可能在MayaVi中吗?我已经尝试用s
一个元组数组替换,但是会抛出一个错误.
我在python 3.3中运行mayavi时遇到了麻烦
当用python3(或python3.3)运行我的程序时,我得到了
from mayavi import mlab as ml
ImportError: No module named 'mayavi'
Run Code Online (Sandbox Code Playgroud)
要使numpy和matplotlib工作,我使用:
sudo apt-get install python3-"missing module"
Run Code Online (Sandbox Code Playgroud)
但是安装mayavi的常用方法就是
sudo apt-get install mayavi2
Run Code Online (Sandbox Code Playgroud)
并且python3找不到它....
有没有人知道如何让mayavi与Python3一起工作?它不受支持吗?
我试过了两个
import mayavi.mlab as ml
from mayavi import mlab as ml
Run Code Online (Sandbox Code Playgroud)
两者都给我同样的错误
任何澄清将不胜感激:)
mayavi ×10
python ×9
vtk ×4
matplotlib ×2
python-3.x ×2
animation ×1
installation ×1
pip ×1
plot ×1
point-clouds ×1
scipy ×1
traitsui ×1