【Python气象处理绘图第七弹–泰勒图绘制】

这篇具有很好参考价值的文章主要介绍了【Python气象处理绘图第七弹–泰勒图绘制】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Python气象处理绘图第七弹–泰勒图绘制



前言

在进行模式评估的过程中,常常需要评估模式的模拟性能,这通常由空间相关系数(CC),相对标准差(SD)及其中心化的均方根误差(RMSE)体现,这三者又常常可以由泰勒图具体体现。RMSE越接近0,CC和SD越接近1,模式模拟能力越好
泰勒图
23.泰勒图


一、数据预处理

对于气象格点数据,其通常为三维数据,但是计算其CC,SD,RMSE时通常需要转成一维数组进行计算。因此需要对气象格点数据进行预处理。

import geopandas as gpd
import salem
# 创造掩膜数据
shp = "E:/shapefile/青藏高原/青藏高原边界数据总集/TPBoundary_HF/TPBoundary_HF_LP.shp"
tp_shp=gpd.read_file(shp)
data0=xr.open_dataset('E:/CORDEX-DOMAIN/conclusion/pr/RX1day.nc')
RX1day=data0.RX1day
data1=xr.open_dataset('E:/CORDEX-DOMAIN/conclusion/pr/RX1day1.nc')
RX1day1=data1.RX1day
data2=xr.open_dataset('E:/CORDEX-DOMAIN/conclusion/pr/RX1day2.nc')
RX1day2=data2.RX1day
data3=xr.open_dataset('E:/CORDEX-DOMAIN/conclusion/pr/RX1day3.nc')
RX1day3=data3.RX1day
RX1day=RX1day.salem.roi(shape=tp_shp)
RX1day1=RX1day1.salem.roi(shape=tp_shp)
RX1day2=RX1day2.salem.roi(shape=tp_shp)
RX1day3=RX1day3.salem.roi(shape=tp_shp)
#将三维数组降为一维
#[数据重组与换形](https://www.jianshu.com/p/3e2eecd6481d)
RX1day=RX1day.stack(z=('time', 'lat','lon'))
RX1day1=RX1day1.stack(z=('time', 'lat','lon'))
RX1day2=RX1day2.stack(z=('time', 'lat','lon'))
RX1day3=RX1day3.stack(z=('time', 'lat','lon'))
DATA={"RX1day": RX1day,
  "RX1day1": RX1day1,
  "RX1day2": RX1day2,
  "RX1day3": RX1day3,
  }
df = pd.DataFrame(DATA)
df1=df.dropna(axis=0,subset = ["RX1day","RX1day1","RX1day2","RX1day3"])   # 丢弃这四列中有缺失值的行 

python气象数据处理与绘图,python,机器学习,人工智能

二、使用步骤

1.引入库

代码如下(示例):

from matplotlib.projections import PolarAxes
from mpl_toolkits.axisartist import floating_axes
from mpl_toolkits.axisartist import grid_finder
import numpy as np
import matplotlib.pyplot as plt

2.读入数据

代码如下(示例):

