爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 151656|回复: 102

[经验总结] python 站点资料插值画图及白化

  [复制链接]

新浪微博达人勋

发表于 2017-12-18 17:38:31 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 chiqu296 于 2017-12-18 17:40 编辑

在学习python气象数据可视化过程中,在论坛里学习到了很多,今天尝试用python将站点资料插值画图,效果还可以,做个记录!用到了又是那隻貓的源码python中使用NCL的colormap以及平流层的萝卜Python完美白化。在此感谢他们的分享!
  1. import cmaps
  2. import maskout
  3. import pandas as pd
  4. import numpy as np
  5. import matplotlib.pyplot as plt
  6. from scipy.interpolate import Rbf
  7. from mpl_toolkits.basemap import Basemap



  8. plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文
  9. plt.rcParams['axes.unicode_minus']=False #用来正常显示负号


  10. data = pd.read_csv('../rain.dat', header=None,
  11.     names=['站名','站号','lon','lat','降水','气温'] )
  12. # 插值
  13. lon = data['lon']
  14. lat = data['lat']
  15. rain_data = data['降水']
  16. olon = np.linspace(78,100,88)
  17. olat = np.linspace(26,38,88)
  18. olon,olat = np.meshgrid(olon,olat)
  19. # 插值处理
  20. func = Rbf(lon, lat, rain_data,function='linear')
  21. rain_data_new = func(olon, olat)

  22. # 画图
  23. fig = plt.figure(figsize=(16,9))
  24. plt.rc('font',size=15,weight='bold')
  25. ax = fig.add_subplot(111)
  26. m = Basemap(projection='cyl',llcrnrlat=26,llcrnrlon=78,urcrnrlat=38,urcrnrlon=100)
  27. m.readshapefile('../tibet_shp/xizang_all','xizang_all.shp', linewidth=1, color='k')
  28. m.readshapefile('../tibet_shp/river_1','river_1.shp',linewidth=1,color ='b')
  29. m.readshapefile('../tibet_shp/river_2','river_2.shp',linewidth=0.8,color ='b')
  30. m.readshapefile('../tibet_shp/river_3','river_3.shp',linewidth=0.6,color ='b')
  31. m.readshapefile('../tibet_shp/xzlake','xzlake.shp',linewidth=1,color ='b')
  32. x,y = m(olon,olat)
  33. xx,yy = m(lon,lat)
  34. levels = np.linspace(0,np.max(rain_data_new),50)
  35. cf = m.contourf(x,y,rain_data_new, levels=levels, cmap=cmaps.CBR_wet)
  36. cbar = m.colorbar(cf,location='right',format='%d',size=0.3,
  37.     ticks=np.linspace(0,np.max(rain_data_new),10),label='毫米')
  38. st = m.scatter(xx-0.1,yy,c='k',s=10,marker='o')
  39. for i in range(0,len(xx)):
  40.     plt.text(xx[i],yy[i],data['站名'][i],va='center',fontsize=10)
  41. lon_num = np.arange(78,101,2)
  42. lon_label = ['78°','80°','82°','84°','86°','88°','90°','92°','94°','96°','98°','100°E']
  43. lat_num =  np.arange(26,39,2)
  44. lat_label = ['26°','28°','30°','32°','34°','36°','38°N']
  45. plt.yticks(lat_num,lat_label)
  46. plt.xticks(lon_num,lon_label)
  47. plt.title('测试图')
  48. # 白化
  49. clip = maskout.shp2clip(cf,ax,m,'shapefile/bou2_4p',[540000])
  50. plt.savefig('test.png', bbox_inches='tight',dpi=300)
复制代码


test.png

评分

参与人数 4金钱 +9 收起 理由
直孔吧-坚扎 + 2 很给力!
pubuzhaxi + 5 很给力!,能否提供西藏地图数据文件
funnybone + 1
bustop + 1

查看全部评分

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

新浪微博达人勋

发表于 2018-1-17 19:54:28 | 显示全部楼层
跪求楼主大大回复 !可不可以共享一下您的maskout文件。我按照“平流层的萝卜”分享的包里面的程序maskout.py以及country1.shp就可以画出来。但是一旦换成bou2_4.shp或者其他shp文件,都失败。maskout里面的参数我也改了,但是还是不行。所以,可不可以看一下您的maskout.py是怎么改的?非常感谢!!!!!
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

发表于 2017-12-18 18:53:28 | 显示全部楼层
好东西,但是好像是因为我的电脑装了2.7和3.6版本的python,所以我一直装不了basemap,想问问有什么解决办法
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-12-21 08:49:50 | 显示全部楼层
谢谢分享!学习到了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-12-22 09:05:35 | 显示全部楼层
学习到了很多,很感谢
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-12-24 12:00:10 | 显示全部楼层
你好,我降雨数据是excel用你的代码报MemoryError得错,excel里有9万6千多条数据,请教下怎么处理啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-12-25 09:22:18 | 显示全部楼层
楼主我看你用的线性插值,有没有试过cressman的
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-1-17 19:49:24 | 显示全部楼层
画出来图 ,很漂亮啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-1-19 12:44:09 | 显示全部楼层
确实很实用,楼主,有个小问题想请教您,就是在import maskout, import camps总是找不到相关文件,楼主有办法解决吗?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-1-20 10:33:32 | 显示全部楼层
不收费真好
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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