• 格点数据可视化(美国站点的日降雨数据)


    获取美国站点的日降雨量的格点数据,并且可视化
    在这里插入图片描述

    导入模块

    from datetime import datetime, timedelta
    from urllib.request import urlopen
    
    import cartopy.crs as ccrs
    import cartopy.feature as cfeature
    import matplotlib.colors as mcolors
    import matplotlib.pyplot as plt
    from metpy.units import masked_array, units
    from netCDF4 import Dataset
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    读取数据

    nc = Dataset('20200309_conus.nc')
    prcpvar = nc.variables['observation']
    data = masked_array(prcpvar[:], units(prcpvar.units.lower())).to('mm')
    x = nc.variables['x'][:]
    y = nc.variables['y'][:]
    proj_var = nc.variables[prcpvar.grid_mapping]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    设置投影

    globe = ccrs.Globe(semimajor_axis=proj_var.earth_radius)
    proj = ccrs.Stereographic(central_latitude=90.0,
                              central_longitude=proj_var.straight_vertical_longitude_from_pole,
                              true_scale_latitude=proj_var.standard_parallel, globe=globe)
    
    • 1
    • 2
    • 3
    • 4
    fig = plt.figure(figsize=(10, 10))
    ax = fig.add_subplot(1, 1, 1, projection=proj)
    
    # 绘制海岸线、国界线、州界线
    ax.coastlines()
    ax.add_feature(cfeature.BORDERS)
    ax.add_feature(cfeature.STATES)
    
    # 设置降雨量等级间隔
    clevs = [0, 1, 2.5, 5, 7.5, 10, 15, 20, 30, 40,
             50, 70, 100, 150, 200, 250, 300, 400, 500, 600, 750]
    # In future MetPy
    # norm, cmap = ctables.registry.get_with_boundaries('precipitation', clevs)
    # 单独设置cmap
    cmap_data = [(1.0, 1.0, 1.0),
                 (0.3137255012989044, 0.8156862854957581, 0.8156862854957581),
                 (0.0, 1.0, 1.0),
                 (0.0, 0.8784313797950745, 0.501960813999176),
                 (0.0, 0.7529411911964417, 0.0),
                 (0.501960813999176, 0.8784313797950745, 0.0),
                 (1.0, 1.0, 0.0),
                 (1.0, 0.6274510025978088, 0.0),
                 (1.0, 0.0, 0.0),
                 (1.0, 0.125490203499794, 0.501960813999176),
                 (0.9411764740943909, 0.250980406999588, 1.0),
                 (0.501960813999176, 0.125490203499794, 1.0),
                 (0.250980406999588, 0.250980406999588, 1.0),
                 (0.125490203499794, 0.125490203499794, 0.501960813999176),
                 (0.125490203499794, 0.125490203499794, 0.125490203499794),
                 (0.501960813999176, 0.501960813999176, 0.501960813999176),
                 (0.8784313797950745, 0.8784313797950745, 0.8784313797950745),
                 (0.9333333373069763, 0.8313725590705872, 0.7372549176216125),
                 (0.8549019694328308, 0.6509804129600525, 0.47058823704719543),
                 (0.6274510025978088, 0.42352941632270813, 0.23529411852359772),
                 (0.4000000059604645, 0.20000000298023224, 0.0)]
                
    cmap = mcolors.ListedColormap(cmap_data, 'precipitation')
    norm = mcolors.BoundaryNorm(clevs, cmap.N)
    
    cs = ax.contourf(x, y, data, clevs, cmap=cmap, norm=norm)
    
    # 添加colorbar
    cbar = plt.colorbar(cs, orientation='horizontal')
    cbar.set_label(data.units)
    # 设置标题
    ax.set_title(prcpvar.long_name + ' for period ending ' + nc.creation_time)
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    数据怎样获取

    dt = datetime.utcnow() - timedelta(days=1)  # 获取过去1天的时间
    url = ('http://water.weather.gov/precip/downloads/{dt:%Y/%m/%d}/nws_precip_1day_'
           '{dt:%Y%m%d}_conus.nc'.format(dt=dt))
    data = urlopen(url).read()
    nc = Dataset('data', memory=data)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    显示数据

    import xarray as xr
    from xarray.backends import NetCDF4DataStore
    data = xr.open_dataset(NetCDF4DataStore(nc))
    data
    
    • 1
    • 2
    • 3
    • 4

    保存为nc数据

    data.to_netcdf('{dt:%Y%m%d}_conus.nc'.format(dt=dt),'w')
    
    • 1
  • 相关阅读:
    Matlab:Matlab编程语言应用之数学计算(向量&数组&矩阵索引、矩阵索引&四则运算、行列式与线性系统求解)的简介、案例实现之详细攻略
    systrace使用注意事项
    SAP-QM-采购过程模式与特性检验不匹配QD244
    【C语言】-文件操作
    信息学奥赛一本通:2037:【例5.4】约瑟夫问题
    vue2+elementUI 仿照SPC开发CPK分析工具
    Shopee开店要花多少钱?
    浅析伪类和伪元素
    Django TypeError: Abstract models cannot be instantiated.错误解决方案
    按关键字搜索商品 (淘宝)
  • 原文地址:https://blog.csdn.net/weixin_45492560/article/details/133441978