【问题标题】:How do I put ggplot annotations onto my figure legend?如何将 ggplot 注释放在我的图例上?
【发布时间】:2018-05-04 22:55:23
【问题描述】:

我正在尝试将我的 ggplot 注释放入图形图例中。目前,我的身材是这样的:

我添加的水平线代表每个浓度的平均值。如何将此添加到图例中,以便每种颜色都有一条水平线?

这是我的代码:

 ggplot(all,aes(x=Concentration, y=Distance, colour=Genotype))+
 geom_jitter(width=0.3, height=0, show.legend=TRUE)+
 theme(panel.background = element_rect(fill = "white")) +
 theme(axis.line.x = element_line(color = "black"),
    axis.line.y = element_line(color = "black"))+
 scale_y_continuous(breaks=seq(0, 8, 1))+
 xlab("Caffeine concentration (mM)")+
 ylab("Distance travelled (arbitrary units)")+
 annotate("segment", x=0.8,xend = 1.2, y= 2.86, yend = 2.86, 
 colour="black")+
 annotate("segment", x=1.8,xend = 2.2, y= 1.86, yend = 1.86, colour="black")+
  annotate("segment", x=2.8,xend = 3.2, y= 1.11, yend = 1.11, colour="black")+
  annotate("segment", x=0.8,xend = 1.2, y= 2.41, yend = 2.41, colour="green3")+
  annotate("segment", x=1.8,xend = 2.2, y= 2.16, yend = 2.16, colour="green3")+
  annotate("segment", x=2.8,xend = 3.2, y= 2.24, yend = 2.24, colour="green3")+
  scale_colour_manual(values = c("Q24" = "black", "Q35" = "green3"))

样本数据:

Concentration   Distance    Genotype
0   1   Q24
0   4   Q24
5   1   Q24
5   0   Q24
10  0   Q24
10  1   Q24
0   1   Q35
0   3   Q35
0   4   Q35
5   0   Q35
5   1   Q35
10  0   Q35
10  2   Q35

【问题讨论】:

    标签: r ggplot2 legend mean


    【解决方案1】:

    你要小心在 ggplot 中过度使用注释。正如here 所提到的,它们“对于添加小注释很有用”。就您而言,您有很多数据要显示,据我所知,在这种情况下添加图例并不容易。

    更简单的方法是在 ggplot 中使用 geom_segment 函数。首先让我们为您的注释行创建一个数据框:

    data <- data.frame(group = c("One", "One", "Two", "Two", "Two"), 
                       start = c(1.8, 2.8, 0.8, 1.8, 2.8), 
                       finish = c(2.2, 3.2, 1.2, 2.2, 3.2), 
                       y = c(1.86, 1.11, 2.41, 2.16, 2.24))
    

    看起来像这样:

    group start finish    y
    One   1.8    2.2 1.86
    One   2.8    3.2 1.11
    Two   0.8    1.2 2.41
    Two   1.8    2.2 2.16
    Two   2.8    3.2 2.24
    

    只是绘制线条:

    ggplot(data) +
      geom_segment(aes(x = start, y = y, xend = finish, yend = y, colour = group))  +
      scale_colour_manual(values = c("black", "green3"))
    

    【讨论】:

      【解决方案2】:

      尝试使用geo_segment()

      all <- read.table(header = TRUE, text = "
                        Concentration   Distance    Genotype
      0   1   Q24
      0   4   Q24
      5   1   Q24
      5   0   Q24
      10  0   Q24
      10  1   Q24
      0   1   Q35
      0   3   Q35
      0   4   Q35
      5   0   Q35
      5   1   Q35
      10  0   Q35
      10  2   Q35
                        ")
      
      
      seg <- data.frame(x = c(0.8, 1.8, 0.8, 1.8), y = c(2.86, 1.86, 2.41, 2.16),
                        xend = c(1.2, 2.2, 1.2, 2.2), yend = c(2.86, 1.86, 2.41, 2.16),
                        color = c("Q24", "Q24", "Q35", "Q35"))
      
      library(ggplot2)
      ggplot(all,aes(x=Concentration, y=Distance, colour=Genotype))+
          geom_jitter(width=0.3, height=0, show.legend=TRUE)+
          theme(panel.background = element_rect(fill = "white")) +
          theme(axis.line.x = element_line(color = "black"),
                axis.line.y = element_line(color = "black"))+
          scale_y_continuous(breaks=seq(0, 8, 1))+
          xlab("Caffeine concentration (mM)")+
          ylab("Distance travelled (arbitrary units)")+
          geom_segment(data = seg, aes(x = x, y = y, xend = xend, yend = yend, color = color)) +
          scale_colour_manual(values = c("Q24" = "black", "Q35" = "green3"))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-21
        • 1970-01-01
        • 1970-01-01
        • 2020-11-21
        • 2013-02-02
        相关资源
        最近更新 更多