目录
  • 获取nc数据的相关信息
  • 绘图
    • 用matplotlib绘图
    • 用Basemap绘图
    • 用Cartopy绘图
  • 总结

    获取nc数据的相关信息

    from netCDF4 import Dataset
    import numpy as np
    import pandas as pd
    import os
    import matplotlib.pyplot as plt
    
    path = "F:\\OCO2.SIF.all.daily.2001.nc"
    csv_path = "F:\\test.csv"
    dst = Dataset(path, mode='r', format="netCDF4")
    
     print(dst.variables.keys())
        data = dst.variables['all_daily_sif'][:]
        print(data.shape)
        # 输出结果如下:
        # dict_keys(['lat', 'lon', 'doy', 'all_daily_sif'])
        # (92, 360, 720)
        #可见有92个时间序列,经度(lon)、纬度(lat)的取值有720,360个
    
        # # 查看数据经纬度范围,经度-179.75~179.75,其中负值为西经,正值为东经;纬度正为北纬,负为南纬
        # # 格点分辨率为0.5度
        long = dst.variables['lon'][:]
        lati = dst.variables['lat'][:]
        print(long[0], long[-1], lati[0], lati[-1])
        print(long.shape, lati.shape)
    

    绘图

    用matplotlib绘图

    参考文献1

     # plt对某个doy的全球sif值作图。左半部分为西半球,右边是东半球
        # 选了doy为10的sif数据作图
        plt.contourf(long, lati, data[10, :, :] )
        plt.colorbar(label="Sif", orientation="horizontal")
        plt.show()
    

    运行结果:

    python读取nc数据并绘图的方法实例

    用Basemap绘图

    参考文献2

    from mpl_toolkits.basemap import Basemap
    import matplotlib.pyplot as plt
    
        lat = dst.variables['lat'][:]
        lon = dst.variables['lon'][:]
        data = dst.variables['all_daily_sif'][:]    
        data[10] = data[10]
        # use .shape function to check that arrays have
        # the correct size.
        # e.g. lon.shape
        print(data[10].shape)
    
        lon0 = lon.mean()
        lat0 = lat.mean()
        # 设置投影方式:cyl为圆柱投影、还可设置merc为mercator投影 llcrnrlat为起始lat;urcrnrlat为终止lat
        # m = Basemap(projection='merc', llcrnrlat=lat[0], urcrnrlat=lat[-1], \
    
        #              llcrnrlon=lon[0], urcrnrlon=lon[-1], ax=ax1)
       # 参数 "resolution" 用于控制地图面积边缘的精细程度,有'l'和'h'两种取值
        m = Basemap(lat_0=lat0, lon_0=lon0,projection='cyl',resolution='l')
        # 绘制等经纬度线 纬度每隔20度画一条线,且标注经纬度
        m.drawparallels(np.arange(-90., 91., 20.), labels=[1, 0, 0, 0], fontsize=10)
        m.drawmeridians(np.arange(-180., 181., 40.), labels=[0, 0, 0, 1], fontsize=10)
        m.drawcoastlines()# 绘制海岸线
        # m.drawcountries(linewidth=0.25)  # 绘制国界线
        # m.readshapefile('F:\E\data\grass_yield\shp\quhua\\省', 'states')  # 读取中国各省边界,并绘图
    
        lon, lat = np.meshgrid(lon, lat)
        xi, yi = m(lon, lat)
        # cmap是颜色,还可选‘jet'、‘spring'、‘winter'、'summer'、'autumn'
        cs = m.contourf(xi, yi, data[10],  cmap='summer')
        # pad指位置,
        cbar = m.colorbar(cs, location='bottom', pad="10%",format='%.1f')
        # cbar = m.colorbar(C, 'right', ticks=np.arange(-128, 128, 40), format='%.1f')
        font1 = {'family': 'DejaVu Sans', 'weight': 'normal', 'size': 16}
        plt.title('CSIF', font1)
        plt.show()
    

    运行效果:

    python读取nc数据并绘图的方法实例

    用Cartopy绘图

    参考文献3

    此前 Python 最常用的地图包是 Basemap,然而它将于 2020 年被弃用,官方推荐使用 Cartopy 包作为替代。Cartopy 是英国气象局开发的地图绘图包,实现了 Basemap 的大部分功能,还可以通过 Matplotlib 的 API 实现丰富的自定义效果。

    安装Cartopy包

    下载安装OSGeo4W4

    参考文献:https://zhuanlan.zhihu.com/p/129351199 

    参考文献:https://blog.csdn.net/weixin_39618339的plt画图像图例的位置怎么写代码_用basemap画气象图 

    参考文献: https://zhajiman.github.io/ 

    https://trac.osgeo.org/osgeo4w/

    总结

    声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。