python - 在 Mayavi 中使用 quiver3d() 绘制 3D 矢量场
问题描述
我很难弄清楚为什么以下代码在 Jupyter Notebook 中不起作用!非常感谢任何帮助
%gui qt
import matplotlib.pyplot as plt
import numpy as np
from sympy import symbols
from mayavi import mlab
x,y,z = symbols('x y z')
def gradient(f):
return (f.diff(x), f.diff(y),f.diff(z))
f = x*y**2+z**2
g = gradient(f)
xrange = np.linspace(-3,3,15)
yrange = np.linspace(-3,3,15)
zrange = np.linspace(-3,3,15)
X,Y,Z = np.meshgrid(xrange, yrange, zrange)
U = np.zeros((15,15,15))
V = np.zeros((15,15,15))
W = np.zeros((15,15,15))
for i in range(len(xrange)):
for j in range(len(yrange)):
for k in range(len(zrange)):
x1 = X[i,j,k]
y1 = Y[i,j,k]
z1 = Z[i,j,k]
U[i,j,k] = g[0].subs({x:x1, y:y1, z:z1})
V[i,j,k] = g[1].subs({x:x1, y:y1, z:z1})
W[i,j,k] = g[2].subs({x:x1, y:y1, z:z1})
mlab.quiver3d(X,Y,Z,U,V,W)
事实上,我没有收到任何错误消息,只是 Mayavi 的一个黑色窗口。我已经等了 10 多分钟,但 Windows 永久显示为黑色。我正在使用 Ubuntu 19.10 的机器上运行此代码。为了完整起见,我想提一下以下代码可以正常工作。
%gui qt
from mayavi import mlab
import numpy as np
def V(x, y, z):
""" A 3D sinusoidal lattice with a parabolic confinement. """
return np.cos(10*x) + np.cos(10*y) + np.cos(10*z) + 2*(x**2 + y**2 + z**2)
X, Y, Z = np.mgrid[-2:2:100j, -2:2:100j, -2:2:100j]
mlab.contour3d(X, Y, Z, V)
解决方案
我可以通过添加来解决问题
mlab.init_notebook()
mlab.clf()
导入mlab模块后。这样,情节就会出现在 Jupyter Notebook 中。
推荐阅读
- javascript - localForage 迭代不适用于 JS 文件
- python - bigquery.Client().extract_table() 不会(总是)将大表分成小的 CSV 文件
- html - 如何在高度未知的 div 中垂直居中 div?
- java - 如何修复“com.fasterxml.jackson.databind.JsonMappingException:反序列化属性问题”错误
- celery - 如何在 celery beat 中的指定时间运行每 n 天的任务?
- java - 同步和互斥有什么区别
- go - 如何将嵌套的 JSON 转换为 Go 代码?
- ruby-on-rails - 无法运行 Rails 服务器
- javascript - 如何使 setTimeout() 像在 for 循环中一样工作?
- reactjs - 在 react-i18next 中如何工作 I18nextProvider,withNamespaces?