Skip to main content
 首页 » 编程设计

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

2025年05月04日16rubylouvre

我正在尝试在 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() 

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

请您参考如下方法:

正如@HYRY 和@nicoguaro 在上面的评论中所建议的,Mayavi 更适合此类工作。有一组很好的例子here我用来引用。这是我想出的

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() 

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