好奇心Log 发表于 2024-5-6 13:41:31

Python可视化 | 9个例子全面掌握泰勒图可视化

泰勒图是Karl E. Taylor于2001年首先提出,主要用来比较几个气象模式模拟的能力,因此该表示方法在气象领域使用最多,但是在其他自然科学领域也有一定的应用。
泰勒图本质上是巧妙的将模型的相关系数(correlation coefficient)、中心均方根误差(centered root-mean-square)和标准差(standard Deviation)三个评价指标整合在一张极坐标图上。
泰勒图的绘制方法有很多,下面用9个例子带大家全面搞定Taylor图。

导入所需库
import matplotlib.pyplot as plt
from matplotlib import rcParams
import numpy as np
import pickle
import skill_metrics as sm
from sys import version_info

rcParams["figure.figsize"] =
rcParams['lines.linewidth'] = 1 # line width for plots
rcParams.update({'font.size': 12}) # font size of axes text
定义相关方法
def load_obj(name):
    # Load object from file in pickle format
    if version_info == 2:
      suffix = 'pkl'
    else:
      suffix = 'pkl3'

    with open(name + '.' + suffix, 'rb') as f:
      return pickle.load(f) # Python2 succeeds
读取数据、计算统计值
# Read data from pickle file
data = load_obj('taylor_data')

# Calculate statistics for Taylor diagram
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')

# Store statistics in arrays
sdev = np.array(, taylor_stats1['sdev'],
                  taylor_stats2['sdev'], taylor_stats3['sdev']])
crmsd = np.array(, taylor_stats1['crmsd'],
                  taylor_stats2['crmsd'], taylor_stats3['crmsd']])
ccoef = np.array(, taylor_stats1['ccoef'],
                  taylor_stats2['ccoef'], taylor_stats3['ccoef']])
示例1
sm.taylor_diagram(sdev,crmsd,ccoef)

# Write plot to file
plt.savefig('taylor1.png')

# Show plot
plt.show()
示例2
sm.taylor_diagram(sdev,crmsd,ccoef, styleOBS = '-',
                  colOBS = 'r', markerobs = 'o',
                  titleOBS = 'observation')

# Write plot to file
plt.savefig('taylor2.png')

# Show plot
plt.show()

示例3
label = ['Non-Dimensional Observation', 'M1', 'M2', 'M3']

intervalsCOR = np.concatenate((np.arange(0,1.0,0.2),
                              ))
sm.taylor_diagram(sdev,crmsd,ccoef, markerLabel = label,
                  tickRMS = np.arange(0,60,20),
                  tickSTD = np.arange(0,55,5), tickCOR = intervalsCOR,
                  rmslabelformat = ':.1f')

# Write plot to file
plt.savefig('taylor3.png')

# Show plot
plt.show()

示例4
label = ['Non-Dimensional Observation', 'M1', 'M2', 'M3']

sm.taylor_diagram(sdev,crmsd,ccoef, markerLabel = label,
                  markerLabelColor = 'r',
                  tickRMS= np.arange(0,60,10),
                  tickRMSangle = 110.0,
                  colRMS = 'm', styleRMS = ':', widthRMS = 2.0,
                  tickSTD = np.arange(0,80,20), axismax = 60.0,
                  colSTD = 'b', styleSTD = '-.', widthSTD = 1.0,
                  colCOR = 'k', styleCOR = '--', widthCOR = 1.0)

# Write plot to file
plt.savefig('taylor4.png')

# Show plot
plt.show()

示例5
label = ['Non-Dimensional Observation', 'M1', 'M2', 'M3']
   
sm.taylor_diagram(sdev,crmsd,ccoef, markerLabel = label,
                  markerLabelColor = 'r',
                  markerColor = 'r', markerLegend = 'on',
                  tickRMS = range(0,60,10), tickRMSangle = 110.0,
                  colRMS = 'm', styleRMS = ':', widthRMS = 2.0,
                  titleRMS = 'off', tickSTD = range(0,80,20),
                  axismax = 60.0, colSTD = 'b', styleSTD = '-.',
                  widthSTD = 1.0, titleSTD = 'off',
                  colCOR = 'k', styleCOR = '--', widthCOR = 1.0,
                  titleCOR = 'off')

# Write plot to file
plt.savefig('taylor5.png')

