堆叠条形图与ggplot2中的数据标签不同

时间:2016-10-25 16:51:26

标签: r ggplot2

我正在尝试将数据标签放在堆叠条形图的中间。我正在遵循这个问题的方法:1`。我无法弄清楚如何以正确的顺序获得数据标签。这些酒吧是堆叠的系列"一个"在顶部和系列"两个"在底部,但数据标签是反向的。

library( plyr )
library( ggplot2 )
library( reshape2 )


year <- 2016:1999               
one <- c(5277,4955,4823,4565,4316,4129,3997,3515,3354,3281,2973,2713,2661,2412,2137,1787,1619,1543)             
two <-c(12865,12591,12011,11786,11429,10944,9773,9860,9325,8824,8508,8167,7289,6657,5866,5274,4819,4247)                


s <- data.frame( year , one , two )

dat <- melt(
    s ,
    id.vars = "year" )

dat <- ddply( 
    dat ,
    .(year), 
    transform, pos = cumsum(value) - (0.5 * value)
    )   

ggplot() + 
geom_bar(
    aes(y = value, x = year, fill = variable), 
    data = dat ,
    stat="identity"
    ) +  
geom_text(
    data= dat , 
    aes( x = year, y = pos, label = value) ,
    size=2.5
    )

enter image description here

1 个答案:

答案 0 :(得分:2)

我使用的是开发版devtools::install_github("hadley/ggplot2")
事实证明,新版本有一种改进的方法可以将数据标签放在堆叠的条形图中。下面的代码适用于新版本。正如评论中所述,问题中的代码确实适用于当前版本的版本。

library( plyr )
library( ggplot2 )
library( reshape2 )


year <- 2016:1999               
one <- c(5277,4955,4823,4565,4316,4129,3997,3515,3354,3281,2973,2713,2661,2412,2137,1787,1619,1543)             
two <-c(12865,12591,12011,11786,11429,10944,9773,9860,9325,8824,8508,8167,7289,6657,5866,5274,4819,4247)                


s <- data.frame( year , one , two )

dat <- melt(
    s ,
    id.vars = "year" )

ggplot(dat, aes(factor(year), y = value , fill = factor(variable))) +
  geom_bar( stat="identity") +
   geom_text(aes(label = value), position = position_stack(vjust = 0.5))