def set_tayloraxes(fig, location):
    trans = PolarAxes.PolarTransform()
    r1_locs = np.hstack((np.arange(1,10)/10.0,[0.95,0.99]))
    t1_locs = np.arccos(r1_locs)        
    gl1 = grid_finder.FixedLocator(t1_locs)    
    tf1 = grid_finder.DictFormatter(dict(zip(t1_locs, map(str,r1_locs))))
    r2_locs = np.arange(0,2,0.25)
    r2_labels = ['0 ', '0.25 ', '0.50 ', '0.75 ', 'REF ', '1.25 ', '1.50 ', '1.75 ']
    gl2 = grid_finder.FixedLocator(r2_locs)
    tf2 = grid_finder.DictFormatter(dict(zip(r2_locs, map(str,r2_labels))))
    ghelper = floating_axes.GridHelperCurveLinear(trans,extremes=(0,np.pi/2,0,1.75),
                                                  grid_locator1=gl1,tick_formatter1=tf1,
                                                  grid_locator2=gl2,tick_formatter2=tf2)
    ax = floating_axes.FloatingSubplot(fig, location, grid_helper=ghelper)
    fig.add_subplot(ax)

    ax.axis["top"].set_axis_direction("bottom")  
    ax.axis["top"].toggle(ticklabels=True, label=True)
    ax.axis["top"].major_ticklabels.set_axis_direction("top")
    ax.axis["top"].label.set_axis_direction("top")
    ax.axis["top"].label.set_text("Correlation")
    ax.axis["top"].label.set_fontsize(14)
    ax.axis["left"].set_axis_direction("bottom") 
    ax.axis["left"].label.set_text("Standard deviation")
    ax.axis["left"].label.set_fontsize(14)
    ax.axis["right"].set_axis_direction("top")   
    ax.axis["right"].toggle(ticklabels=True)
    ax.axis["right"].major_ticklabels.set_axis_direction("left")
    ax.axis["bottom"].set_visible(False)         
    ax.grid(True)
    polar_ax = ax.get_aux_axes(trans)   

    rs,ts = np.meshgrid(np.linspace(0,1.75,100),
                            np.linspace(0,np.pi/2,100))
    rms = np.sqrt(1 + rs**2 - 2*rs*np.cos(ts))
    CS = polar_ax.contour(ts, rs,rms,colors='gray',linestyles='--')
    plt.clabel(CS, inline=1, fontsize=10)
    t = np.linspace(0,np.pi/2)
    r = np.zeros_like(t) + 1
    polar_ax.plot(t,r,'k--')
    polar_ax.text(np.pi/2+0.032,1.02, " 1.00", size=10.3,ha="right", va="top",
                  bbox=dict(boxstyle="square",ec='w',fc='w'))

    return polar_ax

def plot_taylor(axes, refsample, sample, *args, **kwargs):
    std = np.std(refsample)/np.std(sample)
    corr = np.corrcoef(refsample, sample) 
    theta = np.arccos(corr[0,1])
    t,r = theta,std
    d = axes.plot(t,r, *args, **kwargs) 
    return d

两个函数的使用:

(1) set_tayloraxes(fig, location)

输入:

fig: 需要绘图的figure

location:图的位置,如111为1行1列第一个,122为1行2列第2个

输出:

polar_ax:泰勒坐标系

(2) plot_taylor(axes, refsample, sample, *args, **kwargs)

输入:

axes : setup_axes返回的泰勒坐标系

refsample :参照样本

sample :评估样本

args, *kwargs :plt.plot()函数的相关参数,设置点的颜色,形状等等。

fig = plt.figure(figsize=(12,6))
ax1 = set_tayloraxes(fig, 121)
d1 = plot_taylor(ax1,df1.RX1day,df1.RX1day1, 'ro',markersize=8,label='RX1day')
d2 = plot_taylor(ax1,df1.RX1day,df1.RX1day2, 'yo',markersize=8,label='TXn')
d3 = plot_taylor(ax1,df1.RX1day,df1.RX1day3, 'mo',markersize=8,label='TX90p')
d4 = plot_taylor(ax1,df1.RX1day,df1.RX1day, 'go',markersize=8,label='TX10p')
ax1.legend(loc=2)
ax2 = set_tayloraxes(fig, 122)
d1 = plot_taylor(ax2,df1.RX1day,df1.RX1day1, 'ro',markersize=8,label='RX1day')
d2 = plot_taylor(ax2,df1.RX1day,df1.RX1day2, 'yo',markersize=8,label='TXn')
d3 = plot_taylor(ax2,df1.RX1day,df1.RX1day3, 'mo',markersize=8,label='TX90p')
d4 = plot_taylor(ax2,df1.RX1day,df1.RX1day, 'go',markersize=8,label='TX10p')
#legend位置
ax2.legend(bbox_to_anchor=(1.32,0.8), borderaxespad=0)

python气象数据处理与绘图,python,机器学习,人工智能

总结

以上就是对于泰勒图的绘制。
值得注意的是:文章来源地址https://www.toymoban.com/news/detail-723369.html

  1. 数据预处理成一维数据
  2. 剔除缺测值(参考dataframe)df1=df.dropna(axis=0,subset = ["RX1day","RX1day1","RX1day2","RX1day3"])
  3. 注意legend的位置Python matplotlib画图时图例说明(legend)放到图像外侧详解

