More than unfamiliar environmental connection to super typhoon climatology

Namyoung Kang, Chan Joo Jang, and James Elsner

Abstract

This study employs a refined geometric variability model (Kang and Elsner2015) to look at the environmental relationship to super typhoon climatology (Kang et al. 2019), which is one of the major concerns about climate change and disasters. It is noted that adding only several recent years leads to a remarkable weakening of the environmental explanatory power on super typhoon climatology. Looking into the annual covariance elements, we find that the recent observations showing a group of outlying events with a particular drift are more than unfamiliar compared to the former stable relationship from 1985 through 2012. Greater uncertainty thereby amplifies concerns about the looming climate crisis.

Figure 1. A geometric variability model

par(mar=c(0,0,0,0))
require(png)
## 필요한 패키지를 로딩중입니다: png
require(grid)
## 필요한 패키지를 로딩중입니다: grid
img <- readPNG('Fig1.png')
grid.raster(img)

Fig. 1. A geometric variability model. The climate connection between the two variability planes is configured by rotation (\(\theta_{1}\)), scaling (\(r\)) in the maximum covariance direction (\(\theta_{2}\)), and tilting (\(\theta_{3}\)) of the response variability plane. The geometric model gives a presentation of the response variability plane onto the explanatory variability plane in the three-dimension variability space. All variables use standardized values. The center of the planes represents the mean value, while the boundary indicates 1.0. The response variability plane and the explanatory variability plane are constructed from the TC variables and the environmental variables, respectively.

Figure 2. Reduction in the explanatory power of the environmental variables

#Setting
###############################
 INT=read.table('Data/INTwnp_6.txt',T)[,1] 
 FRQ=read.table('Data/FRQwnp_6.txt',T)[,1]
 GMSST=read.table('Data/GMSST_6.txt',T)[,1]
 SOI=read.table('Data/SOI_6.txt',T)[,1]

#Prepare empty bins
 year = 1985:2020        ; N=length(year)          #number of years
 intv=1                                                    #set angle intervals                
 ang = seq(0,360,intv)  ; angN=length(ang)      #number of angles 

#------------------------------------------
#Compute correlation during 30 years (1985-2014)
#-----------------------------------------
t=1:28
# sX and sY
 sY  = array(rep(NA,angN*N),dim=c(angN,length(t)))   #Standardized TC vars  
 sX = array(rep(NA,angN*N),dim=c(angN,length(t)))   #Standardized ENV vars  
 for (i in 1:angN) sY[i,] = scale(scale(INT[t])*cos(ang[i]*pi/180) + scale(FRQ[t])*sin(ang[i]*pi/180))  #standardized TC dir var    
 for (j in 1:angN) sX[j,] = scale(scale(GMSST[t])*cos(ang[j]*pi/180) + scale(-SOI[t])*sin(ang[j]*pi/180))  #standardized ENV dir var
# Correlation
  imsiCor=array(rep(NA,angN^2),dim=c(angN,angN)) 
  for(j in 1:angN) {for(i in 1:angN) {imsiCor[i,j]=cor(sX[j,t],sY[i,t])}}
  Cor1 = imsiCor

#------------------------------------------
#Compute correlation during 36 years (2013-2020)
#-----------------------------------------
t=1:36
# Compute sX and sY
 sY  = array(rep(NA,angN*N),dim=c(angN,length(t)))   #Standardized TC vars  
 sX = array(rep(NA,angN*N),dim=c(angN,length(t)))   #Standardized ENV vars  
 for (i in 1:angN) sY[i,] = scale(scale(INT[t])*cos(ang[i]*pi/180) + scale(FRQ[t])*sin(ang[i]*pi/180))  #standardized TC dir var    
 for (j in 1:angN) sX[j,] = scale(scale(GMSST[t])*cos(ang[j]*pi/180) + scale(-SOI[t])*sin(ang[j]*pi/180))  #standardized ENV dir var
