Eva*_*Eva 2 label r bar-chart lattice
我有一个带有多个面板的格子条形图,我想在条形图的顶部添加每个条形图的总和(例如(70),(20)在左上角的第一个条形图的顶部,第二个条形图的顶部,(150)第三个条形图等) .

这里有一个类似的问题,但我找不到一种方法来调整我的情节代码.与那个例子不同,我想做的是在每个条形垂直条的顶部添加男性和女性的"总和".我也无法使用此处ltext所示单独标记它们.任何建议,使用或任何其他方式,将是非常有帮助的.ltext
civ1<-c("Single","Single","Marr","Marr","Single","Single","Marr","Marr","Single","Single","Marr","Marr","Single","Single","Marr","Marr")
Sex<-rep(c("women","men"),8)
Year<-rep(c(rep(1990,4),rep(2000,4)),2)
Type1<-c(rep("Traditional",8),rep("Dual-earner",8))
Earn1<-c(seq(10, 160, by = 10))
df<-as.data.frame(cbind(civ1,Sex,Year,Type1,Earn1))
df$Earn1<-as.numeric(levels(df$Earn1))[df$Earn1]
my.key<-list(space="bottom",text=list(c("Women","Men"),col=c("black","black")), columns=2,points=T,pch=15,col=c("darkgray","lightgray"),cex=0.8)
labels=c("70","20","150","110")
print(figure1<-barchart(Earn1~civ1|Year+Type1,df,groups=Sex, ylim=c(0,350),horizontal=F,col=c("darkgray","lightgray"),cex=0.8,ylab="Earnings",stack=T,layout=c(2,2),key=my.key,
par.settings = list(strip.background=list(col=c("white","lightyellow")),
panel=function(x,y,subscripts...){
panel.grid(h=-1,v=0)
panel.barchart(...)
ltext(1,200, labels[subscripts]) #not working!
})))
Run Code Online (Sandbox Code Playgroud)
我看到几个问题.首先,您的panel=参数在参数内部par.settings是不正确的.它应该直接传递给它barchart.然后你有一些缺少逗号的语法问题,我不确定你的标签是如何只使用4个值的.无论如何,以下代码应该工作.
barchart(
Earn1~civ1|Year+Type1,df,
groups=Sex,
ylim=c(0,350), cex=0.8, ylab="Earnings",
horizontal=F, stack=T, layout=c(2,2),
col=c("darkgray","lightgray"),
key=my.key,
par.settings = list(strip.background=list(col=c("white","lightyellow"))),
panel=function(x,y,subscripts,...){
panel.grid(h=-1,v=0)
panel.barchart(x,y,subscripts=subscripts,...)
t <- aggregate(y~x, data.frame(x,y), FUN=sum)
panel.text(t$x,t$y, labels=t$y, pos=3)
}
)
Run Code Online (Sandbox Code Playgroud)
除了解决上述问题之外,我还aggregate()用来计算每列的总数,并使用这些值在适当的位置绘制文本标签.结果图如下
