kalpana使用
經(jīng)過個人多天的探索,沒有搞清楚Kalpana命令行的具體使用方法,但是可以直接調(diào)用庫來使用,具體的使用方法在Kalpana的GitHub文檔里面有說明,地址如下:
https://github.com/ccht-ncsu/Kalpana
我根據(jù)代碼庫里面的示例文件,寫了一個適用于自己的代碼,目標(biāo)是可視化最大水深。原因是自己的系統(tǒng)不能直接用示例文件里面的代碼,例如代碼導(dǎo)入的文件,示例文件只導(dǎo)入了兩個文件就可以用了,但是我在試驗的時候就不行,所以我把代碼中用到的模塊都導(dǎo)入一個一遍,不完全的說,代碼中可能遇到的小問題,我可能都遇到了,總之最后展現(xiàn)形式和示例文件中差不多
#導(dǎo)入所需要的庫
import numpy as np
import shapely
import export
import kalpana
import visualizations as vs
import netCDF4
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
#netcdf文件的路徑
nc = r'/home/lock/runtest/run4/maxele.63.nc'
#定義水位等級列表,我這里定義最小水位是0,最大水位是3,間隔0.5,可以提前看看maxele.63.nc中zeta_max的范圍來確定水位等級
levels = [0,3,0.5]
#創(chuàng)建兩個子圖,一個是用來看全部區(qū)域的,一個是用來具體邊界上的數(shù)據(jù)
fig, ax = plt.subplots(figsize = (8,4), nrows = 1, ncols = 2,? subplot_kw={'projection': ccrs.PlateCarree()}, constrained_layout=True)
"""
fig: 創(chuàng)建的Figure對象
ax: 每個子圖的Axes對象,以數(shù)組的形式返回
figsize: 設(shè)置Figure的寬高為(8,4)
nrows=1, ncols=2: 設(shè)置1行2列子圖布局
subplot_kw: 設(shè)置每個子圖的坐標(biāo)投影為PlateCarree(),適用于地圖投影
constrained_layout=True: 自動設(shè)置子圖間距
"""
#可視化netCDF文件中的所有區(qū)域,需要注意的是這個點需要確定坐標(biāo),也是提前查看
vs.vis_netcdf(nc, 'zeta_max', levels, ax = ax[0], cbar = False, point_circle = shapely.Point(110.3,18.8).buffer(distance=0.1,quad_segs=5))
ax[0].set_title('Full Domain')
#設(shè)置可視化區(qū)域的經(jīng)度范圍,這個需要提前查看
xlims = [110,111]
#設(shè)置可視化區(qū)域的緯度范圍
ylims = [18.20,19.30]
#可視化文件
vs.vis_netcdf(nc,'zeta_max',levels,xlims = xlims,ylims = ylims,ax = ax[1],fig = fig,cbar = True,cbar_label =? 'Max water level')
ax[1].set_title('Wanning Domain')
#設(shè)置圖像標(biāo)題
fig.suptitle('max water level',fontsize = 16)
#plt.savefig('test.png')
plt.show()
下一個需要解決的問題是如何可視化帶有時間序列的fort.63和fort.64文件,實際上示例文件里面有關(guān)于示例文件的處理,但是目前我看到的是,在進行可視化的時候也就是挑選一個時間步的數(shù)據(jù),我期望的是可以看到變化的過程,我考慮的是有兩個解決方法:
直接用netCDF4庫處理提取每一個時間步下的數(shù)據(jù)到一個文件中,然后對這個文件進行可視化,這樣可以看到變化的過程,但是缺點在于一般提取的是一個點的數(shù)據(jù),可能無法反映區(qū)域的模擬效果
用其他開源框架中對nc文件的可視化部分,可以把結(jié)果做成一個動畫,這樣確實可以看到區(qū)域中變量隨時間變化的過程