# Correlation
  imsiCor=array(rep(NA,angN^2),dim=c(angN,angN)) 
  for(j in 1:angN) {for(i in 1:angN) {imsiCor[i,j]=cor(sX[j,t],sY[i,t])}}
  Cor2 = imsiCor

#------------------------------------------
#Identify Maximum Correlation points for each Y, i.e. (Y,X,MaxCor) 
#-----------------------------------------
MaxCor1=NULL ; for(i in 1:angN) {j=which.max(Cor1[i,]) ; MaxCor1=rbind(MaxCor1,c(i,j,Cor1[i,j]))}
MaxCor2=NULL ; for(i in 1:angN) {j=which.max(Cor2[i,]) ; MaxCor2=rbind(MaxCor2,c(i,j,Cor2[i,j]))}

#------------------------------------------
#Identify the geometric factors 
#----------------------------------------
# scaling factor (r)
  r_a=max(MaxCor1[,3])
  r_b=max(MaxCor2[,3])
  r_a ; r_b ; r_b-r_a
## [1] 0.7391328
## [1] 0.6950107
## [1] -0.04412215
# tilting factor (theta3)
  theta3_a=acos(min(abs(MaxCor1[,3])))*180/pi
  theta3_b=acos(min(abs(MaxCor2[,3])))*180/pi
  theta3_change = theta3_b - theta3_a
  theta3_a ; theta3_b ; theta3_b-theta3_a
## [1] 46.4595
## [1] 73.14256
## [1] 26.68306
# Plot Fig. 2
###############################
par(mar=c(5,5.5,4.5,5))

collist=c('#7070D1','#FF6347')
plot(-999,-999,xlim=c(360,0),ylim=c(0,0.8), xlab='', ylab='', axes=F)
     #to conform with Fig 3, xlim is reversed as xlim=c(360,0).
k=which(MaxCor1[,2]==1)[1] ; order=c(k:angN,1:(k-1)) 
 lines(MaxCor1[order,2],MaxCor1[order,3]^2,col=collist[1],lwd=6)
k=which(MaxCor2[,2]==1)[1] ; order=c(k:angN,1:(k-1)) 
 lines(MaxCor2[order,2],MaxCor2[order,3]^2,col=collist[2],lwd=6)

#check the average of explanatory powers
 mean(MaxCor1[,3]^2)   #0.5112887
## [1] 0.5112887
 mean(MaxCor2[,3]^2)   #0.2792091
## [1] 0.2792091
#Identify XY-position maximum correlation 
#-----------------------------------------
# Y1/P1Y/Y2/-P2Y/-Y1/-P1Y/-Y2/P2Y/Y1 (in order)
# for t=1:28 
      imsi=c(0, 45, 90, 135, 180, 225, 270, 315,360)/intv +1
    points(MaxCor1[imsi,2], MaxCor1[imsi,3]^2,pch=16,cex=2,col=collist[1])
      imsi=c(0, 90, 180, 270, 360)/intv +1 ; labels=expression(Y1,Y2,-Y1,-Y2,Y1)
    text(MaxCor1[imsi,2]-0.3,(MaxCor1[imsi,3]^2)+0.04,labels,cex=0.6) 
      imsi=c(45, 135, 225, 315)/intv +1 ; labels=expression(P1[Y],-P2[Y],-P1[Y],P2[Y])
    text(MaxCor1[imsi,2]-0.3,(MaxCor1[imsi,3]^2)+0.04,labels,cex=0.8) 
    
# for t=1:36
      imsi=c(0, 45, 90, 135, 180, 225, 270, 315,360)/intv +1
    points(MaxCor2[imsi,2], MaxCor2[imsi,3]^2,pch=16,cex=2,col=collist[2])
      imsi=c(0, 90, 180, 270, 360)/intv +1 ; labels=expression(Y1,Y2,-Y1,-Y2,Y1)
    text(MaxCor2[imsi,2]-0.3,(MaxCor2[imsi,3]^2)+0.04,labels,cex=0.6) 
      imsi=c(45, 135, 225, 315)/intv +1 ; labels=expression(P1[Y],-P2[Y],-P1[Y],P2[Y])
    text(MaxCor2[imsi,2]-0.3,(MaxCor2[imsi,3]^2)+0.04,labels,cex=0.8) 

