gpt4 book ai didi

r - 获取点阵条形图函数中分组条的中点值

转载 作者:行者123 更新时间:2023-12-04 11:56:47 26 4
gpt4 key购买 nike

我想弄清楚如何确定分组条的中点值,即每个条中心的实际 X 位置。这在基础 R barplot 中很容易完成。函数,但是我希望能够在 中完成它格子barchart .我的目标是在相应栏的顶部显示文本列的值。

只要不使用子组,下面的代码允许我将文本放在条形图的顶部。我曾尝试在 Internet 上搜索解决方案,但似乎没有任何效果。从图中可以看出,中点仅针对整个组的中心确定。

谢谢!

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

}
)

enter image description here

最佳答案

一种快速而肮脏的方法是更改​​ 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, )
}
)

哪个应该给你

Modified barchart

因此,多头和空头是根据情节的方向和组成确定 x 位置。在垂直、非堆叠、分组条的情况下,x 位置在 body(myPanelBarchart)[[10]][[4]][[2]][[4]][[4]][[9]] 中确定.

关于r - 获取点阵条形图函数中分组条的中点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10475790/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com