[R-br] Problema com barplot múltiplo

Walmes Zeviani walmeszeviani em gmail.com
Domingo Abril 15 14:59:00 BRT 2012


Alexandre,

Eu não espero que exista uma opção na função para tratar essa situação.
Porém, a composição geométrica do gráfico de barras é simples, é uma série
de retângulos justapostos e agrupados onde a altura do retângulo representa
a grandeza. Dessa forma podemos começar numa janela em branco e adicionar
as barras usando rect(). Veja o CMR baseado no que você passou

# dput() nos dados ficou menor que o código para obtê-los, C[Mínimo]R
#dput(TAB)
TAB <- structure(c(25.2, 27.6, 22, 9, NaN, 8.2, 46.8, 46.8, 46.6), .Dim =
c(3L,
3L), .Dimnames = list(c("1", "2", "3"), c("a", "b", "cc")))
#dput(TAB2)
TAB2 <- structure(c(1.65529453572468, 2.11187120819429, 2,
1.04880884817015,
NA, 0.66332495807108, 4.36348484585429, 4.38634243989226, 3.2649655434629
), .Dim = c(3L, 3L), .Dimnames = list(c("1", "2", "3"), c("a2",
"b2", "c2")))

nbars <- 8; ngroups <- 3; barwidth <- 1; between <- 1; margin <- 0.5
col <- c("seagreen","forestgreen","limegreen")
ylim <- c(0, 1.1*max(TAB+TAB2, na.rm=TRUE))
xlim <- c(0, nbars*barwidth+2*margin+ngroups*between)
plot(x=NULL, ylim=ylim, xlim=xlim, xaxt="n", xlab=NA, ylab="frequência")
abline(v=0:15, h=10*(0:6), col="grey50", lty=3)
xc <- c((1:3),
        (4:5)+between,
        (6:8)+2*between)
yc <- na.omit(c(TAB))
rect(xc, 0, xc+1, yc, col=col[c(1,2,3,1,3,1,2,3)])
mtext(side=1, at=c(2.5,6,9.5), text=c("April", "May", "June"), line=1)
zc <- na.omit(c(TAB2))
arrows(xc+0.5, yc-zc, xc+0.5, yc+zc, code=3, angle=90, length=0.05)

Com um pouco de esforço é possível implementar uma mybarplot() que
considere dados com NA.

À disposição.
Walmes.

==========================================================================
Walmes Marques Zeviani
LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W)
Departamento de Estatística - Universidade Federal do Paraná
fone: (+55) 41 3361 3573
VoIP: (3361 3600) 1053 1173
e-mail: walmes em ufpr.br
twitter: @walmeszeviani
homepage: http://www.leg.ufpr.br/~walmes
linux user number: 531218
==========================================================================


2012/4/14 ASANTOS <alexandresantosbr em yahoo.com.br>

> Boa noite pessoal,
>
>    Tenho 3 tratamentos hipotéticos avaliados em 3 tempos diferentes, porém
> no tempo dois não foi avaliado o tratamento 2. Para fazer a representação
> deles em um barplot múltiplo, vai ficar faltando uma barra, portanto vai
> ficar um espaço em branco entre o tratamento 1 e o tratamento 3 e gostaria
> de remover esse espaço (por motivo de uma força maior chamada reviewer do
> periódico) e deixar lado a lado as barras dos tratamentos 1 e 3 no tempo 2.
> Meu CMR seria:
>
> require(gplots)
>
> #tratmentos no tempo1
> trat1<-rep(1:3,5)
> resp1<-rpois(15,25)
> med1<-tapply(resp1, trat1,mean)##Media dos tratamentos
> ep1<-tapply(resp1,trat1,sd)/**sqrt(tapply(resp1,trat1,**length))###Erros
> padrao da media
>
> #tratmentos no tempo2
> trat2<-c(1,1,1,1,1,2,2,2,2,2,**3,3,3,3,3)
> resp2<-c(7,7,11,12,8,NA,NA,NA,**NA,NA,8,8,10,9,6)##Não foi avaliado o
> tratamento 2
> med2<-tapply(resp2, trat2,mean, na.rm = TRUE)##Media dos tratamentos
> ep2<-tapply(resp2,trat2,sd, na.rm = TRUE)/sqrt(tapply(resp2,trat2,**length))###Erros
> padrao da media
>
> #tratmentos no tempo3
> trat3<-rep(1:3,5)
> resp3<-rpois(15,45)
> med3<-tapply(resp3, trat3,mean)##Media dos tratamentos
> ep3<-tapply(resp3,trat3,sd)/**sqrt(tapply(resp3,trat3,**length))###Erros
> padrao da media
> ###
>
> # Montando as tabelas para cada mêss:
> a<- med1
> b<- med2
> cc<-med3
> a2<-ep1
> b2<-ep2
> c2<-ep3
> # Unindo as tabelas
> TAB <- cbind(a,b,cc)
> TAB2<-cbind(a2,b2,c2)
> # Criando o barplot múltiplo
> mp <- barplot2(TAB, beside = TRUE, axisnames = FALSE, plot.ci=T,
> ci.u=TAB+TAB2,ci.l=TAB-TAB2, ylab="Number of insects", legend.text=T,
> ylim=c(0, 60),col =c("grey25","grey50","white"))
> # Adicionando os meses
> mtext(1, at = colMeans(mp), text = rep(c("April", "May", "June"), 7),line
> = 1, cex = 0.8)
> #
>
>
> Então eu pergunto se é possível fazer isso, pois a função barplot2() não
> me permite alterar isso uma vez que tenho no tempo 2 o tratamento 2
> representado por NA, por outro lado se retiro o tratamento 2 na hora de
> unir as tabelas não posso fazer um cbind(), pois tenho vetores de média e
> erro padrão com comprimentos diferentes.
>
> Se algum puder me dar uma luz agradeço,
>
>
> --
> Alexandre dos Santos
> Engenheiro Florestal, Dr.
> Universidade Federal de Lavras
> Departamento de Entomologia
> Laboratório de Entomologia Florestal
> Caixa Postal 3037
> 37200-000 - Lavras/MG
> Fone: +55 (35) 9223-0304
>
> ______________________________**_________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/**cgi-bin/mailman/listinfo/r-br<https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br>
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-**guia<http://www.leg.ufpr.br/r-br-guia>)
> e forneça código mínimo reproduzível.
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20120415/28aa529f/attachment.html>


Mais detalhes sobre a lista de discussão R-br