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')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM