如何将 ggplot 注释放在我的图例上?

Posted

技术标签:

【中文标题】如何将 ggplot 注释放在我的图例上?【英文标题】:How do I put ggplot annotations onto my figure legend? 【发布时间】: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

【问题讨论】:

【参考方案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"))

【讨论】:

以上是关于如何将 ggplot 注释放在我的图例上?的主要内容,如果未能解决你的问题,请参考以下文章

按面板右侧微调ggplot大小和图例位置

ggplot2:从列表和常见图例中在多个页面上绘制图形

在R中用ggplot2区分多个图例的位置

ggplot2 remove legend 删除注释

为了清楚起见,将图例添加到 ggplot

ggplot:geom_text不应出现在图例中[重复]