爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 28734|回复: 25

[求助] 关于Basemap绘制天气图的问题

[复制链接]

新浪微博达人勋

发表于 2014-2-19 10:36:05 | 显示全部楼层 |阅读模式

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

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

x
请问大神们,现有一个全球的nc数据,例如:GTOPO30_10min.nc,该数据表征全球地形。
我只想绘制中国区域的地形,该进行哪些操作,才能只绘出中国区域地形?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-2-19 10:40:36 | 显示全部楼层
本帖最后由 po_po1 于 2014-7-24 17:33 编辑

我只能绘出全球地形图: 1.png
程序:
from netCDF4 import Dataset
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
q=Dataset(r'C:/Users/Administrator/Desktop/GTOPO30_10min.nc')  #数据在桌面放着
a=q.variables['HT'][:]                                        #读取的地形数据
fig=plt.figure(figsize=(8,8))
m=Basemap(projection='cyl')
m.drawcountries()
m.drawcoastlines(linewidth=0.4)
ny=a.shape[0]
nx=a.shape[1]
x,y=m.makegrid(nx,ny)
lons,lats=m(x,y)
cs=plt.contourf(lons,lats,a)
plt.show()
q.close()
#######################################
#######################################
#######################################
#######################################
2014年7月24修改
最终代码:
from netCDF4 import Dataset
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
q=Dataset(r'D:/Desktop/GTOPO30_2min.nc')
a=q.variables['HT'][:]
lat=q.variables['lat'][:]
lon=q.variables['lon'][:]
fig=plt.figure(figsize=(8,8))
fig.add_axes([0.05,0.05,0.9,0.9])
m=Basemap(projection='cyl',llcrnrlon=70, urcrnrlon=135,\
          llcrnrlat=10, urcrnrlat=56, lon_0=125, lat_0=25, resolution='l')
m.drawcountries(color='w')
m.drawcoastlines(linewidth=0.4,color='w')
m.drawparallels(circles=np.arange(-80,90,20),labels=[0,1,0,0])
m.drawmeridians(meridians=np.arange(0,360,20),lables=[0,0,0,1],fontsize=10)
ny=a.shape[0]
nx=a.shape[1]
map0=r'D:\Program Files\WinPython-64bit-2.7.5.3\data\China boundary\province boundary\bou2_4l'
m.readshapefile(map0,'world',linewidth=0.5)
########
########设定绘图区域
index1=np.logical_and(lat>=10,lat<=56)#数组与常数逻辑运算(比较大小),得到布尔数组
index2=np.logical_and(lon>=70,lon<=135)
y=lat[index1]
x=lon[index2]
a=a[index1,:]
a=a[:,index2]
########
cs=plt.contourf(x,y,a)
cbar=m.colorbar(cs,location='bottom',pad=0.1,extend='both',extendfrac='auto')
plt.show()
q.close()





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

新浪微博达人勋

发表于 2014-2-19 12:32:51 | 显示全部楼层
请问您这数据哪里下载的,我也去下载一个
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-2-19 12:41:23 | 显示全部楼层
修改m=Basemap(projection='cyl')为:
map = Basemap(projection='cyl',llcrnrlon=100, urcrnrlon=150, llcrnrlat=0, urcrnrlat=50, lon_0=125, lat_0=25, resolution='l')
自己根据需要的经纬度范围进行调整,上面参数项含义为:起始和截止经度;起始和截止纬度;中心经度;中心纬度,分辨率
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-2-19 12:42:08 | 显示全部楼层
不太懂python,帮顶了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-2-19 14:06:14 | 显示全部楼层

不行啊,这样只是把地图画成中国区域了,数据还是全球的,成这个样子了: figure_1.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-2-19 14:08:38 | 显示全部楼层
river 发表于 2014-2-19 12:32
请问您这数据哪里下载的,我也去下载一个

模式运行所需数据,网址:
http://users.ictp.it/~pubregcm/RegCM4/globedat.htm#part4
地形数据在第7组的GTOPO30 Topography下
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-2-19 18:24:05 | 显示全部楼层
同时要对你读取出来的经纬度进行分割,在x,y=m.makegrid(nx,ny)语句后面添加:
index=np.logical_and(np.logical_and(x>100,x<150),np.logical_and(y>0,y<50))
x=x[index]
y=y[index]
a=a[index]
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-2-19 19:27:48 | 显示全部楼层
po_po1 发表于 2014-2-19 14:08
模式运行所需数据,网址:
http://users.ictp.it/~pubregcm/RegCM4/globedat.htm#part4
地形数据在第7组 ...

谢谢,我已经下载了。你可以试一下meteoinfo这个软件,可以利用它屏蔽中国外的数据
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-2-20 09:08:06 | 显示全部楼层
river 发表于 2014-2-19 19:27
谢谢,我已经下载了。你可以试一下meteoinfo这个软件,可以利用它屏蔽中国外的数据

meteoinfo性能和GrADs类似吗?好不好学啊?
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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