我正在尝试绘制3D曲面图,使用第四个变量作为颜色比例。三个输入变量的分布没有规则间隔,但我想我已经使用griddata方法解决了这个部分。每个变量都是一个包含20个值的列表,其中一个变量是使用其他3个变量的数字代码的输出。我们的想法是使用2个输入变量加上表面图的数字代码输出,并使用第三个输入变量作为色标。当我尝试使用facecolor参数使用其他变量的值作为颜色标度时,我无法生成正确的图。我已经尝试将此变量的值标准化为0-1区间,以及其他几种方法,但在大多数情况下,我只是得到一个颜色均匀或类型错误的图。您可以在下面找到我正在尝试运行的代码。
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import matplotlib.pyplot as plt
import numpy as np
from scipy.interpolate import griddata
import matplotlib
#opening the files with the 4 variables
p1=open('par1log10.txt','r')
p2=open('par2log10.txt','r')
p3=open('par3log10.txt','r')
output=open('response.txt','r')
par1, par2, par3, output1 = ([] for i in range(4))
for a in p1:
par1.append(float(a))
for b in p2:
par2.append(float(b))
for c in p3:
par3.append(float(c))
for d in output:
output1.append(float(d))
p1.close()
p2.close()
p3.close()
output.close()
data1=np.array(par1)
data2=np.array(par2)
data3=np.array(par3)
output=np.array(output1)
fig = plt.figure()
xi = np.linspace(data1.min(),data1.max(),200)
yi = np.linspace(data2.min(),data2.max(),200)
wi = np.linspace(data3.min(),data3.max(),200)
# Interpoling unstructured data
zi = griddata((data1, data2), output, (xi[None,:], yi[:,None]), method='cubic')
# removing NaNs from the array
zi = np.nan_to_num(zi)
ax = fig.add_subplot(1, 1, 1, projection='3d', azim=210)
xig, yig = np.meshgrid(xi, yi)
#normalizing variable to interval 0-1
data3col=data3/data3.max()
surf = ax.plot_surface(xig, yig, zi, rstride=1, cstride=1, facecolor=cm.jet(data3col), linewidth=0, antialiased=False, shade=False)
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
#fig.colorbar(surf, shrink=0.5, aspect=5)
ax.set_zlim(0, 350000)
plt.show()
此版本的代码只显示一个蓝色表面,我也试过,根据列表的值构建我自己的颜色图,然后使用该颜色图但没有结果,但未成功。 这是我的第一个问题,所以我希望我没有违反任何规则或犯错误。 任何帮助都将受到极大的重视。