Olá Eder, tentei uma estratégia semelhante a sua, um pouco menos elegante, porém a maior dificuldade é que o zero teria de ficar no meio do gráfico e, para direita teria uma escala que varia de 0 a 0.6, para esquerda de 0 a 5. No seu exemplo a origem é na esquerda, desta forma todas as barras partem do mesmo ponto, o que não é desejado.
Segue um exemplo do gráfico que eu gostaria de programar.
Não consegui programar o gráfico como eu gostaria, então como uma solução bastante grosseira e imediata eu "desenhei" o gráfico, como se segue:
Porém continua a dificuldade em faze-lo de uma outra forma.
#******Criando o rótulo do eixo x
eixox=c("5","4","3","2","1","0", "0.1", "0.2","0.3","0.4","0.5","0.6")
#********Criando a sequensia compativel com o rótulo de x
eixoy=seq(1:12)
#*********Criando o dataframe
eixos=data.frame(eixox, eixoy)
#*********Configurando parametros gráficos, o mgp é o parâmetro mais importante, pois define
#********as ditâncias dos ticks em relação ao gráfico
par(mar = c(0.5, 10, 0, 0.3), mgp = c(0.5, -0.25, 0),
bg="gray94", bty="n", cex.axis=0.9, mar = c(4,8, 4, 4), ps=15)
#***********Criando o gráfico de barras em branco com os rótulos de x desejado,
#a escala de x é a relação entre número de rótulos dividido por 10
barplot(with(eixos,(tapply(eixoy,eixox,mean))),axes=FALSE,
names.arg=as.factor(c("5","4","3","2","1","0",
"0.1", "0.2","0.3","0.4","0.5","0.6")), col="white", border="white",
ylab="1985-1991 1991-1999",
xlab="Interval change Area (percent of map) Anual change Area (percent of map)")
#*****Colocando as barras verticais sobre os rótulos de x, a sequência é determinada pelo
#número de rótulos dividido por 10
abline(v=c(0.7,1.9,3.1,4.3,5.5,6.7,7.9,9.1,10.3,11.5,12.7,13.9), lwd=0.9, col="gray70")
#****Criando as barras horizontais
rect(2.5,1, 13.5,4, col="gray", border=FALSE)
rect(1.3,7, 13,10, col="gray", border=FALSE)
#****Criando as linhas verticais
abline(v=6.7, lwd=2)
abline(v=13.1, lwd=1, col="red", lty=2)
#******Criando as setas
arrows(13.2, 10.5,15, 10.5, cex=0.5, col="red", length=0.1)
arrows(13, 10.5,11.6, 10.5, cex=0.5, col="red", length=0.1)
#Definido o local do texto. Obs: os comando devem ser executados um de cada vez.
text(locator(1), "Slow Fast")
text(locator(1), "0.54 = Uniform Intensity")