добавить метки к решетчатой ​​диаграмме - PullRequest
8 голосов
/ 27 января 2010

Я хотел бы разместить значение для каждого столбца в виде столбца (решетки) в верхней части каждого столбца. Тем не менее, я не могу найти какой-либо вариант, с помощью которого я могу достичь этого. Я могу найти только варианты для оси.

Ответы [ 4 ]

19 голосов
/ 27 января 2010

Создание пользовательской функции панели, например,

library("lattice")
p <- barchart((1:10)^2~1:10, horiz=FALSE, ylim=c(0,120),
              panel=function(...) { 
                args <- list(...)
                panel.text(args$x, args$y, args$y, pos=3, offset=1)
                panel.barchart(...)
              })
print(p)

lattice barchart with labels

0 голосов
/ 09 июня 2012

Так как я должен был сделать это в любом случае, вот достаточно приблизительный пример, чтобы понять пример кода в соответствии с тем, что предлагает @Alex Brown (scores - это своего рода 2D-массив, который превратится в сгруппированный вектор):

barchart(scores, horizontal=FALSE, stack=FALSE, 
     xlab='Sample', ylab='Mean Score (max of 9)',
     auto.key=list(rectangles=TRUE, points=FALSE),
     panel=function(x, y, box.ratio, groups, errbars, ...) {
         # We need to specify groups because it's not actually the 4th 
         # parameter
         panel.barchart(x, y, box.ratio, groups=groups, ...)
         x <- as.numeric(x)
         nvals <- nlevels(groups)
         groups <- as.numeric(groups)
         box.width <- box.ratio / (1 + box.ratio)
         for(i in unique(x)) {
             ok <- x == i
             width <- box.width / nvals
             locs <- i + width * (groups[ok] - (nvals + 1)/2)
             panel.arrows(locs, y[ok] + 0.5, scores.ses[,i], ...)
         }
     } )

Я не проверял это, но важные биты (части, определяющие местоположение и т. Д. В функции панели) работают. Это сложная часть, чтобы понять. В моем случае я фактически использовал panel.arrows для создания панелей ошибок (ужас!). Но Scores.ses должен быть массивом того же измерения, что и Score.

Попробую почистить это позже - но если кто-то захочет, я рад за это!

0 голосов
/ 29 января 2010

Если вы используете параметр groups, вы найдете метки в коде @ rcs, расположенные друг над другом. Это можно исправить, расширив panel.text, чтобы он работал как panel.barchart, что достаточно просто, если вы знаете R.

Я не могу опубликовать здесь код исправления по причинам лицензирования, извините.

0 голосов
/ 27 января 2010

Я бы предложил использовать новый пакет directlabels , который можно использовать как с решеткой, так и с ggplot (и облегчает жизнь для этих проблем с маркировкой), но, к сожалению, он не работает с диаграммами.

...