A risk map for tropical cyclones: Introduction of localized ACE

Eunhee Gil and Namyoung Kang

Abstract

To minimize the risks from tropical cyclones (TCs), the quantification and regular monitoring of TC activities are strongly needed. By introducing LACE, which is a localized index utilizing the formulation of the accumulated cyclone energy (ACE), this paper proposes a geographical approach to the risk map for TCs, which has been unavailable using the conventional ACE. Annual LACE measures TC activity by merging the quantities of frequency, intensity, and duration factors, which contribute to the local TC activity in a year. In conjunction with LACE, a concept of LACE potential is also proposed to understand the contributions of the factors to LACE. The LACE potential enables the comparison of the contributions by the factors at a specific location, and the identification of the characteristics of the regional TC risks. To demonstrate the LACE and LACE potential, this paper provides the response of the local TC activities to El Niño-Southern Oscillation in the western North Pacific, which confirms the value of the indices.

rm(list = ls())

# Read data
##################################
LACE  = read.table( "LACE_1991to2020_12m.dat",header = TRUE)
Fdata =  read.table(  "F_1991to2020_12m.dat"    , header = T)
MIdata = read.table(  "MI_1991to2020_12m.dat"   , header = T)
MDdata = read.table( "MD_1991to2020_12m.dat"  , header = T)
Xdata =  read.table( "X_1991to2020_12m.dat" , header = T)

# mean soi for (1991:2020)

soi1 = read.table("soi_anomaly_1951_2021.txt", header = F)
soi30 = soi1[(1991-1950):(2020-1950),-1]
soi30 = rowMeans(soi30)

soi = read.table("soi_anomaly_1951_2021.txt", header = F)
soi= rowMeans(soi[,-1])
soi70 = (soi-mean(soi30))/sd(soi30)

# data frame 
nsoi = NULL;
nsoi = - soi70[(1991-1950):(2020-1950)]
Year = 1991:2020 #1951:2021
nsoi = cbind(Year, nsoi)

# Extract composite data
##################################
#LACE
#---------------------------------
data = NULL

imsi = LACE
imsi_Clim =NULL #Clim
imsi_Clim = rowMeans(imsi)

imsi_LN =NULL   #LN
for(i in which(nsoi[,2]<(-1) ))
{imsi_LN = cbind(imsi_LN,imsi[,i])}

imsi_EN =NULL   #EN
for(i in which(nsoi[,2]>(1)) )
{imsi_EN = cbind(imsi_EN,imsi[,i])}

compLACE= list(imsi_Clim,imsi_LN,imsi_EN) 
names(compLACE)=c("Clim","LN","EN") 
save(compLACE,file="compLACE.RData")  #data format: list

# F 
#---------------------------------
data = NULL

imsi = Fdata
imsi_Clim =NULL; #Clim
imsi_Clim = rowMeans(imsi)

imsi_LN =NULL # LN
for(i in which(nsoi[,2]<(-1) ))
{imsi_LN = cbind(imsi_LN,imsi[,i])}

imsi_EN =NULL # EN
for(i in which(nsoi[,2]>(1)) )
{imsi_EN = cbind(imsi_EN,imsi[,i])}

compF= list(imsi_Clim,imsi_LN,imsi_EN) ###
names(compF)=c("Clim","LN","EN") ###
save(compF,file="compF.RData")###

# MI
#---------------------------------
data = NULL

imsi = MIdata
imsi_Clim =NULL; #Clim
imsi_Clim = rowMeans(imsi)

imsi_LN =NULL # LN
for(i in which(nsoi[,2]<(-1) ))
{imsi_LN = cbind(imsi_LN,imsi[,i])}

imsi_EN =NULL # EN
for(i in which(nsoi[,2]>(1)) )
{imsi_EN = cbind(imsi_EN,imsi[,i])}

compMI= list(imsi_Clim,imsi_LN,imsi_EN) 
names(compMI)=c("Clim","LN","EN") 
save(compMI,file="compMI.RData")

# MD
#---------------------------------
data = NULL

imsi = MDdata
imsi_Clim =NULL; #Clim
imsi_Clim = rowMeans(imsi)

imsi_LN =NULL # LN
for(i in which(nsoi[,2]<(-1) ))
{imsi_LN = cbind(imsi_LN,imsi[,i])}

