2013-10-15 61 views
0

我一直在使用3D图形上的色彩地图绘制我的论文的四维数据并遇到复杂情况。这似乎是我使用的颜色地图方法在角点平均值,然后通过该值为整个图块着色。如果我有更大的分辨率,这样可以,但是我花了大约一个月的时间来运行模拟来获取当前数据。平滑的Matplotlib颜色地图

有人可以提出一种方法来改变这种情况吗?最好不要编码我自己的所有点的线性内插来提高分辨率。这可能是更多的努力(对我而言),而不是现在的价值。

Driven=np.zeros((5,9)) 
Driver=np.zeros((5,9)) 
Compositions=np.zeros((5,9)) 
Durations=np.zeros((5,9)) 
N=np.zeros((5,9)) 
for i in range(0,5): 
    for j in range(0,9): 
     Driven[i,j]=ReservoirData[i][1][j] 
     Compositions[i,j]=ReservoirData[i][2][j] 
     Driver[i,j]=float(ReservoirData[i][0][0][:-3]) 
     Durations[i,j]=ReservoirData[i][3][j] 
maxi=Durations.max() 
mini=Durations.min() 
for i in range(0,5): 
    for j in range(0,9): 
     N[i,j]=(Durations[i,j]-mini)/(maxi-mini) 

fig = plt.figure() 
ax = fig.gca(projection='3d') 

#Important Stuff Start---------------------------------------------------- 

surf = ax.plot_surface(Driven,Driver,Compositions, facecolors=cm.jet(N), rstride=1, cstride=1, antialiased=True) 
m = cm.ScalarMappable(cmap=cm.jet) 

#Important Stuff End--------------------------------------------------------- 

m.set_array(Durations) 
cbar=plt.colorbar(m, shrink=0.8) 
cbar.set_label('Nominal Duration') 
ax.set_ylabel('Driver Pressure, kPa') 
ax.set_xlabel('Compositions, %He') 
ax.set_zlabel('Driven Pressure, kPa') 
plt.title('Three Dimensional Representation of Tailored Conditions for RS at 9.2MPa') 
fig.set_size_inches(14,8) 
plt.savefig('RS9.2.png') 

enter image description here 任何意见,欢迎,谢谢!

+0

对于像这样的问题,如果你给出一个完整的工作例子,你会得到更好的答案。您缺少'includes'和'ReservoirData'的定义。你可能想尝试构建一个你的问题的最小玩具例子。 – Hooked

回答

1

根据我的经验,matplotlib是,可以说,不适合做3D地块。由于这样的问题,我为此切换到mayavilink);它可能已经帮助你了(它看起来很漂亮!)。如果需要,在scipy.interpolate中有方便的插值工具,以“增加”你的数据密度,检查出here

为了清楚起见,我总是在插值曲面上标记真实的测量数据(只是2D)这对你也是可行的。

+0

谢谢,我没有想过mayavi,我以前见过它,但从来没有尝试过。我会看看这些方法,但我并不热衷于使用插值来找到光滑的曲面,并且将真实数据添加到曲面上可能需要一段时间才能正确使用。 –