使用matplotlib在给定域上绘制3维的函数

mgi*_*ert 1 python data-visualization matplotlib mayavi

我试图在R ^ 3中在立方体上可视化3个参数的函数,以了解函数的平滑性.下面的示例代码中显示了此问题的一个示例

%pylab
from mpl_toolkits.mplot3d import Axes3D
import itertools

x = np.linspace(0,10,50)
y = np.linspace(0,15,50)
z = np.linspace(0,8,50)

points = []
for element in itertools.product(x, y, z):
    points.append(element)

def f(vals):
    return np.cos(vals[0]) + np.sin(vals[1]) + vals[2]**0.5

fxyz = map(f, points)
xi, yi, zi = zip(*points)

fig = plt.figure(figsize=(12, 8))
ax = fig.add_subplot(111, projection='3d')
ax.scatter(xi, yi, zi, c=fxyz, alpha=0.5)
plt.show()
Run Code Online (Sandbox Code Playgroud)

立方体

这种方法的问题在于立方体内部无法可视化.有没有更好的方法在一个密集的R ^ 3子集上绘制函数?

mgi*_*ert 6

正如@HYRY和@nicoguaro在上面的评论中所建议的那样,Mayavi更适合这类工作.有一个很好的一套例子在这里,我用供参考.这就是我想出的

import numpy as np
from mayavi import mlab

x = np.linspace(0,10,50)
y = np.linspace(0,15,50)
z = np.linspace(0,8,50)

X, Y, Z = np.meshgrid(x, y, z)

s = np.cos(X) + np.sin(Y) + Z**0.5
b1 = np.percentile(s, 20)
b2 = np.percentile(s, 80)
mlab.pipeline.volume(mlab.pipeline.scalar_field(s), vmin=b1, vmax=b2)
mlab.axes()
mlab.show()
Run Code Online (Sandbox Code Playgroud)

之后,我使用GUI将图形旋转到所需的角度,并保存所需的视图

角度1 angle2