小白学习Basemap气象画地图的第四天(省级温度分布)

小白学习Basemap气象画地图的第四天(省级温度分布)

经过四个案例的学习,有了很大的进步,感谢(公众号:气象学家)
这次画一个省级温度分布,原理和程序与之前的全国一样,这里就不多说了,可以看注释,shp文件的读取可以看上一个帖子,就是怕这里大家出问题:
上图
在这里插入图片描述

完整代码

from matplotlib.path import Path
from matplotlib.patches import PathPatch
import matplotlib.pyplot as plt
import numpy as np
import shapefile
import xarray as xr
from mpl_toolkits.basemap import Basemap


#设置画图字体的大小
plt.rcParams.update({'font.size':20})
#解决中文乱码问题
plt.rcParams['font.sans-serif'] = ['SimHei']
#解决负号乱码问题
plt.rcParams['axes.unicode_minus'] = False
#设置画布和绘图区
fig = plt.figure(figsize=[12,18])
ax = fig.add_subplot(111)
#-----------------------图像设置完毕-----------------------------


sf = shapefile.Reader('Zhejiang_province')#读取shp地图文件
shapes = sf.shapes()#获取shapefile的类
codes = []#用来存放移动路径(画图动作)
pts = shapes[0].points#边界点,这里只有一个类所以用了shapes[0],没做循环
prt = list(shapes[0].parts) + [len(pts)]#区块起始索引
for i in range(len(prt) - 1):
    codes += [Path.MOVETO]#点移动
    codes += [Path.LINETO] * (prt[i+1] - prt[i] -2)#画线
    codes += [Path.CLOSEPOLY]#这块画完,循环结束,下一块
clip = Path(pts, codes)#利用数据和路径生成一个画图动作
clip = PathPatch(clip, transform=ax.transData)#再加入ax的变换
#-----------地图边界读取完毕,mask的路径clip设置完毕--------------------

ds = xr.open_dataset('EC-Interim_monthly_2018.nc')
lat = ds.latitude
lon = ds.longitude
data = (ds['t2m'][0,::-1,:] - 273.15) # 把温度转换为℃   [0,::-1,:]表示第一个时次、纬度反向
#-----------数据读取完毕--------------------

cbar_kwargs = {
    'orientation': 'horizontal',
    'label': 'Temperature (℃)',
    'shrink': 0.02,
    'ticks': np.arange(0, 10 + 1, 1),
    'pad': -0.01,
    'shrink': 0.95
}
#-----------色标设置完毕--------------------
levels = np.arange(0, 8 + 1, 0.2)
cs = data.plot.contourf(ax=ax,levels=levels,cbar_kwargs=cbar_kwargs, cmap='Spectral_r')
#-----------数据绘制完毕--------------------

for contour in cs.collections:
        contour.set_clip_path(clip)
#------mask完毕,但是图像显示坐标还需要修改--------
m = Basemap(llcrnrlon=118.0,#地图左边经度
    llcrnrlat=27.0,#地图下方纬度
    urcrnrlon=123.0,#地图右边经度
    urcrnrlat=31.5,#地图上方纬度
    resolution = None,#分辨率,这里设置为无
    projection = 'cyl')#投影方式:默认,圆柱投影
#------Basemap类设置完毕--------
#读取图形文件,画浙江行政边界
#地级市界
m.readshapefile('Zhejiang_city','Zhejiang_city Map',color='k',linewidth=1.2)
#省界
m.readshapefile('Zhejiang_province','Zhejiang Map',color='k',linewidth=1.2)
#------Basemap类画地图完毕,下面是修饰工作--------
#画纬度
parallels = np.arange(25,35,1)
m.drawparallels(parallels,labels=[True,True,True,True],color='dimgrey',dashes=[1, 3])
#画经度
meridians = np.arange(118,123,1)
m.drawmeridians(meridians,labels=[True,True,False,True],color='dimgrey',dashes=[1, 3])
#移除原来的坐标轴标签
plt.ylabel('')
plt.xlabel('')
#设置标题
plt.rcParams.update({'font.size':30})
ax.set_title(u' 浙江省2018年1月平均气温',color='blue',fontsize= 25)

#-------------------------标两个城市---------------------
bill0 = 120.0#义乌经度
tip0  =  29.3#义乌纬度
plt.scatter(bill0, tip0,marker='.',s=100 ,color ="blue")#画个点


bill2 =  120.2#杭州经度
tip2  = 30.4#杭州纬度
plt.scatter(bill2, tip2,marker='*',s=150 ,color ="orange" )#画个点


plt.rcParams.update({'font.size':30})
plt.text(bill0-0.4, tip0+0.2, u"义乌市", fontsize= 20 )#在斜上方写个字
plt.text(bill2-0.4, tip2+0.2, u"杭州市", fontsize= 20 )#在斜上方写个字

#出图
plt.savefig("Zhengjiang_mask_T2m.png", dpi=300, bbox_inches='tight')
plt.show()

有谁需要各自省份的文件的可以给我留言,邮箱网盘都行,发给你
感谢支持。

  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 78
    评论
评论 78
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

野生的气象小流星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值