更新完整版,修复了几个小问题,提供了测试数据下载

最新版见此

EOF(经验正交分解)是气候研究中常用的研究变量时空变化特征的分析方法,短期气候课中都学过中国东部夏季降水通过EOF分解可以分为三类雨型,在NCL中,EOF有直接的函数可以调用,而在python中,也有对应的库可以直接使用。

完整的说明见:

https://github.com/ajdawson/eofs

通过

conda install -c conda-forge eofs

可以直接安装。

由于数据以及EOF所选范围原因,可能结果存在一些差异,但是问题不大233333

先上图吧:

图的分析就不献丑了。主要还是分享一下绘制方法。

首先是EOF的计算

print(summer_mean_tmp.shape)

#(55, 82, 142)

print(pre_lat.shape)

#(82,)

print(pre_lon.shape)

#(142,)

这是用来分解的数据,55年夏季降水,纬度和经度。接下来进行EOF分解:

from eofs.standard import Eof

lat = np.array(pre_lat)

coslat = np.cos(np.deg2rad(lat))

wgts = np.sqrt(coslat)[..., np.newaxis]

#计算纬度权重

solver = Eof(summer_mean_tmp, weights=wgts)

#创建EOF函数

eof = solver.eofsAsCorrelation(neofs=3)

#获取前三个模态

pc = solver.pcs(npcs=3, pcscaling=1)

var = solver.varianceFraction()

#获取对应的PC序列和解释方差

这样我们获得了:

print(eof.shape)

#(3, 82, 142)

print(pc.shape)

#(55, 3)

print(var.shape)

#(55, )

至于方差为啥是(55),我也不记得了,但是var[n]对应第n模态的方差,结果与NCL计算的结果基本一致。

得到了以上的结果,就可以用于绘图了。

首先是模态的绘制,即带地图底图的填色图

我推荐使用matplotlib + cartopy实现

conda install -c conda-forge cartopy

conda install matplotlib

完成安装后

import matplotlib as plt

import cartopy.crs as ccrs

import cartopy.feature as cfeature

from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER

import cartopy.mpl.ticker as cticker

import cartopy.io.shapereader as shpreader

这次引入的东西有点多,分别用于绘图,添加地图投影,添加地图特征(海岸线,湖泊等等),设置地理坐标(XX°E),设置正确的中国国境线(默认的国境线把一些冲突地区偷吃了)

fig2 = plt.figure(figsize=(15,15))

proj = ccrs.PlateCarree(central_longitude=115)

#设置一个圆柱投影坐标,中心经度115°E

leftlon, rightlon, lowerlat, upperlat = (70,140,15,55)

#设置地图边界范围

f2_ax1 = fig2.add_axes([0.1, 0.8, 0.5, 0.3],projection = proj)

f2_ax1.set_extent([leftlon, rightlon, lowerlat, upperlat], crs=ccrs.PlateCarree())

f2_ax1.add_feature(cfeature.COASTLINE.with_scale('50m'))

f2_ax1.add_feature(cfeature.LAKES, alpha=0.5)

f2_ax1.set_xticks(np.arange(leftlon,rightlon+10,10), crs=ccrs.PlateCarree())

f2_ax1.set_yticks(np.arange(lowerlat,upperlat+10,10), crs=ccrs.PlateCarree())

lon_formatter = cticker.LongitudeFormatter()

lat_formatter = cticker.LatitudeFormatter()

f2_ax1.xaxis.set_major_formatter(lon_formatter)

f2_ax1.yaxis.set_major_formatter(lat_formatter)

f2_ax1.set_title('(a)',loc='left',fontsize =15)

f2_ax1.set_title( '%.2f%%' % (var[0]*100),loc='right',fontsize =15)

f2_ax1.contourf(pre_lon,pre_lat, eof[0,:,:], levels=np.arange(-0.9,1.0,0.1), zorder=0, extend = 'both',transform=ccrs.PlateCarree(), cmap=plt.cm.RdBu_r)

china = shpreader.Reader('bou2_4l.dbf').geometries()

f2_ax1.add_geometries(china, ccrs.PlateCarree(),facecolor='none', edgecolor='black',zorder = 1)

通过函数的字面意思应该可以理解大部分语句的意思,'bou2_4l.dbf'是中国国界线shp文件,气象家园有下载。通过类似的方法,缩小子图,覆盖在大图上便可实现南海的绘制。九段线同样有对应的shp文件。

EOF的另一部分便是PC序列的绘制,红正蓝负的实现通过如下循环换实现:

color1=[]

for i in range(1961,2016):

if pc[i-1961,0] >=0:

color1.append('red')

elif pc[i-1961,0] <0:

color1.append('blue')

或许有更简便的方法,目前我还没想到2333

f2_ax4 = fig2.add_axes([0.65, 0.8, 0.5, 0.3])

f2_ax4.set_title('(d)',loc='left')

f2_ax4.set_ylim(-2.5,2.5)

f2_ax4.axhline(0,linestyle="--")

f2_ax4.bar(years,pc[:,0],color=color1)

#f2_ax4.plot(years,pc[:,0])

#只需将bar换为plot即为折线图

