堆叠条形图中的position_stack和百分比标签的倒置

时间:2018-10-12 22:00:37

标签: r ggplot2

我在堆叠条形图中的position_stack函数有问题。 从下图中可以看到,在某些情况下,百分比值标签上存在反转。

enter image description here

这是我的数据:

id  val          time   var     label
1   19.00499584   EX    diet1   19.00
2   -24.35452794  EX    diet1   -24.35
3   -18.58325667  EX    diet1   -18.58
4   -15.50364964  EX    diet1   -15.50
5   27.60230706   EX    diet1   27.60
6   1.150442478   EX    diet1   1.15
7   -5.930055753  EX    diet1   -5.93
1   -1.403798514  EX+D  diet1   -1.40
2   12.21098266   EX+D  diet1   12.21
3   36.79131484   EX+D  diet1   36.79
4   10.17820425   EX+D  diet1   10.18
5   -10.62221361  EX+D  diet1   -10.62
6   8.333333333   EX+D  diet1   8.33
7   1.658653846   EX+D  diet1   1.66
1   4.391357808   EX    diet2   4.39
2   12.01472557   EX    diet2   12.01
3   -2.628676471  EX    diet2   -2.63
4   8.408871745   EX    diet2   8.41
5   9.160170092   EX    diet2   9.16
6   7.447067413   EX    diet2   7.45
7   1.706231454   EX    diet2   1.71
1   5.962616822   EX+D  diet2   5.96
2   54.31421446   EX+D  diet2   54.31
3   -21.25925926  EX+D  diet2   -21.26
4   20.72234763   EX+D  diet2   20.72
5   9.864004132   EX+D  diet2   9.86
6   12.9842615    EX+D  diet2   12.98
7   22.89185905   EX+D  diet2   22.89

这是我的代码:

bx <- read.csv("C:\\Users\\...f1.csv", sep=";")
bx$time<-factor(bx$time, levels=c("EX", "EX+D"))
bx$id<-factor(bx$id)
bx$var<-factor(bx$var, levels=c("diet1", "diet2"))


vv<-ggplot(bx, aes(id, val)) + geom_bar(stat = "identity", aes(fill = time)) + geom_hline(yintercept=0)+ facet_grid(var~.)+ coord_flip()+geom_text(aes(label = label), position = position_stack(vjust = 0.5),size = 4, color="black")

vv+ scale_fill_grey(start=0.8, end=0.5)+labs(x="Obs", y="Percentage difference", fill="Time") + theme_bw() + theme( panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.line = element_line(colour = "black"),panel.spacing = unit(0, "lines"),  
     strip.text.x = element_text(size=12, angle=45), 
     strip.background = element_rect(fill="white"))

我该如何解决?

谢谢!

1 个答案:

答案 0 :(得分:1)

您似乎在3个地方定义了aes:在ggplot()geom_bar()的初始geom_text()中。

相反,请在aes中进行一个ggplot()定义,即让geom_bargeom_text继承您在aes中定义的ggplot()

例如,您在哪里:

vv<-ggplot(bx, aes(id, val)) + 
  geom_bar(stat = "identity", aes(fill = time)) + 
  geom_hline(yintercept=0)+ facet_grid(var~.)+
  coord_flip() +
  geom_text(aes(label = label), 
            position = position_stack(vjust = 0.5),
            size = 4, color="black")

相反,将其更改为:

vv<-ggplot(bx, aes(id, val, fill=time, label =label)) + 
  geom_bar(stat = "identity") + 
  geom_hline(yintercept=0)+ facet_grid(var~.)+ 
  coord_flip() + 
  geom_text(position = position_stack(vjust = 0.5),
            size = 4, color="black")

这将导致您希望为标签定位: enter image description here

我将根据您的输出格式/用途来调整标签文本的大小。