wrfout_画图

余生颓废 提交于 2019-11-27 08:14:41
from netCDF4 import Datasetfrom datetime import timedelta, datetimeimport osimport pandas as pdfrom wrf import getvarimport matplotlib as mplmpl.use('Agg')import matplotlib.pyplot as pltdef get_para_data(para_name, time_range, file):    para_data = []    for i in time_range:        z = getvar(file, para_name, timeidx=i, meta=False)  # meta默认true : cat,false :join        z = z[:, row, col]        para_data.extend(z)    return para_datadef plot_uv(p, u, v, save_path):    time_ids = [0, 3, 6, 9, 12, 15, 18, 21]    plt.figure(figsize=(14, 8))    for k in range(8):        ax = plt.subplot(2, 4, k + 1)        pp = p[time_ids[k] * 30:(time_ids[k] + 1) * 30]        xx = pp * 0        uu = u[time_ids[k] * 30:(time_ids[k] + 1) * 30]        vv = v[time_ids[k] * 30:(time_ids[k] + 1) * 30]        plt.sca(ax)        Q = plt.quiver(xx, pp, uu, vv, units='x', scale=3.5)        plt.quiverkey(Q, 0.25, 1.03, 5, '5 m/s', labelpos='W')        plt.ylim(0, 1500)        plt.xlim(-10, 10)        plt.xticks([0], [""])        plt.text(-8, 150, str(time_ids[k]) + " BJT")        if k in [0, 4]:            plt.ylabel("Height (m)")    plt.tight_layout()    plt.savefig(save_path)    plt.close()def plot_temp(p, t, save_path):    time_ids = [0, 3, 6, 9, 12, 15, 18, 21]    plt.figure(figsize=(14, 8))    for k in range(8):        ax = plt.subplot(2, 4, k + 1)        pp = p[time_ids[k] * 30:(time_ids[k] + 1) * 30]        tt = t[time_ids[k] * 30:(time_ids[k] + 1) * 30]        plt.sca(ax)        plt.plot(tt, pp, '-ok')        plt.ylim(0, 1500)        plt.xlim(-10, 10)        plt.text(-8, 150, str(time_ids[k]) + " BJT")        if k in [0, 4]:            plt.ylabel("Height (m)")        if k > 3:            plt.xlabel("Temp ($^o$C)")    plt.tight_layout()    plt.savefig(save_path)    plt.close()if __name__ == '__main__':    # ------------------------------------------显示目录-----------------------------------------------------    nc_dir = r'/home/share/model/CMAQ_new/output/wrfout'    save_dir = r'/home/gzblue/xgx/1205/1220/data'    # -----------------------------------------获取时间信息------------------------------------------------    tomorrow = datetime.now() + timedelta(days=1)    after_tomorrow = datetime.now() + timedelta(days=2)    tomorrow, after_tomorrow = tomorrow.strftime('%Y%m%d'), after_tomorrow.strftime('%Y%m%d')    today = datetime.now().strftime('%Y%m%d')    # print(today,tomorrow,after_tomorrow)    print('Lastest modified time:', today, '!')    # -----------------------------------------获得nc文件路径------------------------------------------------    nc_path = os.path.join(nc_dir, today, [i for i in os.listdir(os.path.join(nc_dir, today)) if 'd03' in i][0])    print(nc_path)    if not os.path.exists(nc_path):        print('Today\'s NC file is not found!')        raise IOError    # ------------------------------------------获得存图路径------------------------------------------------    save_png_dir = os.path.join(save_dir, today)    if not os.path.exists(save_png_dir):        os.makedirs(save_png_dir)    # ------------------------------------------当csv不存在时------------------------------------------------    csv_path = os.path.join(save_png_dir, 'data.csv')    print(csv_path)    if not os.path.exists(csv_path):        data = pd.DataFrame()        file = Dataset(nc_path)        row, col = 268, 144  # 固定点的索引        time_range = list(range(28, 76, 3))        para_names = ['z', 'ua', 'va', 'tc']        for para_name in para_names:            data[para_name] = get_para_data(para_name, time_range, file)        file.close()        data.to_csv(csv_path)        print('CSV is saved!')    # ------------------------------------------读csv画图------------------------------------------------    data = pd.read_csv(csv_path)    data_z = data['z'].values    data_ua = data['ua'].values    data_va = data['va'].values    data_tc = data['tc'].values    save_uv_path = os.path.join(save_png_dir, tomorrow + '_UV_19.png')    save_t_path = os.path.join(save_png_dir, tomorrow + '_T_19.png')    p = data_z[:24 * 30]  # 30层    u = data_ua[:24 * 30]    v = data_va[:24 * 30]    t = data_tc[:24 * 30]    plot_uv(p, u, v, save_uv_path)    plot_temp(p, t, save_t_path)    print(tomorrow, 'is OK!')    save_uv_path = os.path.join(save_png_dir, after_tomorrow + '_UV_19.png')    save_t_path = os.path.join(save_png_dir, after_tomorrow + '_T_19.png')    p = data_z[24 * 30:]    u = data_ua[24 * 30:]    v = data_va[24 * 30:]    t = data_tc[24 * 30:]    plot_uv(p, u, v, save_uv_path)    plot_temp(p, t, save_t_path)    print(after_tomorrow, 'is OK!')
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!