此问题与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中生成)
这就是我在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)
答案 0 :(得分:0)
Matplotlib在绘制三维图形方面不是很好。
你可以试试mayavi,它是一个专门用于3d绘图的可视化软件,它也可以对第四维进行颜色编码。
这是example galery。也许atomic orbital example就是你想要的。它将相位编码为三维表面上的颜色。