泰勒图(Taylor diagram)绘制方法大汇总

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

  • R 绘制泰勒图(Taylor diagram)

  • Python 绘制泰勒图(Taylor diagram)

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

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

泰勒图(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)

Taylor diagram01 of plotrix

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

taylor.diagram(ref,model1,pos.cor=FALSE)

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")

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)

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)

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)

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

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)

Example02 Of taylor_diagram() in Python

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

总结

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

以下是一个简单的Python实现Taylor Diagram的示例代码: ```python import numpy as np import matplotlib.pyplot as plt def taylor_diagram(std_devs,corrs,colors,markers): # 计算标准差和相关性的平均值 std_dev_r = np.mean(std_devs) corr_r = np.mean(corrs) # 设置形的大小和边距 plt.figure(figsize=(8,8)) plt.subplots_adjust(wspace=0.3,hspace=0.3) # 绘制标准差和相关性的轴 plt.plot([0,std_dev_r],[0,corr_r],'k-',label='Reference') plt.plot(std_devs,corrs,'ko',markerfacecolor='white') # 绘制每个模型的标准差和相关性 # 绘制每个模型的名称 for i in range(len(std_devs)): plt.text(std_devs[i],corrs[i],str(i+1),color=colors[i],ha='center',va='center') plt.plot(std_devs[i],corrs[i],markers[i],color=colors[i]) # 设置例和轴标签 plt.legend(loc='best',fontsize=12) plt.xlabel('Standard Deviation',fontsize=14) plt.ylabel('Correlation Coefficient',fontsize=14) plt.title('Taylor Diagram',fontsize=16) # 显示形 plt.show() # 示例 std_devs = [0.5,0.6,0.7,0.8,0.9] corrs = [0.9,0.8,0.7,0.6,0.5] colors = ['r','g','b','c','m'] markers = ['s','o','^','D','*'] taylor_diagram(std_devs,corrs,colors,markers) ``` 其中,`std_devs`和`corrs`分别是模型的标准差和相关性系数,`colors`和`markers`分别用于绘制不同模型的标记和颜色。函数中还计算了标准差和相关性系数的平均值,并将其作为参考线。最后,将每个模型的标准差和相关性绘制上,并用不同的颜色和标记区分不同的模型。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值