假设您有两个txt文件,即 data-z600.txt 和 data-z1200.txt ,与python脚本位于同一文件夹中,其内容完全相同
data-z600.txt (您的)
XA YA ZA GA200 0 600 1.27600 0 600 1.541200 0 600 1.491800 0 600 1.342400 0 600 1.273000 0 600 1.25200 600 600 1.28600 600 600 1.961200 600 600 1.121800 600 600 1.062400 600 600 1.063000 600 600 1.06
和 data-z1200.txt ( 故意 发明)
XA YA ZA GA200 0 1200 1.31600 0 1200 21200 0 1200 1.631800 0 1200 1.362400 0 1200 1.313000 0 1200 1.35200 600 1200 1.38600 600 1200 1.361200 600 1200 1.21800 600 1200 1.12400 600 1200 1.13000 600 1200 1.11
让我们导入所有必需的库
# librariesfrom mpl_toolkits.mplot3d import Axes3Dimport matplotlib.pyplot as pltimport scipy.interpolate as sifrom matplotlib import cmimport pandas as pdimport numpy as np
和定义
grids_maker,这并不准备包含在一个给定的文件数据的作业的功能,这里有针对性的 通过 了
filepath论证。
def grids_maker(filepath): # Get the data df = pd.read_csv(filepath, sep=' ') # Make things more legible xy = df[['XA', 'YA']] x = xy.XA y = xy.YA z = df.ZA g = df.GA reso_x = reso_y = 50 interp = 'cubic' # or 'nearest' or 'linear' # Convert the 4d-space's dimensions into grids grid_x, grid_y = np.mgrid[ x.min():x.max():1j*reso_x, y.min():y.max():1j*reso_y ] grid_z = si.griddata( xy, z.values, (grid_x, grid_y), method=interp ) grid_g = si.griddata( xy, g.values, (grid_x, grid_y), method=interp ) return { 'x' : grid_x, 'y' : grid_y, 'z' : grid_z, 'g' : grid_g, }让我们使用
grids_maker文件列表,获取每个文件第4维的极值。
# Let's retrieve all files' contentsfgrids = dict.fromkeys([ 'data-z600.txt', 'data-z1200.txt'])g_mins = []g_maxs = []for fpath in fgrids.keys(): fgrids[fpath] = grids = grids_maker(fpath) g_mins.append(grids['g'].min()) g_maxs.append(grids['g'].max())
让我们创建(所有文件统一)色标
# Create the 4th color-rendered dimensionscam = plt.cm.ScalarMappable( norm=cm.colors.Normalize(min(g_mins), max(g_maxs)), cmap='jet' # see https://matplotlib.org/examples/color/colormaps_reference.html)
…最后制作/显示情节
# Make the plotfig = plt.figure()ax = fig.gca(projection='3d')for grids in fgrids.values(): scam.set_array([]) ax.plot_surface( grids['x'], grids['y'], grids['z'], facecolors = scam.to_rgba(grids['g']), antialiased = True, rstride=1, cstride=1, alpha=None )plt.show()



