使用三个轴网格

时间:2018-02-15 06:30:43

标签: python matplotlib

此问题与this

有关

我想绘制以下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)},有很多例子,for instance。作为一名程序员,我已经厌倦了扩展这个例子来创建一个meshgrid(X,Y,Z)。(我不确定这是否有任何意义!)没有成功。与python中的4D情节相关的大多数问题要么没有答案,要么不适合我的要求。请帮忙。

N.B。这就是我想要生成的内容(在Mathematica中生成)enter image description here

这就是我在python(!)

中尝试做的事情
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)

1 个答案:

答案 0 :(得分:0)

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

你可以试试mayavi,它是一个专门用于3d绘图的可视化软件,它也可以对第四维进行颜色编码。

这是example galery。也许atomic orbital example就是你想要的。它将相位编码为三维表面上的颜色。