【问题标题】:Plotting function of 3 dimensions over given domain with matplotlib使用 matplotlib 在给定域上绘制 3 维函数
【发布时间】:2015-02-19 14:24:09
【问题描述】:

我试图在 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 的某个密集子集上绘制函数?

【问题讨论】:

  • 我建议你使用 Mayavi。
  • 如前所述,使用其他软件(如 Mayavi)是一个更好的选择。可以使用的两种技术是:等值曲面和体积渲染。
  • @HYRY 谢谢,这正是我想要的

标签: python matplotlib data-visualization mayavi


【解决方案1】:

正如上面 cmets 中的 @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 将图形旋转到所需的角度并保存了所需的视图

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-07
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 2015-01-21
    相关资源
    最近更新 更多