登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 Swallow 于 2017-5-26 21:03 编辑
我的python学习第二步:绘制基本图形,查看某个模块是否存在?python查看,同时适用于adaconda版本,懒人操作 每遇到一个问题,总要想办法去解决,前面解决了安装和读取nc文件第一步。 总算解决了NC文件的读取问题,接下来就是绘制图形,比如需要绘制500hPa高度场,那么问题来了,绘制图形,需要底图(地图),经纬度,等值线图或阴影图,需要地图或底图模块,那么又牵涉到引入模块的问题,那我的adaconda是否提供此类模块?是不是还是需要我自己去找?若没有还需要去adaconda网站去找相应的底图模块。那我跟着我去旅行吧!尽管我百度的很辛苦,但是积累在这里,可以便民便己,以免自己学习不扎实,毕竟年龄也大了,长时间不用,难免会忘记。我还是一步步记下来,好给自己一个傻瓜的记忆。 一、查看模块 1.又要老生常谈,看看adaconda是否自带了绘制NC文件图形的底图模块?我感觉没有,因为adaconda不可能单单为你气象领域做好集成模块,而且既然连netCDF模块都没有内嵌其中,那么mpl_toolkits.basemap,colormap_define诸如此类的模块也有可能没有,那就来查看下,如何查看安装模块。 学习之路之一中,已经可以查看全部模块,但是查看全部难免眼花缭乱,我们还是单打单去查看某个模块是否集合,若没有,那就想办法自己装吧。希望有,那我就懒省事了。没有,还是老老实实去找模块吧,没有的话,只好求助国家局的老师了!羞死了! 哈哈,看来是我主管臆断了,原来绘图工具mpl_toolkits这个模块是存在的。 2.好吧,经过我的测试,如果想单独查看某个模块是否存在。 我需要查看mpl_toolkits.basemap模块是否存在,那么就不像help(‘modules’)搜索全部,只需要help(‘mpl_toolkits’)即可,不需要带.之后的属性或是方法等。接下来有信心了,缺什么,找什么?当然必须找adaconda版本的模块。 学习之路还很漫长。本篇等完成一个完整的绘图后上传心得。 Anaconda中的mpl_toolkits下确实没有basemap。需要自己装,由于anaconda没有配对的win32版本的basemap,百度,求助python群,用了很多方法, conda install -c conda-forge basemap=1.0.8.dev不行,conda install -c anaconda basemap=1.0.7也不行,pip uninstall basemap卸载,重新装pip install basemap也不行;最终不得不求助我的正牌老师,去python软件库 http://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载了basemap-1.0.8-cp35-none-win32.whl版本,cmd进入,输入 pip install ,拖入此安装包,居然安装ok了。开始调试程序吧。期间感谢气象家园-python群主又是那隻貓的精心指点。 感叹:anaconda软件包不能总依赖于anaconda,没办法的情况下,还需要借助python自有软件库,下载和安装自己需要的模块,安装包。Python学习之路上还在为安装系统而愁! 二、绘制图形 清风博客上有一个绘制方法,见博客链接: http://blog.sina.com.cn/s/blog_6ab074c30102w1an.html 我这里给出一个读取国家气候中心NCC月动力延伸模式的500hPa高度场的模板,绘制图形,能简单绘出图形,循环没做好,经纬度还没标出来,中国或任意省份地图叠加没做,后期有精力精修图形。代码如下:给大家赠送一本好书,绘图matplotlib函数汇总,中文本,估计有人需要。 #读取DERF2.0 NC数据 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.basemap import Basemap from netCDF4 import Dataset,num2date import os #varnamel=varname filename='Z_NAFP_C_BAQH_20160721000000_P_BCC_AGCM2.2_gh0500_1.0_MN_00.nc' data=Dataset(filename) # print(data) # exit() lat= data.variables['lat'][:].tolist() lon= data.variables['lon'][:].tolist() gh500=data.variables['gh'][:,:,:].squeeze() idate=data.variables['time'] #valid_dates = num2date(idate[:],'hours since 1-1-1 00:00:0.0').tolist() #print(valid_dates) # print idate.shape[0] # print gh500.shape # exit() # create figure and axes instances lons, lats = np.meshgrid(lon,lat) m = Basemap(resolution='l',area_thresh=10000,projection='cyl',llcrnrlon=0.0,urcrnrlon=360.0,llcrnrlat=-90.0,urcrnrlat=90.0) for i in range(idate.shape[0]): fig1 = plt.figure() ax = fig1.add_axes([0.1,0.1,0.8,0.8]) clevls_hgt=[-80,-60,-40,-20,0,20,40,60,80] x, y = m(lons, lats) parallels = np.arange(-90.,90,30.) meridians = np.arange(0.,360.,60.) # register_own_cmaps('blue_white_red',startcolor=[0,0,255],endcolor=[255,0,0]) CS2 = m.contour(x,y,gh500[i,:,:],origin='lower',cmap=plt.get_cmap('Blues'),extend='both');CS2.clabel() m.drawcoastlines(linewidth=0.2) #cb = m.colorbar(CS2,"bottom",size="5%",pad="12%") plt.title('500hPa Height',size=20) plt.show() # plt.close() exit()
conda config --set show_channel_urls yes命令,再conda install basemap,果然快很多!已装上。Python之路积累一小步,谢谢! |