我正在尝试将数据标签放在堆叠条形图的中间。我正在遵循这个问题的方法: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
)
答案 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))