python给折线图区间填充颜色_Python气象数据处理与绘图(3):以EOF为例画柱状图(折线图)和带地图底图的填色图...相关推荐

  1. python气象数据处理与绘图_Python气象数据处理与绘图:纬高图的另一种思路

    前言 有些时候为了研究不同高度上气象要素之间的联系,纬度-高度作为xy轴的图在一些SCI论文中比较常见. 这是我研究的CMIP6数据中ua,va,wap,ta这几个气象要素在纬度-高度图上的不同. 读 ...

  2. python气象处理与绘图_Python气象数据处理与绘图(18):泰勒图

    泰勒图绘制的核心思想是设计一个只有第一象限的极坐标,并将方差,相关系数进行捆绑,通过转化为极坐标系坐标进行绘制.为了实现泰勒图的绘制,我设计了两个函数: set_tayloraxes(fig, loc ...

  3. python画图数据的平均值怎么算的_Python气象数据处理与绘图(2):常用数据计算方法...

    对于气象绘图来讲,第一步是对数据的处理,通过各类公式,或者统计方法将原始数据处理为目标数据. 按照气象统计课程的内容,我给出了一些常用到的统计方法的对应函数: import numpy as np 平 ...

  4. python画图怎么调色_Python气象数据处理与绘图(19):如何使用NCL色板(调色盘思路相同)...

    一. 使用NCL色板(使用调色盘文件思路相同) NCL的色板十分丰富,几乎可以涵盖平常所需.详见:传送门 那么我们能否将NCL的色板用在python中呢?答案当然是可以的. 我在气象家园发现了个帖子, ...

  5. python气象绘图速成_Python气象数据处理与绘图(11):矢量箭头图(风场,通量场)

    最近在计算波作用通量,正好就画到了矢量箭头图,画的过程中发现还是有很多细节需要注意的,那就直接进入正题吧. 首先,矢量箭头图是分为两种的,一种类似我们常见的风场(左图),另一种则是特殊的流场,也就是流 ...

  6. python处理wrf气象数据_Python气象数据处理与绘图(11):矢量箭头图(风场,通量场)...

    最近在计算波作用通量,正好就画到了矢量箭头图,画的过程中发现还是有很多细节需要注意的,那就直接进入正题吧. 首先,矢量箭头图是分为两种的,一种类似我们常见的风场(左图),另一种则是特殊的流场,也就是流 ...

  7. python气象数据处理与绘图_Python气象数据处理与绘图(15):两种波作用通量计算的python实现及对比(Plumb T-N) (已更正)...

    大气动力学中通常用波作用通量来诊断 Rossby波的传播.常用的三种波作用通量分别为局地E-P 通量,Plumb 波作用通量和T-N 波作用通量.局地E-P 通量可以诊断一段时间内天气尺度瞬变波对定长 ...

  8. python怎样填充颜色_python中如何给图形填充颜色

    使用Turtle不只可以画线条,也可以将画出的封闭线条进行填充. -设定填充色:fillecolor(r, g, b) -开始填充:begin_fill() -结束填充:end_fill() 画一组随 ...

  9. python的turtle怎么设置rgb颜色_Python : turtle色彩控制实例详解

    ? 1 turtle.pencolor(* args ) 返回或设置pencolor. 允许四种输入格式: ? 1 pencolor() 将当前的pencolor返回为颜色规范字符串或元组(参见示例) ...

最新文章

  1. [译]深入理解JVM
  2. linux下svn客户端安装及环境配置(转)
  3. 专业网络推广浅析蜘蛛对网站有抓取但没收录的现象
  4. python爬虫成果_Python爬虫(小练习)
  5. 谜题 (Puzzle,ACM/ICPC World Finals 1993,UVa227)
  6. 人口预测和阻尼-增长模型_使用分类模型预测利率-第1部分
  7. git - svn 平滑到 git
  8. jzoj4235-序列【斐波那契数列】
  9. python基于值的内存管理模式_为什么说python采用的是基于值的内存管理模式
  10. Windows Azure Storage (3) Windows Azure Storage Service存储服务之Blob详解(中)
  11. centos 防火墙
  12. Golang爬取网页数据时403
  13. python处理分组_Python中的groupby分组功能的实例代码
  14. 【Win 10应用开发】Adaptive磁贴模板的XML文档结构
  15. Ubuntu升级wine4.0
  16. EQMX+Nginx集群搭建
  17. Windows 7 多国语言包(MUI)
  18. 配置文件(properties类)
  19. python爬虫实战---网易云音乐评论抓取
  20. TNS-12547和TNS-12555错误解决

热门文章

  1. mysql修改data文件位置
  2. WHQL认证公司 提供高品质whql认证服务
  3. 进程调度之时间片轮转调度算法(实验三)
  4. 微服务分布式电商项目《谷粒商城》学习笔记
  5. catia草图里写字_请问CATIA如何在曲面上写字,麻烦高手解答详细步骤?
  6. 回到过去--慢慢的偏离了自己的轨迹
  7. 小程序中的unionid
  8. 监控系统实践第9天:使用Composer下载Laravel8.5
  9. Magicodes.Pay已支持Volo Abp
  10. IOS开发辅助小工具