近日,有小伙伴私信小编关于泰勒图(Taylor diagram) 的绘制方法,小编也进行了相关资料查询,那么,今天这篇推文借给大家介绍一下如何绘制泰勒图(Taylor diagram),具体内容如下:

  • 泰勒图(Taylor diagram)的基本介绍

  • R 绘制泰勒图(Taylor diagram)

  • Python 绘制泰勒图(Taylor diagram)

泰勒图(Taylor diagram)的基本介绍

泰勒图(Taylor diagram) 可以简单的理解为一种的可同时表示标准差、均方根误差和相关系数三个指标的可视化图表。样例图如下(来源于网络):

41545d92ed04466a28c6f75553d86819.png
泰勒图(Taylor diagram)样例

通常,泰勒图中的散点代表不同模型,横纵轴代表标准差,辐射线代表相关系数,虚线代表均方根误差,可以多角度多维度的比较各模型指标之间的关系。更多关于泰勒图(Taylor diagram)的介绍,小伙伴们可自行搜索哈~下面,小编详细介绍如何使用RPython绘制泰勒图(Taylor diagram)。

R 绘制泰勒图(Taylor diagram)

小编在查找资料时,发现目前绘制泰勒图较为方便的包有R-plotrix包和R-openair包,接下来,就单独进行介绍:

R-plotrix包绘制

由于R-plotrix包绘制泰勒图结果可能美观欠缺,这里小编直接给出样例供大家参考,如下:

「样例」:

library(plotrix)
ref<-rnorm(30,sd=2)
model1<-ref+rnorm(30)/2
taylor.diagram(ref,model1)
31e194c3363f7e75380940bf5cdfdd15.png
Taylor diagram01 of plotrix

当然,你还可以通过设置pos.cor=FALSE 来获取全部值的相关系数,如下:

taylor.diagram(ref,model1,pos.cor=FALSE)
df3130d203b1f8fad01ec64f7225890a.png
Taylor diagram02 of plotrix

更多详细参数信息,感兴趣的同学可参考R-openair包[1]

R-openair包绘制

R-openair包是一个提供空气质量数据(air quality data)的第三方包,其提供的TaylorDiagram() 绘图函数就可以很好的绘制泰勒图。样例如下:

首先进行数据构造(由于所需数据的特殊性,这里直接使用其提供好的数据):

library(openair)
library(tidyverse)
dat <- selectByDate(mydata, year = 2003)
dat <- data.frame(date = mydata$date, obs = mydata$nox, mod = mydata$nox)

dat <- transform(dat, month = as.numeric(format(date, "%m")))
mod1 <- transform(dat, mod = mod + 10 * month + 10 * month * rnorm(nrow(dat)),
                  model = "model 1")
# model 1
mod1 <- transform(mod1, mod = c(mod[5:length(mod)], mod[(length(mod) - 3) :
                                                          length(mod)]))

# model 2
mod2 <- transform(dat, mod = mod + 7 * month + 7 * month * rnorm(nrow(dat)),
                  model = "model 2")
# model 3
mod3 <- transform(dat, mod = mod + 3 * month + 3 * month * rnorm(nrow(dat)),
                  model = "model 3")

mod.dat <- rbind(mod1, mod2, mod3)

可视化绘制:

TaylorDiagram(mod.dat, obs = "obs", mod = "mod", group = "model")
4b6d50ea86b5ac4b3ee323958f338199.png
Example01 Of Taylor diagram in openair::TaylorDiagram()

由于TaylorDiagram()绘图函数提供的图形设置参数较为丰富,我们还可以对其设置如下:

TaylorDiagram(mod.dat, obs = "obs", mod = "mod", group = "model",
              type = "season",
              cols=c("#0073C2","#EFC000","#868686"),
              rms.col="red",cor.col="#3B3B3B",
              arrow.lwd=1.5)
7c83f7df118a223bd16e451282bbadff.png
Example02 Of Taylor diagram in openair::TaylorDiagram()

以上就是对openair::TaylorDiagram() 绘制泰勒图(Taylor diagram)的简单介绍,更多详细参数信息参考R-openair::TaylorDiagram()[2]

Python 绘制泰勒图(Taylor diagram)

小编在查询资料时,发现Python绘制泰勒图大多都是基于Matplotlib自行定义绘制。这里小编发现了一个绘制泰勒图的宝藏可视化库-「SkillMetrics」,其提供多种泰勒图的绘制函数,接下来小编就选择几种泰勒图的样式例子进行展示(数据使用虚构的数据集),如下:

「样例一:」 基础泰勒图

import matplotlib.pyplot as plt
from matplotlib import rcParams
import numpy as np
import pandas  as pd
import skill_metrics as sm

