2010-07-12 30 views
1

J'ai deux questions concernant la personnalisation d'un barchart en treillis. J'ai essayé d'ajouter des étiquettes à l'histogramme respectivement modifier l'échelle, mais mon code ne fonctionne pas. Qu'est-ce que je fais mal? Il devrait y avoir des valeurs incluant "%".Ajouter des lignes et des étiquettes dans le barchart en treillis [R]

La deuxième question est de savoir comment les lignes peuvent être tracées entre le haut et le bas de la zone de traçage derrière les barres et situées aux valeurs d'échelle imprimées. Merci pour vos suggestions et votre aide, Sebastian.

Voici le code:

library(lattice) 
library(plyr) 
data(postdoc, package="latticeExtra") 
colnames(postdoc) <- c("Legendtext 1", "2", "3", "4", "5") 
colors <- c(rgb(166,27,30,maxColorValue = 255),        
     rgb(192,80,77,maxColorValue = 255), 
     rgb(24,65,83,maxColorValue = 255), 
     rgb(60,143,167,maxColorValue = 255), 
     rgb(130,184,208,maxColorValue = 255)) 
colorset <- simpleTheme(col=colors,           
        border="white") 
data.p <- prop.table(postdoc, margin=1) 
data <- data.p * 100 
pl <- barchart(data, 
      par.settings = colorset,          
      box.ratio = 1,             
      xlab = " ",             
      panel = function(...) { # Code for panel function by rcs (http://stackoverflow.com/questions/3220702/display-values-in-stacked-lattice-barchart-r) - thank you very much! 
      panel.barchart(...) 
      tmp <- list(...) 
      tmp <- data.frame(x=tmp$x, y=tmp$y) 
      # calculate positions of text labels       
      df <- ddply(tmp, .(y), 
         function(x) { 
          data.frame(x, pos=cumsum(x$x)-x$x/2) 
         }) 
      panel.text(x=df$pos, y=df$y,         
         label=sprintf("%.0f", df$x),      
         cex=0.7, col="white") 
      panel.axis(side = c("bottom"), 
         at = list(0, 20, 50, 75, 100), 
         labels = list("0%", "25%", "50%", "75%", "100%"), 
         ticks = TRUE)  
      }, 
      auto.key=list(columns=5, space="bottom",       
         cex=0.8, size=1.4, adj=1, 
         between=0.2, between.colums=0.1, 
         size = 1.3, points = FALSE, rectangles = TRUE)) 

Répondre

3

Question 1: Les œuvres suivantes pour moi (half=FALSE)

panel.axis(side=c("bottom"), 
      at=c(0, 25, 50, 75, 100), 
      labels=c("0%", "25%", "50%", "75%", "100%"), 
      rot=0, half=FALSE, ticks=TRUE) 

Question 2: Ajouter un appel à panel.grid (ou panel.abline) avant panel.barchart() dans votre fonction du panneau:

panel.grid(h=FALSE, v=-1) 
+0

Merci beaucoup !! J'ai utilisé panel.abline car il inclut plus de possibilités pour éditer les paramètres graphiques. Au lieu de panel.axis, il était finalement préférable pour moi d'utiliser l'argument des échelles, car les étiquettes devraient être en dehors de la zone de traçage et j'ai eu quelques problèmes avec le clip et la viewport. Votre aide était très importante pour moi pour finir le graphique et pour en savoir plus sur le treillis. Merci beaucoup encore! – SebastianW