2016-11-18 103 views
0

我创建了一个堆叠条形图并使用两个变量分面。我无法将这些值置于中间的条形图中,它可能出现在极端或重叠的位置。预期影像如下:使用ggplot2定位堆叠条形图的中心值

link to the image

我已经粘贴下面的脚本。任何帮助,将不胜感激。

library(dplyr) 

library(reshape2) 

library(ggplot2) 


year<-c("2000","2000","2010","2010","2000","2000","2010","2010") 

area<-c("Rural","Rural","Rural","Rural","Urban","Urban","Urban","Urban") 

sex<-c("Male","Female","Male","Female","Male","Female","Male","Female") 

city<-c(58,61,74,65,51,55,81,54)` 

village<-c(29,30,20,18,42,40,14,29) 

town<-c(13,9,6,17,7,5,5,17) 

data<-cbind.data.frame(year,area,sex,city,village,town) 

dre<-melt(data,id.vars = c("year","area","sex")) 

dre <- arrange(dre,year,area,sex,variable) %>% 
    mutate(pos = cumsum(value) - (0.5 * value)) 


a <- ggplot(dre,aes(factor(sex),value,fill=variable)) + 
    geom_bar(stat='identity',position="stack") 

b <- a + 
    facet_wrap(factor(year)~area) 

c <- b + 
geom_text(aes(label=paste0(value,"%"),y=pos), 
     position="stack",size=2,hjust=0.85,color="black") 

d <- c + 
    coord_flip() + 
    theme_bw() + 
    scale_fill_brewer() 

print(d) 

回答

3

您不再需要计算位置变量。从ggplot2_2.2.0开始,文本可以通过position_stack进行堆叠和居中。

geom_text的相关行代码如下。注意我根本不需要使用“pos”变量来放置文本。

geom_text(aes(label=paste0(value,"%")), 
       position = position_stack(vjust = .5), size = 2, color = "black") 

的情节中的代码和所得到的曲线图:

ggplot(dre, aes(factor(sex), value, fill = variable)) + 
    geom_col() + 
    facet_wrap(factor(year)~area) + 
    geom_text(aes(label = paste0(value,"%")), 
       position = position_stack(vjust = .5), size = 2, color = "black") + 
    coord_flip() + 
    theme_bw() + 
    scale_fill_brewer() 

enter image description here