我刚刚开始学习python,在尝试制作数字时遇到了问题。
我有一大堆积分(~42000),XYZ坐标和几个变量相关联(温度,含水量......)我想在一个图中绘制所有这些东西,但似乎不可能蟒蛇知识的水平..所有这些点都位于笛卡尔规则网格上。所以我想生成一个numpy的网格网格,但是我被卡住了。基本上我想将1D向量(X,Y,Z和T让我们说)转换成带有插值数据的3d网格。这可能吗?
你能帮我吗?
答案 0 :(得分:8)
这是一个复杂的数据,所以我认为您需要一个专门用于查看3D数据的工具,MayaVi是一个很好的选择。
这是一个例子,
最重要的一点是它具有高度的互动性,因此使用鼠标我可以轻松地抓住并在切片平面上移动。甚至倾斜它们来探索数据体积数据(这是非常有用的,因为在这种情况下我们可以看到它内部大部分是红色的,我们无法从表面猜测出来):< / p>
以下是代码,它只是this的略微修改版本:
from mayavi import mlab
import numpy as np
x, y, z = np.ogrid[-2:2:20j, -2:2:20j, -2:2:20j]
s = np.sin(x*y*z + x + y*z)/(x*y*z + x + y*z)
mlab.pipeline.image_plane_widget(mlab.pipeline.scalar_field(s),
plane_orientation='x_axes',
slice_index=20,
)
mlab.pipeline.image_plane_widget(mlab.pipeline.scalar_field(s),
plane_orientation='y_axes',
slice_index=20,
)
mlab.pipeline.image_plane_widget(mlab.pipeline.scalar_field(s),
plane_orientation='z_axes',
slice_index=20,
)
mlab.outline()
mlab.show()
答案 1 :(得分:3)
答案 2 :(得分:2)
我不太了解你想要什么。但是如果你想要一个4D的情节,你将需要第四个维度(你有一个你想要的例子吗?)。我使用颜色作为另一个维度,在这个例子中,我在以(0,0,0)为中心的R ^ 3上绘制了高斯函数,每个点的颜色给出了函数的值。
import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
X, Y, Z = np.mgrid[-1:1:10j, -1:1:10j, -1:1:10j]
T = np.exp(-X**2 - Y**2 - Z**2)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
scat = ax.scatter(X, Y, Z, c=Z.flatten(), alpha=0.5)
fig.colorbar(scat, shrink=0.5, aspect=5)
对于插值部分,您可以使用scipy.interpolate。
答案 3 :(得分:1)
Mayavi可能是另一种选择