用三轴网格在python中绘制4-D数据

用三轴网格在python中绘制4-D数据,python,matplotlib,Python,Matplotlib,这个问题与 我想绘制以下4列数据 X Y Z V(X,Y,Z) 1 1 1 1.1 1 1 2 1.0 1 1 3 1.0 1 2 1 0.9 1 2 2 1 1 2 3 1.8 1 3 1 0.9 1 3 2 1 1 3 3 1.1 2 1 1 1.1 2 1 2 1.0 2 1 3 1.0 2 2 1 0.5 2 2 2 1.7 2 2 3 1.2 2 3 1 0.9 2 3 2 1

这个问题与

我想绘制以下4列数据

X  Y  Z  V(X,Y,Z)
1  1  1  1.1
1  1  2  1.0
1  1  3  1.0
1  2  1  0.9
1  2  2  1
1  2  3  1.8
1  3  1  0.9
1  3  2  1
1  3  3  1.1

2  1  1  1.1
2  1  2  1.0
2  1  3  1.0
2  2  1  0.5
2  2  2  1.7
2  2  3  1.2
2  3  1  0.9
2  3  2  1
2  3  3  1.1

3  1  1  1.3
3  1  2  1.0
3  1  3  1.2
3  2  1  0.9
3  2  2  1
3  2  3  1.1
3  3  1  0.8
3  3  2  1.2
3  3  3  1.4
所以,基本上我想画一个有3个轴的图形,用颜色表示函数的值。例如,绘图{X,Y,Z(X,Y)}有很多例子,。作为一名程序员,我已经厌倦了扩展这个例子来创建一个网格网格(X,Y,Z)。(我不确定这是否有意义!),但没有成功。python中与4D绘图相关的大多数问题要么没有答案,要么不适合我的要求。请帮忙

注意:这是我想生成的(在Mathematica中生成)

这就是我在python中尝试做的(!)


Matplotlib在绘制三维图形方面不是很好

您可以尝试一下mayavi,它是一款专门用于3d绘图的可视化软件,还可以对第四维度进行颜色编码


这是一个例子。也许这就是你想要的。它将相位编码为三维表面上的颜色。

我想你需要散点图。我已经厌倦了制作第一个示例中给出的
散点(x,y,z,c=c)
之类的东西,但是,对于这种网格数据,无法做到。你能发布你尝试过的代码吗,你得到的结果,然后解释你想要什么不同?否则,在你最终得到你想要的东西之前,会有很多猜测。我已经进行了相应的编辑。通常很难在3D绘图上可视化4D数据。在2D绘图上可视化3D数据相当容易,因为您只有一个图层,并且可以使用颜色对第三维进行编码。对于3D图上的4D数据,这适用于整个空间的子集,即许多示例中所示的曲面图。这里要求的是用数据点填充整个3D空间。但这会导致大多数点被其他人隐藏。我曾尝试在anaconda中安装mayavi,但没有安装!所以,现在我不能尝试mayavi。@阿基米德我从来没有使用过anaconda,我在Linux系统上工作,在使用pip进行安装时从来没有遇到过问题。对不起,我帮不了你。经过一点努力,我已经在ubuntu中安装了带有anaconda的mayaVi。因为这是我第一次尝试mayaVi,所以我还没能画出来。您能否在上面的示例中演示如何使用mayaVi绘图?
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import numpy as np
from scipy.interpolate import griddata

data = np.loadtxt('mydata.dat')

X = data[:,0]
Y = data[:,1]
Z = data[:,2]
val= data[:3]


xi = np.linspace(X.min(), X.max(), 3)


yi = np.linspace(Y.min(), Y.max(), 3)

zi = np.linspace(Y.min(), Y.max(), 3)

vali = griddata((X,Y,Z), val, (xi[None,:], yi[:,None], zi[:,None]))



fig = plt.figure(figsize=plt.figaspect(0.5))
ax = Axes3D(fig)


xig, yig, zig = np.meshgrid(xi, yi, zi)




 surf = ax.plot_surface(xig, yig, zig, vali,cmap=cm.jet, linewidth=0, 
 antialiased=False, shade=True,alpha=1.0)