簡體   English   中英

在格子條形圖功能中獲取分組條的中點值

[英]Obtaining midpoint values of grouped bars in lattice barchart function

我試圖弄清楚如何確定分組條的中點值,即每個條的中心的實際X位置。 這很容易在基礎R barplot函數中完成,但是我希望能夠在格子barchart完成它。 我的目標是在相應的欄頂部顯示文本列的值。

只要我不使用子組,下面的代碼允許我將文本放在條形圖的頂部。 我試過在互聯網上搜索解決方案,但似乎沒有任何效果。 從圖中可以看出,中點僅針對整個組的中心確定。

謝謝!

library(lattice)

test= data.frame(
  group=c("WK 1", "WK 1", "WK 1",  "WK 2", "WK 2", "WK 2", "WK 3", "WK 3", "WK 3"),
  subgroup=c(1,2,3,1,2,3,1,2,3)  ,
  percent=c(60,50,80,55,56,65,77,65,86),
  text=c("n=33", "n=37","n=39","n=25","n=27","n=22","n=13","n=16","n=11")
  )

barchart(data=test, 
         percent~group,
         groups=subgroup,

            panel = function(x,y,...){
              panel.barchart(x, y, ...)
              panel.text( x=unique(test$group), 
                          y=test$percent, 
                          label=unique(test$text) 
                          )

            }
         )

在此輸入圖像描述

一種快速而骯臟的方法是更改panel.barchart的主體,其中繪制條形圖包括在適當的位置繪制文本。

創建一個新的面板功能(一般來說這是一個好主意,因為原來的功能仍然存在,以防你需要像我一樣多次重啟)

myPanelBarchart <- panel.barchart

更改面板功能的相應部分(請記住:如果您不再擁有組,如果您水平繪圖,或者如果您進行堆疊,則將不再起作用)。 在這里,我添加了對panel.text的調用,如果myPanelBarchart被傳遞一個名為printVals的參數並且它不是FALSE 此參數將是您要在每個條形圖上方打印的字符向量。 它需要與繪制的條形數量以及與數據對應的順序相同。 我沒有添加任何東西來檢查這是否屬實。

body(myPanelBarchart)[[10]][[4]][[2]][[4]][[4]][[9]]<-substitute(for (i in unique(x)) {
    ok <- x == i
    nok <- sum(ok, na.rm = TRUE)
    panel.rect(x = (i + width * (groups[ok] - (nvals + 1)/2)), 
        y = rep(origin, nok), col = col[groups[ok]], border = border[groups[ok]], 
        lty = lty[groups[ok]], lwd = lwd[groups[ok]], width = rep(width, 
            nok), height = y[ok] - origin, just = c("centre", 
            "bottom"), identifier = identifier)
# This is the added part (adjust parameters as you see fit):
    if(!identical(printVals, FALSE)){
      panel.text(x = (i + width * (groups[ok] - (nvals + 1)/2)), y = y[ok],
        label = printVals[ok], adj = c(0.5, -1), identifier = identifier)
    }        

})

更改新函數的形式參數列表以添加參數printVals並為其指定默認值。

formals(myPanelBarchart) <- c(formals(panel.barchart), printVals = FALSE)

使用新參數使用新面板函數繪制數據

barchart(data=test, 
         percent~group,
         groups=subgroup,

            panel = function(x,y,...){
              myPanelBarchart(x, y, ..., printVals = test$text, )
            }
         )

哪個應該給你

修改后的條形圖

因此,它的長短是x位置是根據你的情節的方向和構成來確定的。 在垂直,非堆疊,分組條形圖的情況下,x位置在body(myPanelBarchart)[[10]][[4]][[2]][[4]][[4]][[9]]確定body(myPanelBarchart)[[10]][[4]][[2]][[4]][[4]][[9]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM