首页 > 解决方案 > 如何在 geom_line 中添加带有单独图例的参考线?

问题描述

我有一个需要用参考线绘制的小数据集。

ex <- tibble(name = rep(c("A","B","C"),each = 3),
             group = rep(c("group1","group2","group3"), 3),
             value = c(1,2,3,1.5,2.5,3,0.5,1.8,4))
ex %>% 
  ggplot(aes(x = group, y = value, color = name, group = name)) +
  geom_line()`

这给了我:
情节 1

现在我想添加一条参考线。我可以像这样添加点:

ex %>% 
  ggplot(aes(x = group, y = value, color = name, group = name)) +
  geom_line() +
  geom_point(aes(x = "group1", y = 3, fill = "ref")) +
  geom_point(aes(x = "group2", y = 3, fill = "ref")) +
  geom_point(aes(x = "group3", y = 3, fill = "ref"))

这给了我:
情节2

现在我如何连接这些点并且仍然将这条线作为单独的图例?如果我使用参考值向原始 tibble 添加更多行,我可以添加该行,但它显示在我的原始图例中,我需要它在一个单独的图例中,如点。


ex <- ex %>% 
  add_row(name = "ref",
          group = "group1",
          value= 3) %>% 
  add_row(name = "ref",
          group = "group2",
          value= 3) %>% 
  add_row(name = "ref",
          group = "group3",
          value= 3)

ex %>% 
  ggplot(aes(x = group, y = value, color = name, group = name)) +
  geom_line() +
  geom_point(aes(x = "group1", y = 3, fill = "ref")) +
  geom_point(aes(x = "group2", y = 3, fill = "ref")) +
  geom_point(aes(x = "group3", y = 3, fill = "ref"))

这给了我这个:
情节 3

我错过了什么?

标签: rggplot2

解决方案


也许你正在寻找这个。您可以启用linetypeaes 中的选项来为所需的新行创建图例:

library(ggplot2)
#Data
ex <- tibble(name = rep(c("A","B","C"),each = 3),
             group = rep(c("group1","group2","group3"), 3),
             value = c(1,2,3,1.5,2.5,3,0.5,1.8,4))
#Create data for ref
ref <- data.frame(group=c("group1","group2","group3"),value=3,name=NA)
#Plot 
ggplot(ex,aes(x = group, y = value, color = name, group = name)) +
  geom_line()+
  geom_line(data=ref,aes(x=group,y=value,group=1,linetype='ref'))+
  geom_point(data=ref,aes(x=group,y=value,group=1),show.legend = F)+
  scale_linetype_manual("ref", values=c(1,1,1,1))

输出:

在此处输入图像描述

如果您想要所有图例和线条中的形状,请尝试以下操作:

#Plot 2
ggplot(ex,aes(x = group, y = value, color = name, group = name)) +
  geom_line()+
  geom_point()+
  geom_line(data=ref,aes(x=group,y=value,group=1,linetype='ref'))+
  geom_point(data=ref,aes(x=group,y=value,group=1),show.legend = T)+
  scale_linetype_manual("ref", values=c(1,1,1,1))

输出:

在此处输入图像描述


推荐阅读