Отображать значения в уложенном решетчатом планшете

Я хочу отображать значения 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))

Ответ 1

Это достигается с помощью пользовательской функции панели:

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

график решетки http://img819.imageshack.us/img819/894/panelbarchart.png