如何在ggplot2中的水平条形图之外进行注释

时间:2019-02-15 11:10:10

标签: r ggplot2

我一直在寻找一种在水平堆叠条形图旁边但在绘图区域之外添加文本的方法,但是我似乎找不到解决方法。

这是一些示例数据和绘图:

df <- data.frame(x = c('A', 'A', 'B', 'B', 'C', 'C'),
                 y = c(3, 7, 5, 5, 6, 4),
                 z = c(1, 0, 1, 0, 1, 0),
                 a = c(40, 40, 50, 50, 60, 60))

ggplot() +
  geom_bar(data = df, aes(x = x, y = y, fill = z), stat = 'identity') +  
  coord_flip() +
  theme(
    panel.background = element_blank(),
    axis.line.y = element_blank(),
    axis.ticks.y = element_blank(),
    axis.line = element_line(colour = 'black'),
    legend.position = 'none')

enter image description here

我想做的是在水平条右边添加'a'的值。我尝试使用注释进行此操作,但是这会导致轴延伸,并且对于较长的标签,零件最终会被切除。

enter image description here

我还看到coord_cartesian可用于指定轴上的关注范围并停止剪切标签,但是ggplot不允许我将其与coord_flip一起使用。

如何获得所需的标签?

1 个答案:

答案 0 :(得分:1)

这给了我相当公平的结果:

  library(ggplot2)
  df <- data.frame(x = c('A', 'A', 'B', 'B', 'C', 'C'),
                   y = c(3, 7, 5, 5, 6, 4),
                   z = c(1, 0, 1, 0, 1, 0),
                   a = c(40, 40, 50, 50, 60, 60))

  ggplot(data = df, aes(x = x, y = y, fill = as.factor(z))) +
    geom_bar( stat = 'identity') +  
    coord_flip() +
    geom_text(aes( label = sprintf("%.1f",a), y= 10.5),  vjust = 1)+
    #guides(fill=FALSE)+
    theme(
      panel.background = element_blank(),
      axis.line.y = element_blank(),
      axis.ticks.y = element_blank(),
      axis.line = element_line(colour = 'black'),
      legend.position = 'none')+
    scale_y_continuous(breaks = seq(0,10,2))

enter image description here