#axis
axis(1,at=seq(0,360,90), labels=expression(X1,X2,-X1,-X2,X1), cex.axis=0.8)
axis(1,at=seq(45,315,90), labels=expression(P1[X],-P2[X],-P1[X], P2[X]), cex.axis=1)
axis(2,at=seq(0,1,0.1), labels=c('0.0','','0.2','','0.4','','0.6','','0.8','','1.0'), cex.axis=1, las=1)
axis(3,at=seq(0,360,90)
   , labels=expression(0~degree,90~degree,180~degree,270~degree,360~degree)
   ,cex.axis=1)
axis(4,at=seq(0,1,0.1)^2, labels=c('0.0','','','0.3','','0.5','','0.7','','0.9',''), cex.axis=1, las=1)

mtext('Environmental variability',side=1,line=3, cex=1.5)
mtext(expression(paste('Explanatory power (r'^2,')')),side=2,line=3.5, cex=1.5)
mtext('Correlation coefficient (r)',side=4,line=3.5, cex=1.5)

legend('topleft', bg='white',
         expression('30-year period (1985-2014)','36-year period (1985-2020)'),
         cex=0.8, lwd=6, col=collist, x.intersp=1.2, y.intersp=1.2, ncol=1)

box()

Fig. 2. Reduction in the explanatory power of the environmental variables. Comparison of the environmental relationships to TC variables between two periods. Variables are averaged over June to November. The former 30-year (1985–2014) TC-climate connection to the environment is shown in blue, while the recent update (1985–2020) is shown in red. The positions of the TC variables show the best explanatory variability and its explanatory power. A large reduction in the explanatory power together with the changes in the corresponding directions is noted when including data from the years since 2013.

Figure 3. Sudden and still ongoing drift of the climate connection

#Setting
###############################
 INT=read.table('Data/INTwnp_6.txt',T)[,1] 
 FRQ=read.table('Data/FRQwnp_6.txt',T)[,1]
 GMSST=read.table('Data/GMSST_6.txt',T)[,1]
 SOI=read.table('Data/SOI_6.txt',T)[,1]

#Prepare empty bins
 year = 1985:2020        ; N=length(year)          #number of years
 intv=1                                                             #set angle intervals                
 ang = seq(0,360,intv)  ; angN=length(ang)      #number of angles 

# Compute PC modes
 PC1Y  = (scale(INT)+scale(FRQ))/sqrt(2)            #in-phase mode of TC variables (i.e. ACT)
 PC2Y  = (scale(INT)-scale(FRQ))/sqrt(2)             #out-of-phase mode of  TC variables (i.e. EINT)   
 PC1X  = (scale(GMSST)+scale(-SOI))/sqrt(2)      #in-phase mode of TC variables (i.e. warmer El Nino)
 PC2X  = (scale(GMSST)-scale(-SOI))/sqrt(2)       #out-of-phase mode of  TC variables (i.e. warmer La Nina)    
                
#------------------------------------------
#Compute covariance elements 
#------------------------------------------
#sX & sY 
 sY  = array(rep(NA,angN*N),dim=c(angN,N))   #Standardized TC vars  
 sX = array(rep(NA,angN*N),dim=c(angN,N))   #Standardized ENV vars  
 for (i in 1:angN) sY[i,] = scale(scale(PC1Y)*cos(ang[i]*pi/180) + scale(PC2Y)*sin(ang[i]*pi/180))  #standardized TC dir var     
 for (j in 1:angN) sX[j,] = scale(scale(PC1X)*cos(ang[j]*pi/180) + scale(PC2X)*sin(ang[j]*pi/180))  #standardized ENV dir var   
    
