python给折线图区间填充颜色_Python气象数据处理与绘图(3):以EOF为例画柱状图(折线图)和带地图底图的填色图...
更新完整版,修复了几个小问题,提供了测试数据下载
最新版见此
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为例画柱状图(折线图)和带地图底图的填色图...相关推荐
- python气象数据处理与绘图_Python气象数据处理与绘图:纬高图的另一种思路
前言 有些时候为了研究不同高度上气象要素之间的联系,纬度-高度作为xy轴的图在一些SCI论文中比较常见. 这是我研究的CMIP6数据中ua,va,wap,ta这几个气象要素在纬度-高度图上的不同. 读 ...
- python气象处理与绘图_Python气象数据处理与绘图(18):泰勒图
泰勒图绘制的核心思想是设计一个只有第一象限的极坐标,并将方差,相关系数进行捆绑,通过转化为极坐标系坐标进行绘制.为了实现泰勒图的绘制,我设计了两个函数: set_tayloraxes(fig, loc ...
- python画图数据的平均值怎么算的_Python气象数据处理与绘图(2):常用数据计算方法...
对于气象绘图来讲,第一步是对数据的处理,通过各类公式,或者统计方法将原始数据处理为目标数据. 按照气象统计课程的内容,我给出了一些常用到的统计方法的对应函数: import numpy as np 平 ...
- python画图怎么调色_Python气象数据处理与绘图(19):如何使用NCL色板(调色盘思路相同)...
一. 使用NCL色板(使用调色盘文件思路相同) NCL的色板十分丰富,几乎可以涵盖平常所需.详见:传送门 那么我们能否将NCL的色板用在python中呢?答案当然是可以的. 我在气象家园发现了个帖子, ...
- python气象绘图速成_Python气象数据处理与绘图(11):矢量箭头图(风场,通量场)
最近在计算波作用通量,正好就画到了矢量箭头图,画的过程中发现还是有很多细节需要注意的,那就直接进入正题吧. 首先,矢量箭头图是分为两种的,一种类似我们常见的风场(左图),另一种则是特殊的流场,也就是流 ...
- python处理wrf气象数据_Python气象数据处理与绘图(11):矢量箭头图(风场,通量场)...
最近在计算波作用通量,正好就画到了矢量箭头图,画的过程中发现还是有很多细节需要注意的,那就直接进入正题吧. 首先,矢量箭头图是分为两种的,一种类似我们常见的风场(左图),另一种则是特殊的流场,也就是流 ...
- python气象数据处理与绘图_Python气象数据处理与绘图(15):两种波作用通量计算的python实现及对比(Plumb T-N) (已更正)...
大气动力学中通常用波作用通量来诊断 Rossby波的传播.常用的三种波作用通量分别为局地E-P 通量,Plumb 波作用通量和T-N 波作用通量.局地E-P 通量可以诊断一段时间内天气尺度瞬变波对定长 ...
- python怎样填充颜色_python中如何给图形填充颜色
使用Turtle不只可以画线条,也可以将画出的封闭线条进行填充. -设定填充色:fillecolor(r, g, b) -开始填充:begin_fill() -结束填充:end_fill() 画一组随 ...
- python的turtle怎么设置rgb颜色_Python : turtle色彩控制实例详解
? 1 turtle.pencolor(* args ) 返回或设置pencolor. 允许四种输入格式: ? 1 pencolor() 将当前的pencolor返回为颜色规范字符串或元组(参见示例) ...
最新文章
- [译]深入理解JVM
- linux下svn客户端安装及环境配置(转)
- 专业网络推广浅析蜘蛛对网站有抓取但没收录的现象
- python爬虫成果_Python爬虫(小练习)
- 谜题 (Puzzle,ACM/ICPC World Finals 1993,UVa227)
- 人口预测和阻尼-增长模型_使用分类模型预测利率-第1部分
- git - svn 平滑到 git
- jzoj4235-序列【斐波那契数列】
- python基于值的内存管理模式_为什么说python采用的是基于值的内存管理模式
- Windows Azure Storage (3) Windows Azure Storage Service存储服务之Blob详解(中)
- centos 防火墙
- Golang爬取网页数据时403
- python处理分组_Python中的groupby分组功能的实例代码
- 【Win 10应用开发】Adaptive磁贴模板的XML文档结构
- Ubuntu升级wine4.0
- EQMX+Nginx集群搭建
- Windows 7 多国语言包(MUI)
- 配置文件(properties类)
- python爬虫实战---网易云音乐评论抓取
- TNS-12547和TNS-12555错误解决