imsi_EN =NULL # EN
for(i in which(nsoi[,2]>(1)) )
{imsi_EN = cbind(imsi_EN,imsi[,i])}

compMD= list(imsi_Clim,imsi_LN,imsi_EN) 
names(compMD)=c("Clim","LN","EN") 
save(compMD,file="compMD.RData")

# X
#---------------------------------
data = NULL

imsi = Xdata
imsi_Clim =NULL; #Clim
imsi_Clim = rowMeans(imsi)

imsi_LN =NULL #LN
for(i in which(nsoi[,2]<(-1) ))
{imsi_LN = cbind(imsi_LN,imsi[,i])}

imsi_EN =NULL # EN
for(i in which(nsoi[,2]>(1)) )
{imsi_EN = cbind(imsi_EN,imsi[,i])}

compX = list(imsi_Clim,imsi_LN,imsi_EN) 
names(compX) = c("Clim","LN","EN") 
save(compX,file = "compX.RData")

Figure 1. A schematic diagram of local TC activity

library(png)
library(grid)
img = readPNG('Fig1.png')
grid.raster(img)

Fig. 1. Schematic diagram of local TC activity. The local TC activity is contributed by the sum of the observed intensities (dots) along the tracks (curved arrows) and the radius (R) of TC influence. The value of R is fixed around the location (cross). The local TC activity implies the level of the TC risk from an Eulerian perspective.

Figure 2. Geographical distribution of regional TC risks

rm(list = ls())

# Read data
##################################
library(maps)
library(akima)
library(RColorBrewer)
library(fields)
library(sp)

Year = 1991:2020
BeginYear=1991  ; EndYear=2020

AB6h=read.table('AB6hr2020.dat',T)
load("compLACE.RData") #Clim (1) ; EN (6) ; LN (6) 
load("compF.RData")
load("compMI.RData")
load("compMD.RData")
load("compX.RData")

#pdf('Fig2.pdf', width= 14, height=6)
par(mar=c(5,7,4,2))

# Plot 1
##################################
data=AB6h[(AB6h$bst=='JT'),]  

#draw map
plot(100,120,xlim=c(100,180),ylim=c(-10,50),xlab=' ',ylab='', main=''
     ,axes=F, xaxs='i',yaxs='i')

axis(1,at=seq(100,180,20), labels=expression
     (100~degree~E,120~degree~E,140~degree~E,160~degree~E,180~degree),cex.axis=1.2) 
axis(2,at=seq(0,50,10), labels=expression
     (0~degree,10~degree~N,20~degree~N,30~degree~N,40~degree~N,50~degree~N),cex.axis=1.2,las=1)
axis(3,at=seq(100,180,20), labels=rep('',5)) 
axis(4,at=seq(0,50,10), labels=rep('',6))

#panel.first={u=par('usr');rect(u[1],u[3],u[2],u[4],col=colors()[62])},las=1);axis(3);axis(4, las=1)

m=map('world',fill=T,col=colors()[177],lty=0,add=T)
map('world',boundary=F,interior=T,col=colors()[177], lwd=2,add=T)
map('world',boundary=F,interior=T,col=colors()[177], xlim=c(0,110),lwd=3,add=T)
m$x=m$x+360
map(m,fill=T, lty=0, col=colors()[177],add=T)
map(m,boundary=F,interior=T,col=colors()[177], lwd=2,add=T)


#draw track lines
vrange=c(34,64,130)
crange=c(colors()[142],colors()[451],"#800026")#,552
#for (b in 1:6)
#{if(b==1) data=AB1 ; if (b==2) data=AB2 ; if (b==3) data=AB3 ; if (b==4) data=AB4 ; if (b==5) data=AB5 ; if (b==6) data=AB6
data$lon=data$lon/10 ; data$lat=data$lat/10
for(x in 1:3)
{
  k=which(data$msw>=vrange[x])
  ABx=data[k,]; ABx=ABx[(ABx$year>=BeginYear & ABx$year<=EndYear),]
  k=which(ABx$lon<15) ; if(length(k)>0) ABx$lon[k]=ABx$lon[k]+360
  
  id=which(diff(ABx$idtrack)>=1) #check delim
  id2=id+c(1:length(id)) #set delim
  LON=numeric(dim(ABx)[1]+length(id2)) ; LON[id2]=NA ; LON[!is.na(LON)]=ABx$lon
  LAT=numeric(dim(ABx)[1]+length(id2)) ; LAT[id2]=NA ; LAT[!is.na(LAT)]=ABx$lat
  lines(LON,LAT,col=crange[x] ) # Draw lines for each intensity level
}