到了这里,关于【Python气象处理绘图第七弹–泰勒图绘制】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python绘图系统11:绘制极坐标图像

    Python绘图系统: 📈从0开始的3D绘图系统📉一个3D坐标系,多个函数 自定义控件:📉 极坐标绘图 图表类型和风格:散点图和条形图📊混合类型图表 用坐标个数来判断是否绘制三维图的确很直观,但从matplotlib的绘图逻辑来说却非如此,对于matplotlib来说,只有直角坐标是真实

    2024年02月10日
    浏览(45)
  • Python学习笔记(11-2):matplotlib绘图——图形绘制函数

    因为部分图形绘制函数共用了一套参数体系,在颜色、曲线形状等部分的使用方式也是一致的。所以,在讲解各类图形绘制之前,我们整体性地对各类通用参数进行一个整理,并在此基础上对于颜色(color)、数据点标记(marker)和曲线形式(linestyle)等几个通用参数进行相

    2024年02月06日
    浏览(55)
  • c++之旅第七弹——继承

    大家好啊,这里是c++之旅第七弹,跟随我的步伐来开始这一篇的学习吧! 如果有知识性错误,欢迎各位指正!!一起加油!! 创作不易,希望大家多多支持哦! 一.继承和派生:(实质上是一个过程,不过是从不同角度来看的) 1.继承方式: 单继承: 多继承: 多级继承:

    2024年04月11日
    浏览(26)
  • ctfshow 红包题第七弹

    1.打开url,得到一个phpinfo界面,没有有效信息 2.使用dirsearch进行扫描: 3.本来以为是git泄露但是尝试了几次都githack都没办法执行成功 4.使用wget下载index,而后查看内容: 显然这里面包含一个backdoor.php文件 5.访问这个文件,查看源码得到这样一段话: 6.显然需要尝试破解shel

    2023年04月11日
    浏览(35)
  • C语言第七弹---循环语句

    ✨ 个人主页: 熬夜学编程的小林 💗 系列专栏: 【C语言详解】 【数据结构详解】 C语言提供了3种循环语句,while就是其中⼀种,接下来就介绍⼀下while语句。 while语句的语法结构和if语句非常相似。 你可以对比来看⼀下,具体写个代码吧 这就是他们的区别,while语句是可以

    2024年01月24日
    浏览(34)
  • PAT(Advanced Level)刷题指南 —— 第七弹

    排序问题,原题叙述比较清晰,按照A C M E四种排序的最高名次以及对应的排序方式输出。

    2024年02月13日
    浏览(35)
  • NCDC气象数据的提取与处理(四):python批量读取、写入nc数据经纬度格点数值

    1.问题描述: 2.思路: 3.实现过程: 3.1格点位置匹配 3.2写入表格 4.运行效果 4.1打包站点信息 4.2读取nc文件列表 4.3提取对应格点的nc数据 4.4数据写入 NCDC的站点数据处理在之前三节里已经介绍过了,但是NCDC的就那么几种数据可能不能满足日常使用,比如说辐射数据他就没有。

    2024年02月05日
    浏览(73)
  • 【Win32绘图编程,GDI绘图对象】绘图基础,位图处理,绘图消息处理,画笔,画刷,文本绘制

    这一篇文章分享本人学习win32绘图编程,其中包括GDI绘图对象,绘图基础,基本图形的绘制,画笔画刷的使用,文本绘制,以及文本字体的更改。 绘图设备DC(Device Context),有时也叫做绘图上下文/绘图描述表/显示设备上下文 HDC-DC句柄,表示绘图设备 GDI-Windows graphics device

    2024年02月07日
    浏览(42)
  • 【SCI绘图】【小提琴系列1 python】绘制按分类变量分组的垂直小提琴图

    本期分享:  【SCI绘图】【小提琴系列1 python】绘制按分类变量分组的垂直小提琴图,文末附完整代码 小提琴图是一种常用的数据可视化工具,它结合了箱形图和密度图的特点,用于展示数据的分布情况和变化趋势。其外形类似于小提琴,因而得名。 数据样例: total_bill  

    2024年04月10日
    浏览(38)
  • MATLAB | 绘图复刻(九) | 泰勒图及组合泰勒图

    有粉丝问我这个图咋画: 我一看,这不就泰勒图嘛,就fileexchange上搜了一下泰勒图绘制代码,但是有的代码比较新的版本运行要改很多地方,有的代码需要包含一些压缩包没并没有的别人写的函数,于是我干脆自己写了个工具,想着如果大家用其他泰勒图绘制代码来不及修改

    2024年02月08日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包