在调查了一段时间后,这是我发现并提出的建议。简而言之,我认为解决方案是将值 2 分配给 0 unclass()
。
foo <- data.frame(split = rep(c("0", "1"), each = 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),
stringsAsFactors=F)
为了unclass()
在拆分中将 2 分配为 0,我执行了以下操作。
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
再一次, 0 有 2 in unclass()
。
#> unclass(foo$split)
# [1] 2 2 2 2 2 1 1 1 1 1
#attr(,"levels")
#[1] "0" "1"
现在我运行以下命令。q (for points) 有理想的结果。但是 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()
所以,我颠倒了因子顺序,看看会发生什么。
### 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 和 q4 都得到了正确的结果。
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))