# Show plot
plt.show()

示例6
label = ['Non-Dimensional Observation', 'M1', 'M2', 'M3']
   
sm.taylor_diagram(sdev,crmsd,ccoef,
                  markerDisplayed = 'colorBar', titleColorbar = 'RMSD',
                  cmapzdata = crmsd, titleRMS = 'off',
                  tickRMS = range(0,60,10), tickRMSangle = 110.0,
                  colRMS = 'm', styleRMS = ':', widthRMS = 2.0,
                  tickSTD = range(0,80,20), axismax = 60.0,
                  colSTD = 'b', styleSTD = '-.', widthSTD = 1.0,
                  colCOR = 'k', styleCOR = '--', widthCOR = 1.0)


# Write plot to file
plt.savefig('taylor6.png')

# Show plot
plt.show()

示例7
label = ['Non-Dimensional Observation', 'M1', 'M2', 'M3']
   
sm.taylor_diagram(sdev,crmsd,ccoef,
                  numberPanels = 2,
                  markerLabel = label, markerLabelColor = 'r',
                  tickRMS = range(0,90,10), tickRMSangle = 150.0,
                  colRMS = 'm', styleRMS = ':', widthRMS = 2.0,
                  titleRMS = 'off',
                  tickSTD = range(0, 80, 20), axismax = 60.0,
                  colSTD = 'b', styleSTD = '-.', widthSTD = 1.0,
                  colCOR = 'k', styleCOR = '--', widthCOR = 1.0)

# Write plot to file
plt.savefig('taylor7.png')

# Show plot
plt.show()

示例8
label = ['Non-Dimensional Observation', 'M1', 'M2', 'M3']

sm.taylor_diagram(sdev,crmsd,ccoef,
                  numberPanels = 2,
                  markerLabel = label, markerLabelColor = 'r',
                  tickRMS = range(0,90,10), tickRMSangle = 150.0,
                  colRMS = 'm', styleRMS = ':', widthRMS = 2.0,
                  titleRMS = 'off',
                  tickSTD = range(0, 80, 20), axismax = 60.0,
                  colSTD = 'b', styleSTD = '-.', widthSTD = 1.0,
                  colCOR = 'k', styleCOR = '--', widthCOR = 1.0)

# Calculate a negative correlation for one of the data values.
data.pred3['data'] = -data.pred3['data']
taylor_stats3 = sm.taylor_statistics(data.pred3,data.ref,'data')
sdev = np.array(, taylor_stats3['sdev']])
crmsd = np.array(, taylor_stats3['crmsd']])
ccoef = np.array(, taylor_stats3['ccoef']])

# Overlay new data point (blue) on existing diagram
label = ['Non-Dimensional Observation', 'M4']
sm.taylor_diagram(sdev,crmsd,ccoef, overlay = 'on',
                  markerLabel = label, markerLabelColor = 'b',
                  markerColor = 'b')

# Write plot to file
plt.savefig('taylor8.png')

# Show plot
plt.show()

示例9
label = ['Non-Dimensional Observation', 'M1', 'M2', 'M3', 'M4', 'M5']

# Check for duplicate statistics
duplicateStats = sm.check_duplicate_stats(sdev,crmsd)
   
# Report duplicate statistics, if any
sm.report_duplicate_stats(duplicateStats)


sm.taylor_diagram(sdev,crmsd,ccoef, markerLabel = label,
                  markerLabelColor = 'r',
                  markerColor = 'r', markerLegend = 'on',
                  tickRMS = range(0,60,10),
                  colRMS = 'm', styleRMS = ':', widthRMS = 2.0,
                  titleRMS = 'on', titleRMSDangle = 40.0, tickSTD = range(0,80,20),
                  axismax = 60.0, colSTD = 'b', styleSTD = '-.',
                  widthSTD = 1.0, titleSTD = 'on',
                  colCOR = 'k', styleCOR = '--', widthCOR = 1.0,
                  titleCOR = 'on', markerSize = 10, alpha = 0.0)

# Write plot to file
plt.savefig('taylor9.png')

# Show plot
plt.show()

数据及脚本
获取示例数据及脚本,请在好奇心Log公众号后台回复Taylor

文章来源于微信公众号:好奇心Log

页: [1]
查看完整版本: Python可视化 | 9个例子全面掌握泰勒图可视化