请选择 进入手机版 | 继续访问电脑版
爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 697|回复: 24

[源代码] python自动绘图函数

[复制链接]

新浪微博达人勋

 成长值: 390
发表于 2020-11-18 17:54:08 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 qq492947833 于 2020-11-28 21:05 编辑

    思考了很久到底要不要发这篇帖子,想想还是发一下,以供和各位大佬交流讨论。       本人Nuist的研一研究生,利用本升研的假期和开学来几个月,在明日科技的python网课以及气象家园大佬@biubiubiu123 的帖子(http://bbs.06climate.com/forum.php?mod=viewthread&tid=94639&extra=page%3D1)《分享一套适用大气专业的Python编程经验》的指导下,学习了python基础指令以及python气象绘图。开学后又在杨老师的指导下进一步学习了python气象绘图的进阶版块,同时也想着能不能自己编程实现一个自动绘图函数?于是近一个月写了一部分包括数据处理和绘图的函数,并把他们打包成一个完整的功能型函数,可以用作绘图。.py文件和说明书以及附加的库已经放在下面了,免费下载。

    当然,本人技术水平有限,所以此函数写的可能有很多bug,将已知的一些缺陷告诉大家:
    1.本函数参数比较多,可能需要花一部分时间读取说明书。主要原因是这些参数都是必要的,如果去掉了可能导致函数功能的严重缺失。
    2.即使本函数的参数众多,但是覆盖面仍然不够完全。比如对于绘图坐标轴上的各种细节的设置(坐标轴字体大小,坐标轴的内外)、标题的各种细节设置,甚至colorbar的各种细节设置,都没有参数覆盖。原因是如果这些细节都覆盖全面,那么本函数的参数可能需要上百个,对于使用者也是非常不便捷的。
    3.由于本人是做陆面过程的,属于气候方向,所以使用的大多数是月平均的nc数据,所以该函数目前只支持对nc数据的处理,而且大部分功能只支持对时间跨度为月的数据的处理。时间分辨率最多支持到天,对每小时都记录的数据是不支持的。
    4.本函数在设置时间起始点和终止点时范围可能需要精确。比如设置time为11,也就是单取11月数据,那么时间起始点就必须是某年的11月1日,而时间终止点也必须是某年的11月1日,如果写成起始时间为某年的1月1日而截止时间也写成某年的1月1日,就有可能报错。选择timemode为'season'时也相同,假如你选择'JJA'为夏季,那么时间起始点就必须是某年的6月1日,而终止点就必须是某年的8月1日。
    5.本函数为了节省篇幅没有try,except语句,所有报错均为系统函数报错。

    最后再次声明,本人技术水平有限,所有方法可能不是最简单的,有些地方甚至可能比较复杂。所以函数如果不合大家的意愿或者不好用请勿喷。。。也欢迎各位大佬对本人函数进行讨论和改进。函数有bug的话可以在帖子下面留言,本人会尽力尽快修复。有更多需要的大佬也可以自行修改本人的函数。
   一些成果图给大家看一下:
2.png
3.png
4.png
6.png



                               
登录/注册后可看大图



第一次补充:
  突然发现直接上传附件下载虽然可以设置不需要贡献,但是还是需要金钱。。。所以仍然打包到网盘里面供大家下载了。其中包含.py文件(Auto_paint_self.py),说明书和两个必要的函数库(xMCA做SVD必要,mktest是做mk检验的,目前没用到,以后更新版本可能会用到)。还有同学问shp文件哪里找的,我把自己常用的几个shp文件都给大家了。其中country1是世界地图,chn那几个是中国地图(0代表中国国境线,1代表省界,2代表市界,3代表县界)。都在下面的网盘中,网盘链接永久有效!
第二次补充:
  增加了一个新功能,可以在line_or_bar参数中选择‘onlydata’,从而只返回线性趋势值或者多项式拟合值或者滤波值或者去趋势值(目前还暂时没有加入大函数)。最近在准备高等大气环流考试,11月26号以后会在说明书中加入小函数的使用说明,大家可以自由组合小函数,创造出更多的功能。
  有人也问到了python基础的网课在哪里学的,网盘地址也分享给大家,大家可以自由学习!

基础课程建议大家学习到13章就好,13章往后的都是有关网页开发方面的,对于气象绘图没什么大作用。看完基础课程就可以去看@biubiubiu123 大佬的教程了,再次感谢@biubiubiu123 大佬对于python气象绘图的贡献!


                               
登录/注册后可看大图



    第三次更新:有朋友问到能不能绘制垂直方向物理量的分布图,事实上之前的函数中已经写过了类似函数,只不过在说明书中没有加入说明,原因就是个人认为这种函数不能算新功能的函数,只是把绘图中的坐标轴由xy调整成了yz或者xz。但是既然有朋友问到了还是在说明书中加入了这两个函数的说明,主要是绘制垂直方向的填色图和流场图(quiver图),steamline图在垂直方向上不太好画,主要原因是垂直方向的分辨率不是均匀的,而streamline要求绘图分辨率必须均匀。当然目前绘制的是纬高图,经高图其实把x轴传入的参数lat改成lon就行了。画纬高图的时候要固定某个经度或者将经度压缩(求平均,用datamode ‘ave’加上dealmode ‘arealon’参数来对经度求平均)。个人认为还是因为没有在说明书中加入小函数(就是基本功能函数,比如单画填色图,单画流场图的函数)的说明。下周四(11月26号)楼主有考试,最近在复习考试内容,11月26号之后会在说明书中加入小函数的使用方法,方便大家自由组合使用。
    下面是两个新函数的绘图成果展示:
    7.png
    5.png


                               
登录/注册后可看大图



  第四次更新:本来26号就要更新的,但是气象家园被封禁了。。。刚才好不容易挤上来,所以才今天更新。
  更新内容:在说明书中加入了小函数的说明,以供大家自由组合使用。增加了svd小函数求同性相关场的函数(svd多了4个返回值);增加了r相关系数小函数求两个场相关系数的函数(两个场的时间维,空间维格点数必须严格相同;通常用于求某个变量在某个场的持续性如何);在open_data中把resolution参数分裂成了latresolution和lonresolution以适应x轴分辨率和y轴分辨率不同的数据。


                               
登录/注册后可看大图


  第五次更新:之前发现了一个大bug,就是绘图的时候lon坐标轴绘制的都是错误的,主要原因是因为ccrs.PlateCarree()中central_longitude这个属性设置的错误,现在已经更改。
  而且发现了无法对季节平均和年平均数据做svd的bug,原因是对时间求平均后生成的变量是array类型,而python中用xMCA求svd的话要求变量必须是DataArray类型,所以现在将求完平均后的array又转化成了DataArray类型,所有timemode类型的数据都可以求svd了。
  当然本次更新对用户操作方面没有任何影响,属于修复bug更新,没有新增加功能,仅做记录用途。
  今年寒假可能会录制一些python绘图函数设计的教程视频,以供大家更方便的学习。其中会具体介绍各个函数的设计思路,敬请期待!

以下是绘图函数连接:
链接:https://pan.baidu.com/s/1E_OtRH4NFDG9NCYR3slzsA
提取码:tbyc

以下是python基础课程连接:
链接:https://pan.baidu.com/s/1h_gzIjTbuZ0NrCQNCIyWUw
提取码:tbyc




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

新浪微博达人勋

发表于 2020-11-18 18:29:44 | 显示全部楼层
cool
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2020-11-18 18:37:51 | 显示全部楼层
本帖最后由 贝壳女孩 于 2020-11-18 18:39 编辑

感谢大佬分享哈哈哈
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-11-18 19:32:18 | 显示全部楼层
shapefile哪里下载的
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 成长值: 390
发表于 2020-11-18 21:13:50 | 显示全部楼层
werewolf 发表于 2020-11-18 19:32
shapefile哪里下载的

shapefile 找的shp文件,有几个我一会分享一下吧
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 成长值: 390
发表于 2020-11-18 21:25:01 来自手机 | 显示全部楼层
werewolf 发表于 2020-11-18 19:32
shapefile哪里下载的

大部分都是在CSDN下载的
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-11-19 08:03:06 | 显示全部楼层
我的需求还不一样,请问有明日科技的代码和PPT之类吗,先前看过视频,感觉不错,哈哈哈
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-11-19 08:35:30 | 显示全部楼层
你这个地图很危险啊
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 成长值: 390
发表于 2020-11-19 11:10:41 来自手机 | 显示全部楼层
dongyi 发表于 2020-11-19 08:03
我的需求还不一样,请问有明日科技的代码和PPT之类吗,先前看过视频,感觉不错,哈哈哈

一会我分享一下
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 成长值: 390
发表于 2020-11-19 11:11:12 来自手机 | 显示全部楼层
QCD 发表于 2020-11-19 08:35
你这个地图很危险啊

主要是外国的地图。。。的确不能用于发文章的。。。要不然会政治错误
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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