#legend
legend(99,47, bty="n", c("Tropical Storm", "Typhoon" ," Super Typhoon"), text.col="white",cex=0.8, lty=1, lwd=2, col=crange,  
       ncol=1,seg.len = 0.5,x.intersp = 0.6)

text(114,48,paste('30 years (1991\u2013','2020)', sep=''),col = 'white',cex = 1.0)
mtext('Longitude',at= 140,side=1,line=3.5,cex=1.7)
mtext('Latitude',side=2,line=4.8,cex=1.7)
mtext('a', side = 3,line = 1.4, cex = 3, adj = 0 ,at = 86, font=2)
mtext('TC tracks', 
      side = 3, # which margin to place text. 1=bottom, 2=left, 3=top, 4=right
      line = 1.4, # to indicate the line in the margin starting with 0 and moving out
      cex = 1.9, adj = 0 ,at = 100,font=1) 
map.scale(153,-4,cex = 0.8,ratio = T,relwidth = 0.2)
compassRose(173,40,cex = 0.7)

box()

# Plot 2
##################################
CM1 = as.array(unlist(compLACE$Clim))
# CM2 = as.array(unlist(compF$Clim))
# CM3 = as.array(unlist(compMI$Clim))
# CM4 = as.array(unlist(compMD$Clim))
# CM5 = as.array(unlist(compX$Clim))
# 
# EN1 = as.array(unlist(compLACE$EN))
# EN2 = as.array(unlist(compF$EN))
# EN3 = as.array(unlist(compMI$EN))
# EN4 = as.array(unlist(compMD$EN))
# EN5 = as.array(unlist(compX$EN))
# 
# LN1 = as.array(unlist(compLACE$LN))
# LN2 = as.array(unlist(compF$LN))
# LN3 = as.array(unlist(compMI$LN))
# LN4 = as.array(unlist(compMD$LN))
# LN5 = as.array(unlist(compX$LN))

# regional data
Lon=seq(-180,180,2.5)  ;  LonSet = rep(Lon,73)                   #lon
Lat=seq(-90,90,2.5)    ;  LatSet = rev(rep(Lat, each = 145))    #lat

A1= LonSet
A2= LatSet
A3=CM1 ; A3=matrix(A3,nrow=144) ; A3=rbind(A3,A3[1,]) ; A3=A3/(10^4)

colist_negative=colorRampPalette(brewer.pal(9,'BuPu'))(10) # extract 10 from Blue-Purple
colist_positive=colorRampPalette(brewer.pal(9,'YlOrRd'))(10) # extract 10 from Yellow-Orange-Red
colist=c(rev(colist_negative),'white',colist_positive)  # comprise 21 color set
brk=c(-100,seq(-10,-1,length=10),seq(1,10,length=10),100)
  levs1=c(-1,1)
  levs2=c(c(rev(-seq(1,100,9)),seq(1,100,9)))

interp=interp(A1,A2,A3,xo=seq(min(A1),max(A1),length=145*6),yo=seq(min(A2),max(A2),length=73*6),duplicate='mean')
image(interp, axes=F, xlab='', ylab='', main='', col=colist, breaks=brk, xlim=c(100,180),ylim=c(-10,50))
contour(interp, levels=levs1, labels = round(levs1,1), col='#666699',labcex=0.9, lwd=1, add = TRUE)
contour(interp, levels=levs2, labels = round(levs2,1), col='white',labcex=0.9, lwd=1, add = TRUE)  

map('world',interior=F,col=grey(0.7),lwd=1,add=T)


axis(1,at=seq(100,180,20), labels=expression
     (100~degree~E,120~degree~E,140~degree~E,160~degree~E,180~degree),cex.axis=1.2) 
axis(2,at=seq(0,50,10), labels=expression
     (0~degree,10~degree~N,20~degree~N,30~degree~N,40~degree~N,50~degree~N),cex.axis=1.2,las=1)
axis(3,at=seq(100,180,20), labels=rep('',5)) 
axis(4,at=seq(0,50,10), labels=rep('',6))

