R:ggplot2中geom内点和线的顺序

R:ggplot2中geom内点和线的顺序,r,ggplot2,levels,factors,R,Ggplot2,Levels,Factors,我试图在ggplot中绘制一个数据帧,但在按所需顺序显示点和线时遇到问题 数据是基于同一列(因子0或1)分割的,我希望0对线和点(使用其他4个独立列的数据)的1进行绘图 我在下面做了一个测试数据框来说明我的观点。我的真实数据帧有数千个点,我想绘制多个数据帧,所以我不想使用像子集数据和绘制为单独的图层/几何图形这样的变通方法 testdata <- data.frame(Split = c(rep(0,5), rep(1,5)), a = rep(1:5,2), b = c(7

我试图在ggplot中绘制一个数据帧,但在按所需顺序显示点和线时遇到问题

数据是基于同一列(因子0或1)分割的,我希望0对线和点(使用其他4个独立列的数据)的1进行绘图

我在下面做了一个测试数据框来说明我的观点。我的真实数据帧有数千个点,我想绘制多个数据帧,所以我不想使用像子集数据和绘制为单独的图层/几何图形这样的变通方法

testdata <- data.frame(Split = c(rep(0,5), rep(1,5)), a = rep(1:5,2), 
      b = c(7,8,9,10,11,6,8,9,10,12), x = c(1:5, 1:5), y = c(1:3,5,6,1.1,2.1,4.1,5.1,7.1))
testdata$Split <- factor(testdata$Split)


ggplot(data = testdata)+
  geom_point(aes(x = x, y = y, colour = Split), size = 4)+
  geom_line(aes(x = a, y = b, colour = Split))

testdata$Split <- ordered(testdata$Split, levels = rev(levels(testdata$Split)))

testdata在调查了一段时间之后,我发现并提出了以下建议。简而言之,我认为解决方案是在
unclass()
中将值2赋给0

同样,0在
unclass()中有2个

现在我运行以下命令。q(分数)具有理想的结果。但q2(对于线路)没有

q <- ggplot(data = foo, aes(x = x, y = y, colour = split))+
     geom_point(size = 6)

q2 <- ggplot(data = foo, aes(x = a, y = b, colour = split))+
      geom_line()

您好,谢谢您的帮助,我真的希望得到一个不涉及手动拆分数据的答案,因为这是一个简单的问题,我需要多次应用该方法并拆分为两个以上的层。我找到了一种方法。但是,花了这么长时间。我还需要解释很多。请给我一点时间。谢谢。@user2738526我现在修改了我的答案。哇,谢谢你的详细回复。我想我需要一点时间来处理这一切。我做了一个不同的工作,但我仍然很好奇它在做什么,为什么希望这能帮助我找到答案out@user2738526如果你知道更快的方法,请告诉我。你的问题让我想了很多事情。
foo <- arrange(foo, desc(split))
foo$split <- as.factor(foo$split)

#> str(foo)
#'data.frame':  10 obs. of  5 variables:
# $ split: Factor w/ 2 levels "0","1": 2 2 2 2 2 1 1 1 1 1
# $ a    : int  1 2 3 4 5 1 2 3 4 5
# $ b    : num  6 8 9 10 12 7 8 9 10 11
# $ x    : int  1 2 3 4 5 1 2 3 4 5
# $ y    : num  1.1 2.1 4.1 5.1 7.1 1 2 3 5 6
#> unclass(foo$split)
# [1] 2 2 2 2 2 1 1 1 1 1
#attr(,"levels")
#[1] "0" "1"
q <- ggplot(data = foo, aes(x = x, y = y, colour = split))+
     geom_point(size = 6)

q2 <- ggplot(data = foo, aes(x = a, y = b, colour = split))+
      geom_line()
### Reorder the factor levels.      
foo$split <- ordered(foo$split, rev(levels(foo$split)))

#> str(foo)
#'data.frame':  10 obs. of  5 variables:
#$ split: Ord.factor w/ 2 levels "1"<"0": 1 1 1 1 1 2 2 2 2 2
#$ a    : int  1 2 3 4 5 1 2 3 4 5
#$ b    : num  6 8 9 10 12 7 8 9 10 11
#$ x    : int  1 2 3 4 5 1 2 3 4 5
#$ y    : num  1.1 2.1 4.1 5.1 7.1 1 2 3 5 6

#> unclass(foo$split)
#[1] 1 1 1 1 1 2 2 2 2 2
#attr(,"levels")
#[1] "1" "0"
q3 <- ggplot(data = foo, aes(x = x, y = y, colour = split))+
      geom_point(size = 6)

q4 <- ggplot(data = foo, aes(x = a, y = b, colour = split))+
      geom_line()
ggplot(data = foo)+
  geom_point(aes(x = x, y = y, colour = split), size = 6)+
  geom_line(aes(x = a, y = b, colour = split))