如何在 ggplot2 中为分组线定义线绘制顺序?

Ian*_*ker 5 r ggplot2

我有一个类似于以下内容的数据框:

set.seed(1)
df = data.frame(group = sort(rep(1:15,5)), x = rep(1:5,15), 
y = c(runif(25,-1,1), runif(25, -.5,.5),runif(25,-1,1)),
flag = c(rep('false', 25), rep('true',25),rep('false', 25)))
Run Code Online (Sandbox Code Playgroud)

其中 x 和 y 是绘图坐标,group 是不同线的标识符,flag 是一个布尔值,指示线组的特殊子集。我想使用 ggplot 来绘制这些线,以便线flag = 'true'出现在顶部。然而,绘制顺序似乎仅由组名决定。在我的示例 df 中,由于 的值对应flag = 'true'于组 6-10,因此它们绘制在组 1-5 上方但在组 11-15 下方。即使我尝试order按以下方式使用美学,也会发生这种情况:

ggplot(data = df, aes(x = x, y = y, colour = flag,
group = group, order = flag)) + geom_line(size = 3)
Run Code Online (Sandbox Code Playgroud)

如果我重命名组标签(例如,如果示例是组 11-15 而不是 6-10),我可以获得我想要的绘图顺序,flag = true但我认为有更好的方法来做到这一点。有什么方法可以覆盖按组名称排序吗?

jaz*_*rro 6

一种方法是在绘制线条时对数据进行子集化。您要先为假组画线,然后为真组画线。

ggplot(data = df, aes(x = x, y = y, colour = flag,
       group = group)) +
geom_line(data = subset(df, flag == "false"), size = 3) +
geom_line(data = subset(df, flag == "true"), size = 3)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述