2010-07-10 73 views
10

我想爲它的每個部分顯示100%欄的值。不幸的是我不知道該怎麼做。由於圖例的位置,圖形應該位於格子中(我使用ggplot2進行了嘗試,但無法在一行中顯示圖例)。我對任何建議或想法感到高興。在堆疊的格子條形圖中顯示值

library(lattice) 
data(postdoc, package = "latticeExtra") 
colnames(postdoc) <- c("Legendtext 1", "2", "3", "4", "5") 
colorset <- simpleTheme(col = 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)), 
           border = "white") 
pl <- barchart(prop.table(postdoc, margin = 1), 
       par.settings = colorset, 
       auto.key = list(columns = 5, space = "bottom", 
           cex = 0.8, size = 1.4, between = 0.2, 
           between.columns = 0.1, adj = 1)) 

回答

18

這是使用自定義面板功能實現:

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") 

pl <- barchart(prop.table(postdoc, margin=1), 
       par.settings=colorset, 
       panel=function(...) { 
       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("%.02f", df$x), 
          cex=0.7) 
       }, 
       auto.key=list(columns=5, space="bottom", 
          cex=0.8, size=1.4, adj=1, 
          between=0.2, between.colums=0.1)) 

lattice plot http://img819.imageshack.us/img819/894/panelbarchart.png

+0

非常感謝您!這對我來說是一個很大的幫助! – SebastianW 2010-07-12 18:39:51

相關問題