r - 如何在 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()`
现在我想添加一条参考线。我可以像这样添加点:
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"))
现在我如何连接这些点并且仍然将这条线作为单独的图例?如果我使用参考值向原始 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"))
我错过了什么?
解决方案
也许你正在寻找这个。您可以启用linetype
aes 中的选项来为所需的新行创建图例:
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))
输出:
推荐阅读
- python - Pytorch相当于tensorflow keras StringLookup?
- javascript - 使用行为平滑的 window.scrollTo 时避免处理 IntersectionObserver
- audio - 如何在频谱图中找到音符范围?
- laravel - Pusher HTTP 获取 user_count
- python - 使用 If-Else 阶梯查找输入的四个数字中的最大值
- linux - 如何在 GNU 和 BSD make 中包含 bsd.prog.mk?
- node.js - 将数组作为字段 v13 的值会产生错误
- wolfram-mathematica - 如何格式化 Wolfram Mathematica 中分类器使用的数据
- javascript - 为什么即使我实现了componentWillUnmount,我的组件也没有卸载?
- python - 使用 timeseriessplit 函数拆分时间序列数据