#Covariance elements
CovXY=array(rep(NA,angN^2*N),dim=c(angN,angN,N)) 
CovXX=array(rep(NA,angN^2*N),dim=c(angN,angN,N)) 
for(i in 1:angN) {for(j in 1:angN) {CovXY[i,j,]=sX[j,]*sY[i,] ; CovXX[i,j,]=sX[j,]*sX[j,]}}

#Extract the annual position of maximum covariance elemements 
 mXmY=rep(NA,N) 
 DY=rep(NA,N) #direction of annual response event (TC variability)
 DX=rep(NA,N) #direction of annual explanatory event (Env variability) 
 for(t in 1:N)
  {imsi=max(CovXY[,,t]) ; mXmY[t]=imsi 
    k=which(CovXY[,,t]==imsi) #k is the number out of the vector of 360*360 values
    DY[t]=intv*(k[1]%%angN-1) ; if(DY[t]==-intv) DY[t]=360 #pick one k among the multiple peaks, then find the row number (n1)
    DX[t]=as.integer(intv*(k[1]-1)/angN)
  } 
  imsi=DX-DY #Counterclockwise direction of sP1Y deviation from sP1X
    imsi[imsi<0] = imsi[imsi<0]+360   #find the trajectory 
    for(t in 2:N) {diff=(imsi[t]-imsi[t-1])%%360 ; imsi[t]=imsi[t-1]+diff ; if(diff>180) imsi[t]=imsi[t-1]+diff-360 ; if(diff < -180) imsi[t]=imsi[t-1]+360}
    Theta1=imsi

#------------------------------------------
#Calculate interruption
#------------------------------------------
j=DX/intv+1 ; mXmX=CovXX[cbind(j,j,(1:N))]    #reference for maximum covariance elements
interrupt=mXmY-mXmX                                      #interruption

# Plot Fig. 3A
###############################
par(mar=c(5,5.5,4.5,5))

plot(-999,-999,xlim=c(-420,720),ylim=c(2020,1985),xlab='',ylab='',axes=F)
polygon(cbind(c(Theta1+180,rev(Theta1-180)),c(year,rev(year))),col='light yellow',border=NA) 
#check mean Theta1 
mean(Theta1[1:28])   #during 28 years (1985--2012): -51.93
## [1] -51.92857
mean(Theta1[1:36])   #during 28 years (1985--2012):  47.03
## [1] 47.02778
meanTheta1=mean(Theta1[1:28])  

abline(v=meanTheta1,lwd=10,col='light blue') 
abline(v=meanTheta1-360,lwd=10,col='light blue') 
abline(v=meanTheta1+360,lwd=10,col='light blue') 
abline(v=meanTheta1+720,lwd=10,col='light blue') 

lines(Theta1,year,col='light  grey',lwd=1) 
lines(Theta1-180,year,col='light grey',lwd=1) 
lines(Theta1+180,year,col='light grey',lwd=1) 

#check (*Theta1,Year) during 28 years (1985-2012)
collist=c('#00009980','#D8432180','#00000070') ; scale=1 #circle scale 
i=1:28
  points(Theta1[i],year[i],pch=16,cex=scale*mXmY[i],col=collist[1])
  points(Theta1[i]-720,year[i],pch=16,cex=scale*mXmY[i],col=collist[3])
  points(Theta1[i]-360,year[i],pch=16,cex=scale*mXmY[i],col=collist[3])
  points(Theta1[i]+360,year[i],pch=16,cex=scale*mXmY[i],col=collist[3])
  points(Theta1[i]+720,year[i],pch=16,cex=scale*mXmY[i],col=collist[3])

