Python用Basemap画位势高度距平图和5880线

import xarray as xr
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.basemap import Basemap
plt.rcParams['font.sans-serif'] = ['KaiTi','SimHei']
plt.rcParams['font.size']= 12
plt.rcParams['axes.unicode_minus']=False
hgt=r"D:\论文\论文数据\nc文件1998hgt.mon.mean.nc"  #读取1998年目标文件
def DrawSeaLPJuly():
    Hgt = xr.open_dataset(hgt)["hgt"]
    time_label = (Hgt["time"].dt.month == [6,7,8])    #选定6,7,8三个月
    Hgt_main=Hgt[time_label].loc[dict(level=500)].mean("time").loc[60:0,70:180]  # 选定气压为500hpa,选定经纬度为0~60N,70~180E
    lat = np.array(Hgt_main['lat'])  # 设置好经纬度
    lon=np.array(Hgt_main['lon'])  # 设置好经纬度
   #  算气候状态(1981~2010)30年:
    i=1981
    hgt1=r"D:\论文\论文数据\nc文件1998hgt.mon.mean.nc"
    Hgt1= xr.open_dataset(hgt1)["hgt"]
    time_label = (Hgt1["time"].dt.month == [6, 7, 8])
    Hgt_total = Hgt1[time_label].loc[dict(level=500)].mean("time").loc[60:0,70:180]
    i=i+1
    while i<=2010:
        hgt1=r"D:\论文\论文数据\nc文件"+str(i)+"hgt.mon.mean.nc"
        Hgt1=xr.open_dataset(hgt1)["hgt"]
        time_label = (Hgt1["time"].dt.month == [6,7,8])
        Hgt_total = Hgt1[time_label].loc[dict(level=500)].mean("time").loc[60:0,70:180]+Hgt_total
        i=i+1
    Hgt_total=Hgt_total/30  #求平均
    con=Hgt_main-Hgt_total
    X, Y = np.meshgrid(lon, lat)
    fig = plt.figure(figsize=[12, 18])
    ax = fig.add_subplot(111)
    m = Basemap(lat_0=40, lon_0=130, projection="cyl",
                llcrnrlon=70,  # 地图左边经度
                llcrnrlat=0.0,  # 地图下方纬度
                urcrnrlon=180.0,  # 地图上方经度
                urcrnrlat=60.0,  # 地图上方纬度
                resolution=None,  # 分辨率,这里设置为无
                )
    m.readshapefile(r"D:\论文\论文数据\Shp\世界国家SHP\世界国家", "World Map", color="k", linewidth=1.2)  # 读取shp文件,想放多少就写多少这个代码
    m.readshapefile(r"D:\论文\论文数据\Shp\全国水系矢量数据\hyd1_4l", "river Map", color="lightskyblue", linewidth=1)  #river Map是名字,可任意换,但必须有
    levels = np.arange(-30, 70, 12)
    c = m.contourf(X, Y, con,cmap="RdBu_r",alpha=0.7)  # 绘制等值线
    a1=m.contour(X, Y, con, colors="k", linewidths=0.5)
    # ax.clabel(a2, fmt="%2.0f", fontsize=10, colors="k")  #色标
    a2=m.contour(X,Y, Hgt_main, range(5880, 5890, 10),linewidths=0.5,colors='r')   #画出特定等值线,range()函数画出其实和重点线,以多少为间隔
    ax.clabel(a2, fmt="%2.0f", fontsize=10, colors="r")
    ax.clabel(a1, fmt="%2.0f", fontsize=10, colors="g")  #标出值
    # fig.colorbar(c, ax=ax, orientation='horizontal')
    plt.yticks([0, 10, 20, 30, 40, 50, 60], ["EQ", "10°N", "20°N", "30°N", "40°N", "50°N", "60°N"], fontsize=16)  #设置x和y坐标轴
    plt.xticks([70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180],
               ["70°E", "80°E", "90°E", "100°E", "110°E", "120°E", "130°E", "140°E", "150°E", "160°E", "170°E", "180°E"],
               fontsize=16)
    plt.ylabel("纬度", fontsize=16)
    plt.xlabel("经度", fontsize=16)
    m.drawparallels(np.arange(0, 60, 10))
    m.drawmeridians(np.arange(70, 181, 10))  # 画出格线
    plt.title("500hpa位势高度距平场", fontsize=18)  # 写上title

    plt.show()


if __name__ == '__main__':
    DrawSeaLPJuly()

本文数据为NCEP/NCAR 再分析数据,感觉这个真是比ERA5好用,就是分辨率和内容类型比ERA5差。链接如下:https://psl.noaa.gov/data/gridded/data.ncep.reanalysis.html。本文比较初级,就是画了等值线还有一个画出目标区域的线,shp文件网上有很多,想要可以发邮箱在评论区,我把我收藏的都给可以奉上。文中我把一个大文件裁剪成30个小文件,毫无必要,这个可以再优化下。希望能给大家提供帮助。

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python basemap是一个用于地图绘制和制图的Python库。它的功能强大,可以在地理上绘制各种类型的地图,如地理热图、气象图、地理标记等。 首先,Python basemap提供了各种投影方式,如正射投影和等距圆柱投影等。这些投影方式允许用户根据需要来选择合适的投影方式来呈现地图。此外,还可以设置地图的中心和范围,从而实现局部地区的放大和整体地图的展示。 其次,Python basemap还支持添加和绘制各种地理信息的功能。它可以导入和绘制地形数据、海岸线、边界线、湖泊等要素,使得地图更加真实和细致。同时,还可以通过添加经纬度坐标网格线来更好地帮助用户定位和标记位置。 另外,Python basemap还支持绘制各种标记和符号,以帮助用户更好地进行数据展示。它可以在地图上绘制散点图、连线图、区域图等,以及添加标签和注释来更好地说明数据和地理信息。 此外,Python basemap还提供了许多绘图和制图的工具和功能,如颜色填充、图例设置、图像合并等。这些功能可以使用户更加轻松地完成地图绘制任务,并且可以根据需求来调整和优化地图的输出效果。 总的来说,Python basemap是一个功能强大且易于使用的工具,可以帮助用户在地图绘制和制图方面取得令人满意的结果。无论是进行数据可视化、地理分析还是地理教学,它都是一个值得推荐的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值