Gráfico de densidade com destaque dos quantis

July 7, 2012
By

This post was kindly contributed by Ridículas - go there to comment and to read the full post.

Gráficos de densidade com regiões destacando os quartis.

Gráficos de densidade são utilizados para se conhecer a forma da distribuição dos dados. A função lattice::densityplot() faz esse tipo de gráfico. Para aprimorar a visualização dos quartis dos dados, eu implementei uma função (my.densityplot()) para que destaque com regiões coloridas as porções de dados delimitadas pelos quartis. O código abaixo gera a figura no início desse post. Até a próxima ridícula.

#-----------------------------------------------------------------------------
# densityplot() com regiões pintadas delimitadas pelos quantis

require(lattice)

my.densityplot <- function(x, cols="gray90", probs=c(1,3)/4, ...){
  panel.densityplot(x, ...)
  dx <- density(x)
  breaks <- sort(c(range(dx$x), quantile(x, probs=probs)))
  fx <- approxfun(dx$x, dx$y)
  do.polygon <- function(x){
    y <- fx(x)
    return(list(x=c(min(x), x, max(x)), y=c(0, y, 0)))
  }
  seqs <- lapply(1:(length(breaks)-1),
                 function(i){
                   x <- seq(breaks[i], breaks[i+1], l=20)
                   do.polygon(x)
                 })
  for(i in 1:length(seqs)){
    seqs[[i]]$col <- cols[i]
  }
  lapply(seqs, function(i) do.call(panel.polygon, i))
  panel.mathdensity(dmath=dnorm, col="black",
                    args=list(mean=mean(x),sd=sd(x)), lty=3)
}

require(RColorBrewer)
display.brewer.all()

cols <- brewer.pal(3, "BuPu") # Greens, Blues, BuPu, Reds
densityplot(~height|voice.part, data=singer,
            cols=cols, plot.points="rug", panel=my.densityplot)

#png("f036.png", width=500, height=320)
cols <- brewer.pal(4, "Greens") # Greens, Blues, BuPu, Reds
densityplot(~height|voice.part, data=singer, layout=c(4,2),
            strip=strip.custom(bg="gray90"),
            xlab="Altura", ylab="Densidade", col=1,
            cols=cols, probs=1:3/4, plot.points="rug", panel=my.densityplot)
#dev.off()

#-----------------------------------------------------------------------------


Tags: , ,

Comments are closed.