#check (*Theta1,Year) during 8 years (2013-2020)
i=29:36
  points(Theta1[i],year[i],pch=16,cex=scale*mXmY[i],col=collist[2])
  points(Theta1[i]-720,year[i],pch=16,cex=scale*mXmY[i],col=collist[3])
  points(Theta1[i]-360,year[i],pch=16,cex=scale*mXmY[i],col=collist[3])
  points(Theta1[i]+360,year[i],pch=16,cex=scale*mXmY[i],col=collist[3])
  points(Theta1[i]+720,year[i],pch=16,cex=scale*mXmY[i],col=collist[3])

#axis
axis(1,at=seq(-720,1080,90)
  ,labels=expression(-720~degree,'',-540~degree,''
  ,-360~degree,'',-180~degree,''
  ,0~degree,'',180~degree,'',360~degree,'',540~degree,'',720~degree,'',900~degree,'',1080~degree)
  ,cex.axis=1)
axis(2,at=seq(1980,2030,5)
  ,labels=seq(1980,2030,5)
  ,cex.axis=1, las=1)
axis(3,at=seq(-720,1080,90)
  ,labels=rep('',21)
  ,cex.axis=1)
axis(4,at=seq(1980,2030,5)
  ,labels=rep('',11)
  ,cex.axis=1, las=1)

mtext(expression(paste('Rotation factor (',theta[1],')')),side=1,line=3.5, cex=1.5)
mtext('Year',side=2,line=3.7, cex=1.5)
mtext('A',font=2,side=3,line=1.5, cex=2.5,adj=-0.2)

legend('topright', bg='white'
         ,expression(paste('(1.5',sigma,')'^2,', where ',sigma,' is 1.0 for mX and mY.'))
         ,cex=0.8, pch=16, pt.cex=c(1.5^2*scale)
         ,col=grey(0.3), x.intersp=1.2, y.intersp=1.6, ncol=1)
box()

# Plot Fig. 3B
###############################
par(mar=c(5,5.5,4.5,5))

plot(-999,-999,xlim=c(-360,360),ylim=c(-360,360),xlab='',ylab='',axes=F)
abline(h=0,v=0,lty=2,col=grey(0.5))

#draw the lines for mean Theta1 during 28 years (1985--2012)
meanTheta1=mean(Theta1[1:28])  
abline(a=-meanTheta1, b=1,lwd=10,col='light blue') 
abline(a=-meanTheta1-360, b=1,lwd=10,col='light blue') 
abline(a=-meanTheta1+360, b=1,lwd=10,col='light blue') 

#abline(a=-meanTheta1, b=1,lwd=5,col='light green') 
#abline(a=-meanTheta1-360, b=1,lwd=5,col='light green') 
#abline(a=-meanTheta1+360, b=1,lwd=5,col='light green') 

#check (*DelX,DelY) during 28 years (1985-2012)
collist=c('#00009980','#D8432180') ; scale=1 #circle scale 
i=1:28  
  points(DX[i],DY[i],pch=16,cex=scale*mXmY[i],col=collist[1],lwd=1)
  points(DX[i]-360,DY[i],pch=16,cex=scale*mXmY[i],col=collist[1],lwd=1)
  points(DX[i]-360,DY[i]-360,pch=16,cex=scale*mXmY[i],col=collist[1],lwd=1)
  points(DX[i],DY[i]-360,pch=16,cex=scale*mXmY[i],col=collist[1],lwd=1)

#check (*DelX,DelY) during 8 years (2013--2020)
i=29:36  
  points(DX[i],DY[i],pch=16,cex=scale*mXmY[i],col=collist[2],lwd=1)
  points(DX[i]-360,DY[i],pch=16,cex=scale*mXmY[i],col=collist[2],lwd=1)
  points(DX[i]-360,DY[i]-360,pch=16,cex=scale*mXmY[i],col=collist[2],lwd=1)
  points(DX[i],DY[i]-360,pch=16,cex=scale*mXmY[i],col=collist[2],lwd=1)

