为 geom_text 图层添加图例以解释标签

Add a legend for a geom_text layer to explain labels

考虑以下示例,其中进行了散点,并且只有“重要”点被着色和标记。

genes <- read.table("https://gist.githubusercontent.com/stephenturner/806e31fce55a8b7175af/raw/1a507c4c3f9f1baaa3a69187223ff3d3050628d4/results.txt", header = TRUE)
genes$Significant <- ifelse(genes$padj < 0.05, "FDR < 0.05", "Not Sig")
ggplot(genes, aes(x = log2FoldChange, y = -log10(pvalue))) +
  geom_point(aes(color = Significant)) +
  scale_color_manual(values = c("red", "grey")) +
  theme_bw(base_size = 12) + theme(legend.position = "bottom") +
  geom_text_repel(
    data = subset(genes, padj < 0.05),
    aes(label = Gene),
    size = 5,
    box.padding = unit(0.35, "lines"),
    point.padding = unit(0.3, "lines")
  )

它产生了下面的情节

现在假设标签实际上是首字母缩略词,并且它们具有真实的全名(例如,“DOK6”是“Duo Ocarino Kayne 6”的首字母缩写词)。是否可以为图添加图例,其中键是图上使用的标签,条目是标签的全长名称?

首先,我为另一个只显示重要 Gene 的图例添加了 Gene2。\

接下来,Gene2 作为 fill 添加到 aes。 (只有 color 会影响 geom_point 上点的颜色)。\

最后,为第二个图例添加了scale_fill_discrete。您需要做的只是在 Full names here.

处注释 full-length 名称列
genes$Gene2 <-ifelse(genes$padj<0.05, genes$Gene, NA)
ggplot(genes, aes(x = log2FoldChange, y = -log10(pvalue),
                  fill=Gene2)) +
  geom_point(aes(color = Significant)) +
  scale_color_manual(values = c("red", "grey")) +
  theme_bw(base_size = 12) + theme(legend.position = "bottom") +
  geom_text_repel(
    data = subset(genes, padj < 0.05),
    aes(label = Gene),
    size = 5,
    box.padding = unit(0.35, "lines"),
    point.padding = unit(0.3, "lines")
  ) +
  scale_fill_discrete(labels=paste0(genes$Gene,': ',' Full names here'),
                      name='Significant genes') +
  theme(legend.position = 'right')

输出