R ggplot2:图形中的坐标图例,其中geom_线和geom_点组合在一起

R ggplot2:图形中的坐标图例,其中geom_线和geom_点组合在一起,r,ggplot2,R,Ggplot2,以下是示例数据框: dt <- data.frame(x = 1:6, y2017 = 5:10, y2018 = 12:17, y2019 = 15:20) # x y2017 y2018 y2019 # 1 5 12 15 # 2 6 13 16 # 3 7 14 17 # 4 8 15 18 # 5 9 16 19 # 6 10 17 20 结果图为

以下是示例数据框:

dt <- data.frame(x = 1:6, y2017 = 5:10, y2018 = 12:17, y2019 = 15:20)

#  x y2017 y2018 y2019
#  1     5    12    15
#  2     6    13    16
#  3     7    14    17
#  4     8    15    18
#  5     9    16    19
#  6    10    17    20
结果图为:

对于图例
2018
2019
,有一条线穿过这一点,这不是我想要的。因此,我尝试在2017年将
geom\u行中的
color
移出
aes()

结果是:

2017
的图例中,跨越它的线不再存在,而
2018
2019
是正确的

我想知道是否有一种方法可以将
2017
的图例组合在第一张图中,并将
2018
2019
组合在第二张图中。


(我知道我可以使用
pivot_longer()
转换数据集,使绘制图例更容易,但对于我的主数据集,这使绘制图例更难。因此我坚持这种方式)

ggplot不是为数据结构设计的。考虑替代(重塑成长形式)。

或者,使用基本Rgraphics包中的
matplot
,这提供了更多的控制和灵活性

cols <- c('red','blue','green3')
pch <- c(3,4,19)

par(mar=c(4,4,1,6), las=1)
matplot(dt[,'x'], dt[,c('y2017', 'y2018', 'y2019')], type="o", pch=pch, col=cols, 
        xlab="x", ylab="Y", lty=c(1,0,0))

legend("right", xpd=NA, inset=-0.3, legend=2017:2019, lty=c(1,0,0), pch=pch, col=cols, bty='n')
grid(col=rgb(0,0,0,0.1))

colsggplot不是为数据结构设计的。考虑替代(重塑成长形式)。

或者,使用基本Rgraphics包中的
matplot
,这提供了更多的控制和灵活性

cols <- c('red','blue','green3')
pch <- c(3,4,19)

par(mar=c(4,4,1,6), las=1)
matplot(dt[,'x'], dt[,c('y2017', 'y2018', 'y2019')], type="o", pch=pch, col=cols, 
        xlab="x", ylab="Y", lty=c(1,0,0))

legend("right", xpd=NA, inset=-0.3, legend=2017:2019, lty=c(1,0,0), pch=pch, col=cols, bty='n')
grid(col=rgb(0,0,0,0.1))

cols只需将以下代码添加到程序的第一部分:

guides(shape= guide_legend(override.aes=list(colour=c("#D16103","#52854C", "#293352"), lty=c(1,0,0) )))
然后您将获得以下输出:


只需将以下代码添加到程序的第一部分:

guides(shape= guide_legend(override.aes=list(colour=c("#D16103","#52854C", "#293352"), lty=c(1,0,0) )))
然后您将获得以下输出:


谢谢!!这正是我想要的。请您详细说明一下
guide
guide\u legend
在这里做什么?我阅读了文档,但没有完全理解。您只是覆盖了颜色图例(即删除2018年和2019年的
lty=0
行)。当您在
aes
中有多个变量时,这通常用于保留单个图例,例如形状。大部分信息都可以在线获取。谢谢!!这正是我想要的。请您详细说明一下
guide
guide\u legend
在这里做什么?我阅读了文档,但没有完全理解。您只是覆盖了颜色图例(即删除2018年和2019年的
lty=0
行)。当您在
aes
中有多个变量时,这通常用于保留单个图例,例如形状。大部分信息都可以在线获取。