超干货 | 泰勒图(Taylor diagram)绘制方法大汇总

来源:DataCharm

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

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

  • R 绘制泰勒图(Taylor diagram)

  • Python 绘制泰勒图(Taylor diagram)

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

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

b31318904bb13dae666506d204fd5660.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)
2df33ec782fe5ac62e351210a549b4e7.png
Taylor diagram01 of plotrix

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

taylor.diagram(ref,model1,pos.cor=FALSE)
0319435bda54a52e865d96e3e30b79fb.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")
0c739c9af9b8cc1ae326819188e5d502.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)
cf04728646dabb89ae11e592a978db0b.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)

2a009c418c977f951e1a04c57b26b442.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)

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

c59967186d27d0917a992c523816c78d.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)

6feecbcb9dfa71169af2820ae79921ba.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。

-------- End --------

7f9090d931d707eda798d7de68064b66.png
精选资料

回复关键词,获取对应的资料:

关键词资料名称
600《Python知识手册》
md《Markdown速查表》
time《Python时间使用指南》
str《Python字符串速查表》
pip《Python:Pip速查表》
style《Pandas表格样式配置指南》
mat《Matplotlib入门100个案例》
px《Plotly Express可视化指南》
精选视频

可视化: Plotly Express

财经: Plotly在投资领域的应用 | 绘制K线图表

排序算法: 汇总 | 冒泡排序 | 选择排序 | 快速排序 | 归并排序 | 堆排序 | 插入排序 | 希尔排序 | 计数排序 | 桶排序 | 基数排序

6a5baf6e79862890411839c273e0acd5.png
以下是一个简单的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`分别用于绘制不同模型的标记和颜色。函数中还计算了标准差和相关性系数的平均值,并将其作为参考线。最后,将每个模型的标准差和相关性绘制上,并用不同的颜色和标记区分不同的模型。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值