爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 13484|回复: 6

python如何在图中标记出400mm等降水线

[复制链接]

新浪微博达人勋

发表于 2020-8-12 22:49:52 | 显示全部楼层 |阅读模式
2金钱
一直没找到相应的资料,不知道该怎么标记出400mm等降水线,尽量在图上也画出线

myplot.png

最佳答案

查看完整内容

ax.contour(lon,lat,precipitation,levels=np.array((400,))) 注意400后面要有个逗号
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2020-8-12 22:49:53 | 显示全部楼层
ax.contour(lon,lat,precipitation,levels=np.array((400,)))
注意400后面要有个逗号
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-8-12 22:51:55 | 显示全部楼层
另外感觉这幅图没画出南沙群岛,请问下这个又该怎么加上去
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2020-8-13 10:47:46 | 显示全部楼层
哇,能蹲个画图程序吗
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-8-13 22:46:21 | 显示全部楼层
akun 发表于 2020-8-13 10:47
哇,能蹲个画图程序吗

import xarray as xr
import maskout2
import os
import cartopy.crs as ccrs
import cartopy.feature as cfeat
import matplotlib.colors as mcolors
from cartopy.io.shapereader import Reader
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
import matplotlib.pyplot as plt
#引入shp文件路径
SHP='./shapefile/china0'
# 数据读取
ds = xr.open_dataset(r'C:\Users\Administrator\Desktop\17\pr_Amon_FGOALS-f3-L_ssp126_r1i1p1f1_gr_201501-210012.nc')
pr = ds['pr']
#取一段时间内的降水作为绘图的数据源
pr_0=pr[793:1032]
pr_ave=pr_0.mean(dim='time')*86400*30*12
lon=ds.lon
lat=ds.lat
lon_range=lon[(lon>73)&(lon<136)]
lat_range=lat[(lat>3)&(lat<54)]
pr_region=pr_ave.sel(lon=lon_range,lat=lat_range)
# 创建画图空间
#投影
proj = ccrs.PlateCarree()
#创建页面
fig = plt.figure(figsize=(16,10))
#子图
ax = fig.subplots(1, 1, subplot_kw={'projection': proj})
# 设置地图属性:加载国界、海岸线
ax.add_feature(cfeat.BORDERS.with_scale('50m'),
               linewidth=0.8, zorder=1)
ax.add_feature(cfeat.COASTLINE.with_scale('50m'),
               linewidth=0.6, zorder=1)
# 设置网格点属性
gl = ax.gridlines(crs=ccrs.PlateCarree(), draw_labels=True,
  linewidth=1.2, color='k', alpha=0.5, linestyle='--')
gl.top_labels = False  #关闭顶端标签
gl.right_labels = False  #关闭右侧标签
gl.xlabel_style={'size':12,'color':'red'}
gl.ylabel_style={'size':12,'color':'blue'}
gl.xlines=False
gl.ylines=False
gl.xformatter = LONGITUDE_FORMATTER  #x轴设为经度格式
gl.yformatter = LATITUDE_FORMATTER  #y轴设为纬度格式
plt.rcParams['font.sans-serif']=['SimHei']#显示中文字
# 设置colorbar
colorlevel=[0.1,10.0,25.0,50.0,100.0,250.0,500.0]#雨量等级
colordict=['#A6F28F','#3DBA3D','#61BBFF','#0000FF',
           '#FA00FA','#800040']#颜色列表
rain_map=mcolors.ListedColormap(colordict)#产生颜色映射
norm=mcolors.BoundaryNorm(colorlevel,rain_map.N)#生成索引

# 画图
ax.set_title('2080-2100年均降水总量',fontsize=20,loc='left')#标题
#等值线
cs=pr_region.plot.contourf(ax=ax, levels=colorlevel,
                           cmap=rain_map,
                           norm=norm,
                           transform=ccrs.PlateCarree(),
                           extend='both')
#添加省份边界
ax.add_geometries(Reader(os.path.join(SHP,'bou2_4l.shp')).geometries(),
                  ccrs.PlateCarree(),
                  facecolor='none',
                  edgecolor='k',
                  linewidth=1)
#白化
clip=maskout2.shp2clip(cs,ax,r'C:\Users\Administrator\Desktop\17\shapefile\china0\china0.shp')
#显示图像
fig.show()
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-8-13 22:53:28 | 显示全部楼层
灰色节能君 发表于 2020-8-13 11:24
ax.contour(lon,lat,precipitation,levels=np.array((400,)))
注意400后面要有个逗号

大佬好,我想请问的是如何将那一条400mm等值线在图中标记出来,最好是能用白色的线标记出来,万望大佬指点迷津,我刚刚试了一下,没有显示出来,希望大佬不吝赐教
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2020-8-13 23:19:44 | 显示全部楼层
JZMing 发表于 2020-8-13 22:53
大佬好,我想请问的是如何将那一条400mm等值线在图中标记出来,最好是能用白色的线标记出来,万望大佬指 ...

你这种写法我没试过,如果是ax.contourf(...),然后接ax.contour(....),我自己试了一下没有问题。
颜色的话直接colors=‘white’

密码修改失败请联系微信:mofangbao
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表