#note
  lev=0.1
  text(DX[29]+35,DY[29]-25,'2013',col=grey(lev))
  text(DX[30]-40,DY[30]+40,'2014',col=grey(lev))
  text(DX[31]-55,DY[31],'2015',col=grey(lev))
  text(DX[32]-30,DY[32]+25,'2016',col=grey(lev))
  text(DX[33]-30,DY[33]-360-25,'2017',col=grey(lev))
  text(DX[34]-30,DY[34]-360-25,'2018',col=grey(lev))
  text(DX[35]-30,DY[35]-25,'2019',col=grey(lev))
  text(DX[36]-30,DY[36]-25,'2020',col=grey(lev))

#axis
axis(1,at=seq(-360,360,90)
  ,labels=expression(P1[X],P2[X],-P1[X],-P2[X],P1[X],P2[X],-P1[X],-P2[X],P1[X])
  ,cex.axis=1)
axis(2,at=seq(-360,360,90)
  ,labels=expression(P1[Y],P2[Y],-P1[Y],-P2[Y],P1[Y],P2[Y],-P1[Y],-P2[Y],P1[Y])
  ,cex.axis=1, las=1)
axis(3,at=seq(-360,360,90)
  ,labels=expression(-360~degree,-270~degree,-180~degree,-90~degree
  ,0~degree,90~degree,180~degree,270~degree,360~degree)
  ,cex.axis=1)
axis(4,at=seq(-360,360,90)
  ,labels=expression(-360~degree,-270~degree,-180~degree,-90~degree
  ,0~degree,90~degree,180~degree,270~degree,360~degree)
  ,cex.axis=1, las=1)

mtext('Environmental variability',side=1,line=3, cex=1.5)
mtext('TC variability',side=2,line=3.5, cex=1.5)
mtext('B',font=2,side=3,line=1.5, cex=2.5,adj=-0.2)

legend('topleft', bg='white',
         expression('1985-2012','2013-2020'
                       ,paste('(1.5',sigma,')'^2,', where ',sigma,' is 1.0 for mX and mY.')),
         cex=0.8, pch=c(16,16,16),
         pt.cex=c(1.5^2*scale),
         col=c(collist,grey(0.3)), x.intersp=1.2, y.intersp=1.2, ncol=1)
box()

# Plot Fig. 3C
###############################
par(mar=c(5,5.5,4.5,5))

collist=c('#7070D1','#FF6347') #c('#00009980','#D8432170')
plot(-999,-999,xlim=c(1985,2020),ylim=c(-5,5),xlab='',ylab='',axes=F)
# polygon(cbind(c(2012.5,2022,2022,2012.5),c(-10,-10,10,10)),col='light yellow',border=NA) 
 abline(h=0,lty=2,col=grey(0.3))
 lines(year[28:36],interrupt[28:36],col=collist[2],lwd=6) 
 lines(year[1:28],interrupt[1:28],col=collist[1],lwd=6) 
#axis
axis(1,at=seq(1980,2030,5),labels=seq(1980,2030,5),cex.axis=1)
axis(2,at=seq(-5,5,1),labels=c('-5.0','-4.0','-3.0','-2.0','-1.0','0.0','1.0','2.0','3.0','4.0','5.0'),cex.axis=1, las=1)
axis(3,at=seq(1980,2030,5),labels=rep('',11),cex.axis=1)
axis(4,at=seq(-5,5,1),labels=rep('',11),cex.axis=1, las=1)

mtext('Year',side=1,line=3.5, cex=1.5)
mtext('Interruption (no unit)',side=2,line=3.7, cex=1.5)
mtext('C',font=2,side=3,line=1.5, cex=2.5,adj=-0.2)

box()

