我试图找出如何确定分组条的中点值,即各条中心的实际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]]