用python绘制三维笛卡尔网格

用python绘制三维笛卡尔网格,python,numpy,Python,Numpy,我刚刚开始学习python,在尝试生成图形时遇到了一个问题 我有一大组点(~42000),带有X-Y-Z坐标和几个相关变量(温度、含水量…),我想将所有这些东西绘制在一个图形中,但以我的python知识水平,这似乎是不可能的。。所有这些点都位于笛卡尔规则网格上。所以我想用numpy生成一个网格,但是我被卡住了。。基本上,我想把一维向量(比如X,Y,Z和T)转换成具有插值数据的三维网格。可能吗 你能帮我吗?检查matplotlib,它是一个很好的python绘图模块,说明得很好,你应该能找到你需要

我刚刚开始学习python,在尝试生成图形时遇到了一个问题

我有一大组点(~42000),带有X-Y-Z坐标和几个相关变量(温度、含水量…),我想将所有这些东西绘制在一个图形中,但以我的python知识水平,这似乎是不可能的。。所有这些点都位于笛卡尔规则网格上。所以我想用numpy生成一个网格,但是我被卡住了。。基本上,我想把一维向量(比如X,Y,Z和T)转换成具有插值数据的三维网格。可能吗


你能帮我吗?

检查matplotlib,它是一个很好的python绘图模块,说明得很好,你应该能找到你需要的


可能是另一种选择

我不太明白你想要什么。但是如果你打算去绘制一个4D图,你需要一个第四维度(你有想要什么的例子吗?)。我使用颜色作为另一个维度,在这个例子中,我在R^3上绘制了一个以(0,0,0)为中心的高斯函数,每个点的颜色给出了函数的值

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)


对于插值部分,您可以使用。

这是一个需要查看的复杂数据,因此我认为您需要一个能够轻松查看3D数据的工具,这是一个很好的选择

举个例子

这其中最重要的一点是,它具有高度的交互性,因此使用鼠标我可以轻松地抓住切片平面并在其周围移动。甚至倾斜它们来探索数据体积数据(这非常有用,在这种情况下,我们可以看到它的内部大部分是红色的,我们无法仅从表面猜到):

以下是代码,它只是对以下内容的一个稍加修改的版本:


是的,我当然要花上几个小时。。仍然找不到正确的答案。。谢谢你的第一手资料,但是我在他们的图书馆里找不到相关的例子。。当他们谈论3D绘图时,他们的意思是Z=f(X,Y)。实际上我想画一个伪4D图:T=f(X,Y,Z),其中X,Y,Z位于一个规则的笛卡尔网格上。。似乎是你想要的?你可以用mayavi。类似于mayavi import mlab pts=mlab.points3d(x,y,z,s)的内容。这里提供了更多信息,这听起来像是VTK问题。使用mayavi或ParaView。mayavi有一个GUI和Python脚本前端到VTK,只有paraview的GUI。如果你感觉像是一个真正的可视化WIZ,使用VC++或OpenGL从C++和Python与Cython接口。现在我可以绘制图表中的每一个点,但是正如我所说的点的数量是相当大的(>40000),所以它将不太容易操作。我的问题是:是否可以在这些点之间进行插值以查看曲面(可能是透明的,就像在paraview中一样),但在python图形中(使用matplotlib或mayavi时也是如此)…就像这个图形:绝对可以。但我不记得我的头顶上使用哪个VTK过滤器。这就是我想要的:颜色表示第四维度。我现在只需要在点之间插值,得到曲面而不是点。。但这会是微不足道的吗?这是我希望得到的结果,就像tom10建议的那样。此外,使用定值曲面也很有用。在Mayavi,您可以将其与
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()