text(114,48, paste('30 years (1991\u2013','2020)', sep=''),col = 1,cex = 1.0)
text(173,48, expression(paste(10^{4},' ',m^{2},s^{-2},sep='')),col = 1,cex = 1.0)
mtext('Longitude',at= 140,side=1,line=3.5,cex=1.7)
mtext('Latitude',side=2,line=4.8,cex=1.7)
mtext('b', side = 3,line = 1.4, cex = 3, adj = 0 ,at = 86, font=2)
mtext('Climatological LACE', 
      side = 3, # which margin to place text. 1=bottom, 2=left, 3=top, 4=right
      line = 1.4, # to indicate the line in the margin starting with 0 and moving out
      cex = 1.9, adj = 0 ,at = 100,font=1) 

map.scale(153,-4,cex = 0.8,ratio = T,relwidth = 0.2)
compassRose(173,38,cex = 0.7)

box()

#------------
#dev.off()

Fig. 2. Geographical distribution of regional TC risks. (a) TC tracks and (b) climatological LACE during the 30 years (1991-2020). Best-track data from JTWC are used to analyze the TC activity. In (a), the TC intensities are represented in different colors following the JTWC’s operational intensity scale. The threshold intensities of 34 kt, 64 kt, and 130 kt are applied for “Tropical Storm”, “Typhoon” and “Super Typhoon”, respectively. Climatological LACE is indicated by the local TC activity during the same period of (a), and its geographical distribution represents the regional TC risks.

Figure 3. Geographical response of LACE to ENSO variability

# Read data
##################################

load("compLACE.RData")
load("compF.RData")
load("compMI.RData")
load("compMD.RData")
load("compX.RData")

#pdf('Fig3.pdf', width= 14, height=12)
par(mar=c(7,8,4,2))

# Plot 
##################################
CM1 = as.array(unlist(compLACE$Clim))
# CM2 = as.array(unlist(compF$Clim))
# CM3 = as.array(unlist(compMI$Clim))
# CM4 = as.array(unlist(compMD$Clim))
# CM5 = as.array(unlist(compX$Clim))

EN1 = as.array(unlist(compLACE$EN))
# EN2 = as.array(unlist(compF$EN))
# EN3 = as.array(unlist(compMI$EN))
# EN4 = as.array(unlist(compMD$EN))
# EN5 = as.array(unlist(compX$EN))

LN1 = as.array(unlist(compLACE$LN))
# LN2 = as.array(unlist(compF$LN))
# LN3 = as.array(unlist(compMI$LN))
# LN4 = as.array(unlist(compMD$LN))
# LN5 = as.array(unlist(compX$LN))

LACE_EN = rowMeans(EN1)
LACE_LN = rowMeans(LN1)
ENdiff = rowMeans(EN1) - CM1
LNdiff = rowMeans(LN1) - CM1

# regional data
Lon=seq(-180,180,2.5)  ;  LonSet = rep(Lon,73)                   #lon
Lat=seq(-90,90,2.5)    ;  LatSet = rev(rep(Lat, each = 145))    #lat

