我一直在用三维图形上的彩色地图绘制我的论文的四维数据,遇到了一个复杂的问题。我使用的colormap方法会将角点处的值平均化,然后根据该值为整个瓷砖上色。如果我有一个更高的分辨率就可以了,但是我花了大约一个月的时间来运行模拟来获得我当前的数据。在
有人能提出一个改变这种状况的方法吗?最好不要通过编码我自己的线性插值所有的点来提高分辨率。在这一点上(对我来说)这可能比它值得付出更多的努力。在
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')
欢迎有任何意见,谢谢!在
以我的经验来看,
matplotlib
对于3D绘图来说并不理想。因为这样的问题,我为此切换到mayavi
(link);它可能已经帮到你了(而且看起来很漂亮!)。如果需要的话,scipy.interpolate
中有一些方便的插值工具,为了“增加”你的数据密度,请查看here。在为了清晰起见,我总是在插值曲面上标记真实的测量数据(尽管只有2D);这可能对您也是可行的。在
相关问题 更多 >
编程相关推荐