MeteoInfoLab脚本示例:图形版面、点标注
在MeteoInfoLab界面中,图形的大小会随着它所在的窗口的大小改变而改变,在需要精确控制图中一些要素的位置的时候会比较困难,这时可以用figure函数的一些参数来控制图形版面大小。figure函数是创建一个新的图形窗体,其中的参数figsize=None,即缺省情况下图形窗体中的图形不指定大小,而是由窗体的大小决定。通过给figsize赋值为一个有2个元素的列表(第一元素为宽度、第二个元素为高度,单位为像素),即可以固定图形版面(绘图区域大小不随窗口变化而变化)。注意给定版本大小后在保存图片的语句中savefig就不要给高、宽值了。
之前的帖子讲到了可以在geoshow函数中设置labelfield等参数来给点图层添加标注,但这种自动标注经常不符合绘图要求,比如我们需要标注出所有省会城市的名称,且不能出现压盖情况,首先在geoshow函数中设置avoidcoll=False,把自动避免压盖的功能去掉,这样就可以显示所有的城市名,但会有压盖现象,我们可以通过图层的movelabel(label, x=0, y=0)来移动标注,label为某个城市的名称(注意中文名称之前需要加u表示为unicode编码,比如:u'北京'),x和y是移动的值。
这里用一个比较实用的例子来说明,绘制中国6小时降水分布图,给定图形版面大小,并标注所有省会城市名:
- #Set data folders
- basedir = 'D:/MyProgram/Distribution/java/MeteoInfo/MeteoInfo'
- datadir = os.path.join(basedir, 'sample/MICAPS')
- mapdir = os.path.join(basedir, 'map')
- #Read shape files
- bou2_layer = shaperead(os.path.join(mapdir, 'bou2_4p.shp'))
- bou1_layer = shaperead(os.path.join(mapdir, 'bou1_4l.shp'))
- china_layer = shaperead(os.path.join(mapdir, 'china.shp'))
- city_layer = shaperead(os.path.join(mapdir, 'res1_4m.shp'))
- #Read station data
- f = addfile_micaps(os.path.join(datadir, '10101414.000'))
- pr = f.stationdata('Precipitation6h')
- #griddata function - interpolate
- x = arange(75, 135, 0.5)
- y = arange(18, 55, 0.5)
- prg = pr.griddata((x, y), method='idw', radius=3)
- #Plot
- figure(figsize=[700,550], newfig=False)
- proj = projinfo(proj='lcc', lon_0=105, lat_1=25, lat_2=47)
- axesm(projinfo=proj, position=[0.01, 0.01, 0.99, 0.99], axison=False, gridlabel=False, frameon=False)
- geoshow(bou2_layer, edgecolor='lightgray')
- geoshow(bou1_layer, facecolor=(0,0,255))
- geoshow(city_layer, facecolor='r', size=4, labelfield='NAME', fontname=u'楷体', fontsize=16, yoffset=15, avoidcoll=False)
- geoshow(china_layer, visible=False)
- city_layer.movelabel(u'西宁', -15)
- city_layer.movelabel(u'海口', -20, -10)
- city_layer.movelabel(u'澳门', 0, -25)
- city_layer.movelabel(u'香港', 20, -10)
- city_layer.movelabel(u'福州', -10)
- city_layer.movelabel(u'合肥', -18)
- city_layer.movelabel(u'杭州', 0, -20)
- city_layer.movelabel(u'上海', 18)
- city_layer.movelabel(u'太原', 0, -20)
- city_layer.movelabel(u'天津', 15)
- city_layer.movelabel(u'石家庄', -10)
- levs = [0.1, 1, 2, 5, 10, 20, 25, 50, 100]
- cols = [(255,255,255),(170,240,255),(120,230,240),(200,220,50),(240,220,20),(255,120,10),(255,90,10), \
- (240,40,0),(180,10,0),(120,10,0)]
- layer = contourfm(prg, levs, colors=cols)
- masklayer(china_layer, [layer])
- #colorbar(layer, shrink=0.5, aspect=15)
- legend(legend=layer.legend(), loc='lower left', frameon=False)
- axism([79, 128, 14, 53])
- text(95, 53, u'全国降水量实况图', fontname=u'黑体', fontsize=18)
- text(95, 51, u'(2010-10-14 08:00 至 2010-10-14 14:00)', fontname=u'黑体', fontsize=16)
- #Add south China Sea
- sc_layer = bou1_layer.clone()
- axesm(position=[0.15,0.05,0.15,0.2], axison=False)
- geoshow(sc_layer, facecolor=(0,0,255))
- xlim(106, 123)
- ylim(2, 23)
- #savefig('D:/Temp/test/rain_test.png')
MeteoInfoLab脚本示例:图形版面、点标注的更多相关文章
- MeteoInfoLab脚本示例:计算垂直螺旋度
尝试编写MeteoInfoLab脚本计算垂直螺旋度,结果未经验证. 脚本程序: print 'Open data files...' f_uwnd = addfile('D:/Temp/nc/uwnd ...
- MeteoInfoLab脚本示例:闪电位置图
这个脚本示例读取文本格式的闪电数据,读出每条闪电记录的经纬度和强度,在地图上绘制出每个闪电的位置,并用符号和颜色区分强度正负.数据格式如下:0 2009-06-06 00:01:16.6195722 ...
- MeteoInfoLab脚本示例:FY-3C全球火点HDF数据
FY-3C全球火点HDF数据包含一个FIRES二维变量,第一维是火点数,第二维是一些属性,其中第3.4列分别是火点的纬度和经度.下面的脚本示例读出所有火点经纬度并绘图.脚本程序: #Add data ...
- MeteoInfoLab脚本示例:Maskout图形
Maskout通常有两种类型:Maskout图形和Maskout数据.这里是Maskout图形的示例.需要用shaperead读取地图数据形成图层作为Maskout图层(这里是中国的行政区域china ...
- MeteoInfoLab脚本示例:加载地图图层
应用最广泛的的地图数据应该是shape格式,网络上有很多免费下载资源.MeteoInfoLab中读取shape文件的函数是shaperead,参数即文件名,返回数据包含图形和属性信息的图层对象.矢量图 ...
- MeteoInfoLab脚本示例:创建netCDF文件(合并文件)
在MeteoInfoLab中增加了创建netCDF文件并写入数据的功能,这里利用合并多个netCDF文件为一个新的netCDF文件为例.1.创建一个可写入的netCDF文件对象(下面用ncfile表示 ...
- MeteoInfoLab脚本示例:Trajectory
示例读取HYSPLIT模式输出的气团轨迹数据文件,生成轨迹图层,并显示轨迹各节点的气压图.脚本程序: f = addfile_hytraj('D:/MyProgram/Distribution/jav ...
- MeteoInfoLab脚本示例:读取文本文件绘制散度图
MeteoInfoLab中读取文本文件数据的函数是asciiread,获取文本文件行.列数的函数是numasciirow和numasciicol,和NCL中函数名一致,但都是小写字母.本例中的示例数据 ...
- MeteoInfoLab脚本示例:多Y轴图
数据范围相差比较大的数据序列进行对比的时候多Y轴图就很重要了.MeteoInfoLab中提供了一个twinx函数来根据已有的坐标系(Axes)生成一个新的Axes,这个命令会使得已有的Axes不绘制右 ...
随机推荐
- ZT:C/C++ 字符串与数字相互转换
转载地址:https://www.cnblogs.com/happygirl-zjj/p/4633789.html 一.利用stringstream类 1. 字符串到整数 stringstre ...
- 做SQL解析时遇到的问题
相对于算术表达式,Json和XML等解析,SQL就比较复杂了. 举个例子来说:符号“(”是目前的SqlAnalyzer1.00中作为进入递归的标志之一,到“)”结束,中间是个查询语句.如果测试用例也是 ...
- H5游戏定制,4大优势助力企业曝光10W+
H5游戏定制,4大优势助力企业曝光10W+ 移动互联网已成为了人们生活的一部分,普通广告形式已很难吸引用户的眼球,企业要怎样才能将广告更广泛的传播给更多用户呢?根据TOM游戏多年从业经验,为大家分享以 ...
- python 3 for与while嵌套
- vue大型项目高性能优化----想说爱你真的不容易
一.背景 目前公司的电子合同采用表单设计器+合同业务配合实现,做了半年多后终于上线,但是下边员工普遍反映卡顿,甚至卡死,爆栈.尤其是新增和修改合同页面,因为这部分数据量大,逻辑复杂,很容易崩溃,所 ...
- Socket 核心原理分享
Socket 的个人故事.希望通过这篇文章让你弄懂什么是 Socket,明白 TCP 和 UDP 协议的通讯,明白长连接和短连接的优缺点,明白 BIO.NIO.AIO的区别. Socket 大家好,我 ...
- redis命令和RedisTemplate操作对应表
redis命令和RedisTemplate操作对应表 redisTemplate.opsForValue();//操作字符串 redisTemplate.opsForHash();//操作hash r ...
- 本机浏览器无法访问linux的tomcat
原因:Centos7的防火墙拦截了tomcat访问的8080端口 Redhat 等等linux firewall-cmd --permanent --zone=public --add-port=8 ...
- 滴滴开源AgileTC:敏捷测试用例管理平台
桔妹导读:AgileTC是一套敏捷的测试用例管理平台,支持测试用例管理.执行计划管理.进度计算.多人实时协同等能力,方便测试人员对用例进行管理和沉淀.产品以脑图方式编辑可快速上手,用例关联需求形成流 ...
- 刷题[网鼎杯 2020 朱雀组]phpweb
解题思路 打开是一个蛮有意思的背景,众生皆懒狗,是自己没错了.源代码看一看,啥都没有.抓个包 诶,一看到func和p两个参数,想到了call_user_func(). 尝试着把date改成system ...