我如何将值放在格子条形图中,并带有图例

问题描述 投票:2回答:2

更新

如果我从自动关键点行中删除“ points = FALSE”,则图例将显示颜色,但不会显示其具有矩形,而是一个圆/点。

原始问题

我有一个堆叠的条形图,其中包括图例,我想在条形图中添加数字以显示相对值。我似乎既可以(传说和价值观),也不能两者都可以。

使用下面的测试代码,我得到了一个显示堆叠条形图中的值的图表。

dta <- data.frame(x=c(46.0, 14.7, 16.4, 15.8, 7.0), y=c("Back", "Neck", "Extrem", "MuscSkel", "Oth"))
barchart(data=dta, ~x, group=y,
         stack=T,col=sort(brewer.pal(7,"Purples")), xlab="Percent",
         box.width=.5, scales=list(tick.number=10),
         panel=function(x,y,...){
           panel.barchart(x,y,...)
           panel.text(cumsum(x)-dta$x/2,y,labels=dta$x)
         })

如果运行此代码,将得到带有图例的图形。

dta <- data.frame(x=c(46.0, 14.7, 16.4, 15.8, 7.0), y=c("Back", "Neck", "Extrem", "MuscSkel", "Oth"))
barchart(data=dta, ~x, group=y,
         stack=T, xlab="Percent",
         box.width=.5, scales=list(tick.number=10),
         auto.key = list(space="right", cex=.5, border=T, points=F, lines=F, lwd=5, text=c("Back", "Neck", "Extrem", "MuscSkel", "Oth")),
         par.settings=list(superpose.polygon=list(col = rainbow(length(c("Back", "Neck", "Extrem", "MuscSkel", "Oth")))), 
               fill=rainbow(length(c("Back", "Neck", "Extrem", "MuscSkel", "Oth")))))

但是当我组合代码,使其看起来像这样时,结果图不会在图例中显示颜色:

dta <- data.frame(x=c(46.0, 14.7, 16.4, 15.8, 7.0), y=c("Back", "Neck", "Extrem", "MuscSkel", "Oth"))
barchart(data=dta, ~x, group=y,
         stack=T, xlab="Percent",
         box.width=.5, scales=list(tick.number=10),
         auto.key = list(space="right", cex=.5, border=T, points=F, lines=F, lwd=5, text=c("Back", "Neck", "Extrem", "MuscSkel", "Oth")),
         par.settings=list(superpose.polygon=list(col = rainbow(length(c("Back", "Neck", "Extrem", "MuscSkel", "Oth")))), 
                             fill=rainbow(length(c("Back", "Neck", "Extrem", "MuscSkel", "Oth")))),
         panel=function(x,y,...){
           panel.barchart(x,y,...)
           panel.text(cumsum(x)-dta$x/2,y,labels=dta$x)
         })

任何帮助将不胜感激。

r bar-chart legend lattice stacked-chart
2个回答
1
投票

更改代码以将“ rectangles = T”添加到自动关键行起作用。现在,它同时显示条形图中的值和带有颜色的图例。代码如下所示:

dta <- data.frame(x=c(46.0, 14.7, 16.4, 15.8, 7.0), y=c("Back", "Neck", "Extrem", "MuscSkel", "Oth"))
barchart(data=dta, ~x, group=y,
         stack=T, xlab="Percent",
         box.width=.5, scales=list(tick.number=10),
         auto.key = list(space="right", cex=.5, border=T, points=F, rectangles = T, lines=F, lwd=5, text=c("Back", "Neck", "Extrem", "MuscSkel", "Oth")),
         par.settings=list(superpose.polygon=list(col = rainbow(length(c("Back", "Neck", "Extrem", "MuscSkel", "Oth")))), 
                             fill=rainbow(length(c("Back", "Neck", "Extrem", "MuscSkel", "Oth")))),
         panel=function(x,y,...){
           panel.barchart(x,y,...)
           panel.text(cumsum(x)-dta$x/2,y,labels=dta$x)
         })

0
投票

[仅提及此替代方法(您希望自己解决问题;)),可以使用ggplot2获得相同的图,只需使用dplyr创建新列w

library(ggplot2)
library(dplyr)
dta %>% mutate(w = cumsum(x)) %>% 
  ggplot(., aes(xmin = w-x, xmax = w, ymin = 1, ymax = 3))+
  geom_rect( aes(fill = y))+
  geom_text(aes(label = x, x = w - x/2, y = 2))+
  ylim(0,4)+
  xlab("Percent")+
  ylab("")+
  theme(axis.text.y = element_blank(),
        axis.ticks.y = element_blank())

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.