- 积分
- 303
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2017-2-13
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 mockings 于 2018-4-2 19:44 编辑
因为刚接触python,想在青藏高原地区绘制站点温度的填色图,在参考了气象家园和官网上basemap的教程后,自己编写了程序,但是一直报错
- load_sta = 'e:/data/data.mat'
- station = sio.loadmat(load_sta)
- #print (type(station))
- #print station.keys()
- #print (station['data'])
- data=station['data']
- #print (data[1,1])
- lat=data[:,1]
- lon=data[:,2]
- #print (lon)
- lon,lat=np.meshgrid(lon,lat) #网格数据
- # 画图
- fig = plt.figure(figsize=(16,16))
- # 设置全局字体等
- plt.rc('font',size=15,weight='bold')
- plt.subplot(121)
- m = Basemap(projection='cyl',llcrnrlat=25,llcrnrlon=70,urcrnrlat=45,urcrnrlon=110)
- m = Basemap(projection='cyl',llcrnrlat=25,llcrnrlon=70,urcrnrlat=45,urcrnrlon=110)
- # 加载中国地图文件
- m.readshapefile('e:\\python\\CHN_adm_shp\\CHN_adm0','CHN_adm0.shp',linewidth=1,color ='black')
- # 加载青藏高原边界文件
- m.readshapefile('e:\\python\\DBATP/DBATP_Line','DBATP_Line.shp',linewidth = 2,color='red')
- x,y=m(lon,lat)
- levels = np.linspace(3000,np.max(juping),50)
- cf =m.contourf(x,y,juping,levels=levels) ##contourf(x,y,数据,参数,)如果默认true则x,y成经纬度
- cbar = m.colorbar(cf,location='bottom',ticks=np.linspace(3000,np.max(juping),10),label='m')
- lon_num = np.arange(70,111,5)
- lon_name = ['70','75','80','85','90','95','100','105','110']
- lat_num = np.arange(25,46,5)
- lat_name = ['25','30','35','40','45']
- plt.yticks(lat_num,lat_name)
- plt.xticks(lon_num,lon_name)
复制代码 data是站点的经纬度资料,程序我判断(因为改为批注后就没错了)是在cf=m.contourf 那一句出错,报错信息是:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 58: ordinal not in range(128)。 我百度后说是因为数据文件里面有中文字符,但是我juping是一个自建的纯数字数组,然后尝试了在程序开头添加import sys
reload(sys)
sys.setdefaultencoding('utf-8'),仍然不管用。
请求各位大神帮忙,非常感谢!!
|
|