data = pd.read_excel(r"test_data.xlsx")
# 以下操作可以当作固定步骤
taylor_stats1 = sm.taylor_statistics(data.pred1,data.ref,'data')
taylor_stats2 = sm.taylor_statistics(data.pred2,data.ref,'data')
taylor_stats3 = sm.taylor_statistics(data.pred3,data.ref,'data')
sdev = np.array([taylor_stats1['sdev'][0], taylor_stats1['sdev'][1], 
                 taylor_stats2['sdev'][1], taylor_stats3['sdev'][1]])
crmsd = np.array([taylor_stats1['crmsd'][0], taylor_stats1['crmsd'][1], 
                  taylor_stats2['crmsd'][1], taylor_stats3['crmsd'][1]])
ccoef = np.array([taylor_stats1['ccoef'][0], taylor_stats1['ccoef'][1], 
                  taylor_stats2['ccoef'][1], taylor_stats3['ccoef'][1]])

# 设置matplotlib 基本配置
rcParams["figure.figsize"] = [6, 6]
rcParams["figure.facecolor"] = "white"
rcParams["figure.edgecolor"] = "white"
rcParams["figure.dpi"] = 80
rcParams['lines.linewidth'] = 1 # 
rcParams["font.family"] = "Times New Roman"
rcParams.update({'font.size': 12}) # 
plt.close('all')
# 开始绘图
text_font = {'size':'15','weight':'bold','color':'black'}
sm.taylor_diagram(sdev,crmsd,ccoef)
plt.title("Example01 Of taylor_diagram() in Python",fontdict=text_font,pad=35)

3a1220a3c6de8960813c8f1a21d615fc.png

Example01 Of taylor_diagram() in Python

「样例二:」

sm.taylor_diagram(sdev,crmsd,ccoef, markerLabel = label,
                      titleOBS = 'Observation',
                      markerLabelColor = 'r', 
                      tickRMS= np.arange(0,30,10),
                      tickRMSangle = 110.0, 
                      colRMS = 'm', styleRMS = ':', widthRMS = 2.0,
                      tickSTD = np.arange(10,30,10), axismax = 30.0, 
                      colSTD = 'b', styleSTD = '-.', widthSTD = 1.0,
                      colCOR = 'k', styleCOR = '--', widthCOR = 1.0)
text_font = {'size':'15','weight':'bold','color':'black'}
plt.title("Example02 Of taylor_diagram() in Python",fontdict=text_font,pad=35)

这里进行了部分参数的设置,结果如下:

c3962efeac54236f0b260d5c0a09c66a.png

Example02 Of taylor_diagram() in Python

「样例三:」 将值用colorbar表示

sm.taylor_diagram(sdev,crmsd,ccoef,
                      markerDisplayed = 'colorBar', titleColorbar = 'RMSD',
                     locationColorBar = 'EastOutside',
                      cmapzdata = crmsd, titleRMS = 'off',
                      tickRMS = range(0,30,10), tickRMSangle = 110.0,
                      colRMS = 'm', styleRMS = ':', widthRMS = 2.0,
                      tickSTD = range(10,30,10), axismax = 30.0,
                      colSTD = 'k', styleSTD = '-', widthSTD = 1.5,
                      colCOR = 'k', styleCOR = '--', widthCOR = 1.0)
text_font = {'size':'15','weight':'bold','color':'black'}
plt.title("Example03 Of taylor_diagram() in Python",fontdict=text_font,pad=35)

73a5a2e6739dc064ac27f34ab1d067a1.png

Example02 Of taylor_diagram() in Python

以上就是使用Python-SkillMetrics库绘制泰勒图的具体用法,更多详细例子可参考Python-SkillMetrics[3]

总结

本期推文,小编简单介绍了泰勒图(Taylor diagram)的R和Python绘制方法,这里可以看出,Python在绘制泰勒图时,其定制化操作可选的操作较多,大家可多了解下~~希望本期推文对大家有所帮助。

参考资料

[1]

R-openair包参数介绍: https://rdrr.io/cran/plotrix/man/taylor.diagram.html。

[2]

R-openair::TaylorDiagram()参数介绍: https://davidcarslaw.github.io/openair/reference/TaylorDiagram.html。

[3]

Python-SkillMetrics资料: https://github.com/PeterRochford/SkillMetrics/wiki。

a38e6edb892dbd9566a89075e933fc7a.gif

各位伙伴们好,詹帅本帅搭建了一个个人博客和小程序,汇集各种干货和资源,也方便大家阅读,感兴趣的小伙伴请移步小程序体验一下哦!(欢迎提建议)

推荐阅读

牛逼!Python常用数据类型的基本操作(长文系列第①篇)

牛逼!Python的判断、循环和各种表达式(长文系列第②篇)

牛逼!Python函数和文件操作(长文系列第③篇)

牛逼!Python错误、异常和模块(长文系列第④篇)

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