for (i in 1:4)
{if(i==1) {Var = LACE_EN ; title = 'LACE composite' ; subtitle = 'Years of El Niño trend'; plt_text = 'a'}
  if(i==2) {Var = LACE_LN ; title = 'LACE composite' ; subtitle = 'Years of La Niña trend'; plt_text = 'b'}
  if(i==3) {Var = ENdiff  ; title = 'LACE difference' ; subtitle = 'Years of El Niño trend'; plt_text = 'c'}
  if(i==4) {Var = LNdiff  ; title = 'LACE difference' ; subtitle = 'Years of La Niña trend'; plt_text = 'd'}
  
  A1= LonSet
  A2= LatSet
  A3= Var ; A3=matrix(A3,nrow=144) ; A3=rbind(A3,A3[1,]) ; A3=A3/(10^4)
  
  colist_negative=colorRampPalette(brewer.pal(9,'BuPu'))(10) # extract 10 from Blue-Purple
  colist_positive=colorRampPalette(brewer.pal(9,'YlOrRd'))(10) # extract 10 from Yellow-Orange-Red
  colist=c(rev(colist_negative),'white',colist_positive)  # comprise 21 color set
  brk=c(-100,seq(-10,-1,length=10),seq(1,10,length=10),100)
  levs1=c(-1,1)
  levs2=c(c(rev(-seq(1,100,9)),seq(1,100,9)))
  
  interp=interp(A1,A2,A3,xo=seq(min(A1),max(A1),length=145*6),yo=seq(min(A2),max(A2),length=73*6),duplicate='mean')
  image(interp, axes=F, xlab='', ylab='', main='', col=colist, breaks=brk, xlim=c(100,180),ylim=c(-10,50))
  contour(interp, levels=levs1, labels = round(levs1,1), col='#666699',labcex=0.9, lwd=1, add = TRUE)
  contour(interp, levels=levs2, labels = round(levs2,1), col='white',labcex=0.9, lwd=1, add = TRUE)  
  
  map('world',interior=F,col=grey(0.7),lwd=1,add=T)
  axis(1,at=seq(100,180,20), labels=expression
       (100~degree~E,120~degree~E,140~degree~E,160~degree~E,180~degree),cex.axis=1.8) 
  axis(2,at=seq(0,50,10), labels=expression
       (0~degree,10~degree~N,20~degree~N,30~degree~N,40~degree~N,50~degree~N),cex.axis=1.8,las=1)
  axis(3,at=seq(100,180,20), labels=rep('',5)) 
  axis(4,at=seq(0,50,10), labels=rep('',6))
  
  text(121, 47, subtitle ,col = 1,cex = 1.5)
  text(170, 47, expression(paste(10^{4},' ',m^{2},s^{-2},sep='')),col = 1,cex = 1.5)
  mtext('Longitude',at= 140,side=1,line=3.9,cex=1.7)
  mtext('Latitude',side=2,line=6.2,cex=1.7)
  mtext(plt_text, side = 3,line = 1.4, cex = 3, adj = 0 ,at = 86, font=2)
  mtext(title, 
        side = 3, # which margin to place text. 1=bottom, 2=left, 3=top, 4=right
        line = 1.4, # to indicate the line in the margin starting with 0 and moving out
        cex = 1.9, adj = 0 ,at = 100,font=1) 
  map.scale(150,-4,cex = 1.0,ratio = T,relwidth = 0.2)
  compassRose(173,37,cex = 0.55) 
  box()
  
}

#------------
#dev.off()

Fig. 3. Geographical response of LACE to ENSO variability. (a) LACE during the six years (1991, 1992, 1993, 1994, 1997, and 2015) of El Niño trend (\(\rm{LACE_E}\)), and (b) LACE during the six years (1996, 1999, 2000, 2008, 2010, and 2011) of La Niña trend (\(\rm{LACE_L}\)). (c) and (d) are the differences of (a) and (b) from the climatological LACE (\(\rm{LACE_C}\)), respectively.

Fig. 4. Conceptual diagram of LACE potentials.

library(png)
library(grid)
img = readPNG('Fig4.png')
grid.raster(img)

Fig. 4. Diagram of LACE potentials. LACE potentials of (a) the number of TCs (\(\rm{P_F}\)), (b) mean intensity (\(\rm{P_{MI}}\)), (c) mean duration (\(\rm{P_{MD}}\)), and (d) mean exposure (\(\rm{P_X}\)) are the differences of each experimental LACE from the climatological LACE (\(\rm{LACE_C}\)). The experimental LACE (box outlined in dark blue) is defined by the LACE where only one factor changes from its climatological level (box shaded in yellow). Thus, the LACE potential means the partial contribution (blue transparent box) of a factor to LACE (box outlined in green). It needs to be noted that the shape of the boxes for LACE and \(\rm{LACE_C}\) are not necessarily the same among a, b, c, and d. 

Figure 5. Geographical distribution of LACE potentials

rm(list = ls())

# Read data
##################################
Year = 1991:2020

load("compLACE.RData")
load("compF.RData")
load("compMI.RData")
load("compMD.RData")
load("compX.RData")

LACE_C =rowMeans(read.table('LACE_1991to2020_12m.dat' ,header = T    ))
F_C =rowMeans(read.table('F_1991to2020_12m.dat',header = T  ))
MI_C =rowMeans(read.table('MI_1991to2020_12m.dat' ,header = T   ))
MD_C = rowMeans(read.table('MD_1991to2020_12m.dat' ,header = T   ))
X_C =rowMeans(read.table( 'X_1991to2020_12m.dat',header = T  ))

Fcomp = rowMeans(compF$EN)
MIcomp = rowMeans(compMI$EN)
MDcomp = rowMeans(compMD$EN)
Xcomp = rowMeans(compX$EN)