Fig. 3. Sudden and still ongoing drift of the climate connection. The direction and magnitude of the annual maximum covariance elements (\(mX_{t}\)·\(mY_{t}\)) distributed on (A) a time domain and (B) an XY plane, and (C) the interruption (\(mX_{t}\)·\(mY_{t}\)\(mX_{t}\)·\(mX_{t}\)). All variables are annually averaged from June through November. Since the variability direction is cyclic, the distribution is tiled as a mosaic. It is noted that \(\theta_{1}\) had been stable around the value of -51.9\(^{\circ}\) until 2012 (sky-blue lines), and the sudden and still ongoing drift of the climate connection began in 2013. Simultaneously, the interruption started a distinct fluctuation in 2014 (red line).

Figure 4. Time series of the atmospheric suppression and the efficiency of TC intensity

# 1. set option
#------------------------------------------------
Year=1985:2020

 INT=read.table('Data/INTwnp_6.txt',T)[,1] #STYp
 FRQ=read.table('Data/FRQwnp_6.txt',T)[,1]
 EINT=(scale(INT)-scale(FRQ))/sqrt(2)
 z=read.table('Data/hgt.1984to2020.jjason.wnp.txt',FALSE)  # geopotential height (m)
 z=z[-c(1:17),] #1985-2020
   
# 2. make each profile (0~30N area-weighted mean values)  
#------------------------------------------------
Lat=seq(-90,90,2.5)
n1=which(Lat==0) ;  n2=which(Lat==30)   # tropics

var=z
profileset=NULL             #dim[time,lev]
 for (lev in 1:17)              # for each lev (1000 hPa to 10 hPa)
 {tmsrs=NULL
  annualnumset= seq(lev,length(Year)*17,17)[1:length(Year)]
  for (ann in annualnumset)   # time-series of area weight mean (0~30N)
  {area_weighted_value=var[ann,(n1:n2)]*cos(Lat[n1:n2]*pi/180)/sum(cos(Lat[n1:n2]*pi/180))
   tmsrs=c(tmsrs, sum(as.numeric(area_weighted_value)))}  
   profileset=rbind(profileset,tmsrs)
 }
profileset_z=profileset

GHT500=profileset_z[6,]

# 3. plot  
#------------------------------------------------
#p=log(c(1000,925,850,700,600,500,400,300,250,200,150,100,70,50,30,20,10))
#p2=c(1000,925,850,700,600,500,400,300,250,200,150,100,70,50,30,20,10)

sEINT = (EINT - mean(EINT[1:28]))/sd(EINT[1:28])
sGHT500= (GHT500 - mean(GHT500[1:28]))/sd(GHT500[1:28])

par(mar=c(5,5,3,2))

plot(-999,-999,xlim=c(1985,2020),ylim=c(-3,4), axes=FALSE, xlab='', ylab='') ; abline(h=0,lty=2)
abline(v=2012,col='light green',lwd=3)
lines(Year,sGHT500,col='dark orange',lwd=4)
lines(Year,sEINT,col='dark blue',lwd=4)  
legend('topleft', c('Geopotential height at 500 hPa','Efficiency of TC Intensity'), text.col=1,col=c('dark orange','dark blue')
         ,seg.len=3,cex=1.1 ,lty=1,lwd=4, ncol=1)

  axis(1,at=seq(1985, 2020,5), labels=seq(1985, 2020,5),cex.axis=1.2) 
  axis(2,at=seq(-4,4,1), labels=seq(-4,4,1),cex.axis=1.2,las=1)
  mtext('Year',side=1,line=3, cex=1.4)
  mtext('Standardized value',side=2,line=3, cex=1.4)
box()

Fig. 4. Time series of the atmospheric suppression and the efficiency of TC intensity in the western North Pacific. The atmospheric suppression is indicated by geopotential height at 500 hPa. The efficiency of TC intensity is the out-of-phase principal component of annual TC intensity and frequency. All values are annually averaged over JJASON in the tropical region of the western North Pacific (0\(^\circ\)–30\(^\circ\)N, 100\(^\circ\)E–180\(^\circ\)). Green vertical line indicates the year 2012. For demonstration, annual values are standardized by the values during the 28 years (1985–2012).

END