2010-01-27 101 views
7

我想將每個條形圖的值放置在每個條形圖頂部的條形圖(點陣)中。但是,我找不到可以實現這一目標的任何選項。我只能找到該軸的選項。將標籤添加到格子條形圖

回答

19

創建自定義面板功能,例如

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

+1

太棒了! – 2011-04-25 07:43:02

0

我會建議使用新的directlabels package,它可以與格和ggplot一起使用(並且使這些標籤問題的生活非常容易),但不幸的是它不適用於barcharts。

-1

如果您使用的是groups參數,你會發現在標籤@ RCS的代碼在彼此的頂部所有的土地。這可以通過擴展panel.text來工作,如panel.barchart,如果你知道R就足夠簡單了。

我無法在此處發佈修復代碼以獲取授權原因,對不起。

+0

這是什麼意思?你是否正在開發基於格的專有工具(這必須是內部合法的)? (只是好奇。) – 2011-03-22 22:28:26

+0

因爲'panel.text'的補丁版本會派生工作。我總是很樂意發佈自己編寫的代碼示例。此外,我可能會在任何時候與我的僱主簽訂與GPL有關的合同。 – 2011-03-23 01:22:40

0

因爲無論如何我必須這樣做,這裏有一個非常接近的代碼示例,它代表了@Alex Brown所暗示的內容(分數是某種二維數組,它將變成分組的向量):

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來製作錯誤條(恐怖!)。但是分數意味着與分數具有相同的維度。

我會盡力在以後清理 - 但如果別人想要,我很高興!