#P_F
k = which(F_C == 0) 
P_F = (Fcomp - F_C)*(LACE_C/F_C)
P_F[k] = 0

#P_MI
k = which(MI_C == 0) 
P_MI = (MIcomp - MI_C)*(LACE_C/MI_C)
P_MI[k] = 0 

#P_MD
k = which(MD_C == 0) 
P_MD = (MDcomp - MD_C)*(LACE_C/MD_C)
P_MD[k] = 0

#P_X
k = which(X_C == 0) 
P_X = (Xcomp - X_C)*(LACE_C/X_C)
P_X[k] = 0

# 데이터 저장
 write.table(P_F,"PF_EN_annual_1991to2020.dat")
 write.table(P_MI,"PMI_EN_annual_1991to2020.dat")
 write.table(P_MD,"PMD_EN_annual_1991to2020.dat")
 write.table(P_X,"PX_EN_annual_1991to2020.dat")


# LACE Potential LN ----------------------------------------------------------
rm(list = ls())
Year = 1991:2020

load("compLACE.RData")
load("compF.RData")
load("compMI.RData")
load("compMD.RData")
load("compX.RData")

LACE_C =rowMeans(read.table('LACE_1991to2020_12m.dat' ,header = T    ))
F_C =rowMeans(read.table('F_1991to2020_12m.dat',header = T  ))
MI_C =rowMeans(read.table('MI_1991to2020_12m.dat' ,header = T   ))
MD_C = rowMeans(read.table('MD_1991to2020_12m.dat' ,header = T   ))
X_C =rowMeans(read.table( 'X_1991to2020_12m.dat',header = T  ))
Fcomp = rowMeans(compF$LN)
MIcomp = rowMeans(compMI$LN)
MDcomp = rowMeans(compMD$LN)
Xcomp = rowMeans(compX$LN)

#P_F
k = which(F_C == 0) 
P_F = (Fcomp - F_C)*(LACE_C/F_C)
P_F[k] = 0

#P_MI
k = which(MI_C == 0) 
P_MI = (MIcomp - MI_C)*(LACE_C/MI_C)
P_MI[k] = 0 

#P_MD
k = which(MD_C == 0) 
P_MD = (MDcomp - MD_C)*(LACE_C/MD_C)
P_MD[k] = 0

#P_X
k = which(X_C == 0) 
P_X = (Xcomp - X_C)*(LACE_C/X_C)
P_X[k] = 0

# 데이터 저장
 write.table(P_F,"PF_LN_annual_1991to2020.dat")
 write.table(P_MI,"PMI_LN_annual_1991to2020.dat")
 write.table(P_MD,"PMD_LN_annual_1991to2020.dat")
 write.table(P_X,"PX_LN_annual_1991to2020.dat")


#pdf('Fig5.pdf', width= 10, height=16)
#layout(cbind(1:4,5:8))
par(mar=c(7,9,5,2))

# Plot
##################################
library(maps)
library(akima)
library(RColorBrewer)
library(fields)
library(sp)


EN.P_F  =  rowMeans(read.table("PF_EN_annual_1991to2020.dat"  , header = T))
EN.P_MI =  rowMeans(read.table("PMI_EN_annual_1991to2020.dat"    , header = T))
EN.P_MD =  rowMeans(read.table("PMD_EN_annual_1991to2020.dat"   , header = T))
EN.P_X  =  rowMeans(read.table("PX_EN_annual_1991to2020.dat",header = T))
LN.P_F  =  rowMeans(read.table("PF_LN_annual_1991to2020.dat"  , header = T))
LN.P_MI =  rowMeans(read.table("PMI_LN_annual_1991to2020.dat"    , header = T))
LN.P_MD =  rowMeans(read.table("PMD_LN_annual_1991to2020.dat"  , header = T))
LN.P_X  =  rowMeans(read.table("PX_LN_annual_1991to2020.dat" , header = T))

# regional data
Lon=seq(-180,180,2.5)  ;  LonSet = rep(Lon,73)                  #lon
Lat=seq(-90,90,2.5)    ;  LatSet = rev(rep(Lat, each = 145))    #lat

