爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 2461|回复: 4

请教添加站名问题

[复制链接]

新浪微博达人勋

发表于 2016-6-7 22:18:45 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
王老师您好,利用您给的脚本,希望添加上如其中一张图所示的站号,结果位置错乱了,要怎样改才能实现呢,谢谢!

#Get file names
datafn = 'D:/zhd/ascii/t1601.txt'
stfn = 'D:/zhd/ascii/st_160.csv'
#Get years
years = []
for i in range(1951, 2017):
    years.append(i)
yearn = len(years)
stn = 160
#Read temperature data of 160 stations from data file
temp = asciiread(datafn, shape=(yearn,stn))
temp = temp * 0.1
#Get temperature data of 2015
year = 2015
yearidx = years.index(year)
temp = temp[yearidx,:]
#Read station name and lon/lat
table = readtable(stfn, delimiter=',', format='%i%2s%2f')
stnames = table['Name']
lat = table['LAT']
lon = table['LON']
#To grid data
x = arange(70, 140, 0.5)
y = arange(15, 58, 0.5)
gtemp,gx,gy = griddata((lon, lat), temp, xi=(x, y), method='idw', pointnum=4)
#Plot
axesm()
bou2_layer = shaperead('D:/zhd/map/bou2_4p.shp')
bou1_layer = shaperead('D:/zhd/map/bou1_4l.shp')
china_layer = shaperead('D:/zhd/map/china.shp')
geoshow(bou2_layer, edgecolor='lightgray')
geoshow(bou1_layer, facecolor=(0,0,255))
geoshow(china_layer, visible=False)
layer = contourfm(x, y, gtemp, 20)
slayer = scatterm(lon, lat, temp, colors=['k'], size=4)
layer.addfield('Name', 'string', stnames)
layer.addlabels('Name', fontname=u'楷体', fontsize=14, yoffset=15)
masklayer(china_layer, [layer])
title('Temperature (' + str(year) + '-01)')
colorbar(layer)
xlim(72, 136)
ylim(16, 55)
#Add south China Sea
sc_layer = bou1_layer.clone()
axesm(position=[0.14,0.18,0.15,0.2], axison=False)
geoshow(sc_layer, facecolor=(0,0,255))
xlim(106, 123)
ylim(2, 23)
1.png
2.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-6-7 22:34:40 | 显示全部楼层
layer.addfield('Name', 'string', stnames)
layer.addlabels('Name', fontname=u'楷体', fontsize=14, yoffset=15)


改为:
slayer.addfield('Name', 'string', stnames)
slayer.addlabels('Name', fontname=u'楷体', fontsize=14, yoffset=15)


另外南海角图部分的
axesm(position=[0.14,0.18,0.15,0.2], axison=False)
改为:
axesm(position=[0.14,0.18,0.15,0.2], axison=False, frameon=True)
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-6-7 23:01:39 | 显示全部楼层
谢谢王老师,问题解决了,不过南海地图的位置要调整一下,不然跑到框外了。
还想问一下,东南区域站点密集的地方,有的站名显示不出来,可以解决吗,让所有站都显示,谢谢!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-6-8 08:30:25 | 显示全部楼层
zenghaode 发表于 2016-6-7 23:01
谢谢王老师,问题解决了,不过南海地图的位置要调整一下,不然跑到框外了。
还想问一下,东南区域站点密集 ...

利用avoidcoll参数来设置(缺省为True,免压盖)
slayer.addlabels('Name', fontname=u'楷体', fontsize=14, yoffset=15, avoidcoll=False)

不过这样很可能标注会互相压盖,可以调整每个标注的位置(比较繁琐),具体参考此贴:MeteoInfoLab脚本示例:图形版面、点标注
http://bbs.06climate.com/forum.p ... 624&fromuid=106
(出处: 气象家园)
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-6-8 12:58:04 | 显示全部楼层
谢谢您,这样可以灵活标注了
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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