[R-br] Fwd: Plotar duas escalas no eixo x
Eder Comunello
comunello.eder em gmail.com
Quarta Abril 8 10:06:30 BRT 2015
Segue uma ideia inicial, que você pode ajustar às suas necessidades.
### <code r>
a <- c(3.4, 4.3)
b <- c(.53, .56)
aRange <- c(0, 6)
bRange <- c(0, .6)
a1 <- t(scale(a-aRange[1], center=F, scale=diff(aRange)))
b1 <- t(scale(b-bRange[1], center=F, scale=diff(bRange)))
plot1 <- barplot(-a1, col=8, bor="light gray", horiz=T, beside=F,
xlim=c(-1,1), axes=F, space=NULL,
names.arg=c("1985-1991","1991-1999"), cex.names=.75,
ylab="Time Interval")
plot2 <- barplot(b1, col=8, bor="light gray", horiz=T, beside=F,
xlim=c(-1,1), axes=F, space=NULL, add=T)
axis(1, cex.axis=.75, seq(-1,0,len=2), rev(aRange))
axis(3, cex.axis=.75, seq(0,1,len=2), bRange)
abline(v=0, lty=1)
abline(v=.54/.6, lwd=1, col="red", lty=2)
text(x=-a1+.1, y=plot1, labels=round(a,2), cex=.6, col=1, xpd=TRUE)
text(x=b1-.1, y=plot2, labels=round(b,2), cex=.6, col=1, xpd=TRUE)
title(xlab="Interval change Area (percent of map)", cex.lab=.75, adj=0)
title(xlab="Anual change Area (percent of map)", cex.lab=.75, adj=1)
### </code>
[image: Imagem inline 1]
Em 7 de abril de 2015 17:28, Rodrigo Muniz <uenf.rodrigo em gmail.com>
escreveu:
> 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")
>
>
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20150408/9dc2bd5e/attachment.html>
-------------- Próxima Parte ----------
Um anexo não-texto foi limpo...
Nome: image.png
Tipo: image/png
Tamanho: 11699 bytes
Descrição: não disponível
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20150408/9dc2bd5e/attachment.png>
Mais detalhes sobre a lista de discussão R-br