for (i in 1:8)
{if(i==1) {Var = EN.P_F  ; title = expression(P[F])  ; subtitle = 'Years of El Niño trend'; plt_text = 'a'}
  if(i==2) {Var = EN.P_MI ; title = expression(P[MI]) ; subtitle = 'Years of El Niño trend'; plt_text = 'b'}
  if(i==3) {Var = EN.P_MD ; title = expression(P[MD]) ; subtitle = 'Years of El Niño trend'; plt_text = 'c'}
  if(i==4) {Var = EN.P_X  ; title = expression(P[X])  ; subtitle = 'Years of El Niño trend'; plt_text = 'd'}
  if(i==5) {Var = LN.P_F  ; title = expression(P[F])  ; subtitle = 'Years of La Niña trend'; plt_text = 'e'}
  if(i==6) {Var = LN.P_MI ; title = expression(P[MI]) ; subtitle = 'Years of La Niña trend'; plt_text = 'f'}
  if(i==7) {Var = LN.P_MD ; title = expression(P[MD]) ; subtitle = 'Years of La Niña trend'; plt_text = 'g'}
  if(i==8) {Var = LN.P_X  ; title = expression(P[X])  ; subtitle = 'Years of La Niña trend'; plt_text = 'h'}
  
  A1= LonSet
  A2= LatSet
  A3= Var ; A3=matrix(A3,nrow=144) ; A3=rbind(A3,A3[1,]) ; A3=A3/(10^4)
  
  colist_negative=colorRampPalette(brewer.pal(9,'BuPu'))(10) # extract 10 from Blue-Purple
  colist_positive=colorRampPalette(brewer.pal(9,'YlOrRd'))(10) # extract 10 from Yellow-Orange-Red
  colist=c(rev(colist_negative),'white',colist_positive)  # comprise 21 color set
  brk=c(-100,seq(-10,-1,length=10),seq(1,10,length=10),100)
  levs1=c(-1,1)
  levs2=c(rev(-seq(1,100,9)),seq(1,100,9))
  
  interp=interp(A1,A2,A3,xo=seq(min(A1),max(A1),length=145*6),yo=seq(min(A2),max(A2),length=73*6),duplicate='mean')
  image(interp, axes=F, xlab='', ylab='', main='', col=colist, breaks=brk, xlim=c(100,180),ylim=c(-10,50))
  contour(interp, levels=levs1, labels = round(levs1,1), col='#666699',labcex=0.9, lwd=1, add = TRUE)
  contour(interp, levels=levs2, labels = round(levs2,1), col='white',labcex=0.9, lwd=1, add = TRUE)  
  
  map('world',interior=F,col=grey(0.7),lwd=1,add=T)
  axis(1,at=seq(100,180,20), labels=expression
       (100~degree~E,120~degree~E,140~degree~E,160~degree~E,180~degree),cex.axis=1.8) 
  axis(2,at=seq(0,50,10), labels=expression
       (0~degree,10~degree~N,20~degree~N,30~degree~N,40~degree~N,50~degree~N),cex.axis=1.8,las=1)
  axis(3,at=seq(100,180,20), labels=rep('',5)) 
  axis(4,at=seq(0,50,10), labels=rep('',6))
  
  text(123, 46, subtitle ,col = 1,cex = 1.5)
  text(170, 46, expression(paste(10^{4},' ',m^{2},s^{-2},sep='')),col = 1,cex = 1.5)
  mtext('Longitude',at= 140,side=1,line=3.9,cex=1.7)
  mtext('Latitude',side=2,line=6.2,cex=1.7)
  mtext(plt_text, side = 3,line = 2.0, cex = 3, adj = 0 ,at = 86, font=2)
  mtext(title, 
        side = 3, # which margin to place text. 1=bottom, 2=left, 3=top, 4=right
        line = 1.4, # to indicate the line in the margin starting with 0 and moving out
        cex = 1.9, adj = 0 ,at = 100,font=1) 
  map.scale(150,-1,cex = 0.8,ratio = T,relwidth = 0.2)
  compassRose(173,35,cex = 0.4)
  box()
  
}

#------------
#dev.off() 

Fig. 5. Geographical distribution of LACE potentials. LACE potentials of (a) the number of TCs (\(\rm{P_F}\)), (b) mean intensity (\(\rm{P_{MI}}\)), (c) mean duration (\(\rm{P_{MD}}\)), and (d) mean exposure (\(\rm{P_X}\)) in the years of El Niño trend. The right panels are the same as the left panels but for the years of La Niña trend.

END