爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 13378|回复: 3

[求助] 做区域填色图时出错

[复制链接]

新浪微博达人勋

发表于 2018-4-2 19:43:30 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 mockings 于 2018-4-2 19:44 编辑

因为刚接触python,想在青藏高原地区绘制站点温度的填色图,在参考了气象家园和官网上basemap的教程后,自己编写了程序,但是一直报错


  1. load_sta = 'e:/data/data.mat'
  2. station = sio.loadmat(load_sta)
  3. #print (type(station))
  4. #print station.keys()
  5. #print (station['data'])
  6. data=station['data']   
  7. #print (data[1,1])
  8. lat=data[:,1]
  9. lon=data[:,2]
  10. #print (lon)
  11. lon,lat=np.meshgrid(lon,lat)  #网格数据



  12. # 画图
  13. fig = plt.figure(figsize=(16,16))
  14. # 设置全局字体等
  15. plt.rc('font',size=15,weight='bold')
  16. plt.subplot(121)
  17. m = Basemap(projection='cyl',llcrnrlat=25,llcrnrlon=70,urcrnrlat=45,urcrnrlon=110)
  18. m = Basemap(projection='cyl',llcrnrlat=25,llcrnrlon=70,urcrnrlat=45,urcrnrlon=110)
  19. # 加载中国地图文件
  20. m.readshapefile('e:\\python\\CHN_adm_shp\\CHN_adm0','CHN_adm0.shp',linewidth=1,color ='black')
  21. # 加载青藏高原边界文件
  22. m.readshapefile('e:\\python\\DBATP/DBATP_Line','DBATP_Line.shp',linewidth = 2,color='red')
  23. x,y=m(lon,lat)

  24. levels = np.linspace(3000,np.max(juping),50)
  25. cf =m.contourf(x,y,juping,levels=levels)   ##contourf(x,y,数据,参数,)如果默认true则x,y成经纬度
  26. cbar = m.colorbar(cf,location='bottom',ticks=np.linspace(3000,np.max(juping),10),label='m')


  27. lon_num = np.arange(70,111,5)
  28. lon_name = ['70','75','80','85','90','95','100','105','110']
  29. lat_num =  np.arange(25,46,5)
  30. lat_name = ['25','30','35','40','45']
  31. plt.yticks(lat_num,lat_name)
  32. 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'),仍然不管用。
请求各位大神帮忙,非常感谢!!


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

新浪微博达人勋

发表于 2018-4-2 21:18:31 | 显示全部楼层
那就print juping看看
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-4-3 09:37:14 | 显示全部楼层
Lancelot 发表于 2018-4-2 21:18
那就print juping看看
  1. ave=np.zeros((71,12))               #建立(71,12)初始元素为0数组
  2. juping=np.zeros(((71,12,55)))
  3. for i in range (0,70):               
  4.    for j in range (0,11):
  5.       ave[i,j]=np.mean(c[i,j,:])  #求站点每月的年平均
  6.       for k in range (0,54):
  7.           juping[i,j,k]=c[i,j,k]-ave[i,j]
复制代码

感谢感谢,确实是juping数据出了问题。这是我求juping的代码。当时检查的时候ave前几个数据都没有出错,今天检查时发现ave后几个数据均为0,如果单独np.mean(c[i,j,:])则可以正确求出平均,不知道是哪里出了问题。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-4-3 16:14:10 | 显示全部楼层
mockings 发表于 2018-4-3 09:37
感谢感谢,确实是juping数据出了问题。这是我求juping的代码。当时检查的时候ave前几个数据都没有出错 ...

对缺测的处理是什么 mask吗?
自己检查一下缺测的处理方法和对应函数
还有 我不懂你这个ave的后几个数据指什么 请自己确认一下
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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