ggplot2:将一行放到前面,但保存颜色

Ali*_*Ali 12 r layer ggplot2

请考虑以下代码:

library(ggplot2)
foo <- data.frame(x=1:10,A=1:10,B=10:1)
ggplot(melt(foo,id.vars="x"),aes(x,value,color=variable))+geom_line(size=5)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我想将红线(A)置于B的顶部(参见交叉点),而颜色和它们在图例中出现的顺序不会改变.有什么办法吗?

bap*_*ste 19

试试这个,

last_plot() + aes(group=rev(variable))
Run Code Online (Sandbox Code Playgroud)


CMi*_*ael 5

使用子集化数据帧重新绘制红线就可以了.

library(ggplot2)
foo <- data.frame(x=1:10,A=1:10,B=10:1)
require(reshape2)
fooM <- melt(foo,id.vars="x")
p<-ggplot()
p<-p+geom_line(data=fooM[fooM$variable!="A",],aes(x,value,color=variable),size=5)
p<-p+geom_line(data=fooM[fooM$variable=="A",],aes(x,value,color=variable),size=5)
p
Run Code Online (Sandbox Code Playgroud)

编辑:请注意,ggplot按顺序将图层应用于彼此之上 - 在逐行构造图表时,可以最好地利用这些图层.

编辑2:@tonytonov是对的,人们可能想避免两次绘制相同的东西.修改了我的答案来绘制除A之外的所有内容,第一次,然后只有A.结果保持不变,现在也兼容透明度或大数据;)