2017-09-01 86 views
0

我嘲笑了下面的代码以提供上下文。函数,序列间隔,名称和颜色都是任意的。为多层ggplot2绘图创建任意图例排序

library(ggplot2) 

function1 <- function(input) { 
    input * 3 
} 

function2 <- function(input) { 
2 * input + 1 
} 

function3 <- function(input) { 
    input + 4 
} 

x1 <- seq(1, 10, 0.1) 
x2 <- seq(1, 10, 0.2) 
x3 <- seq(1, 10, 0.5) 

y1 <- sapply(x1, function1) 
y2 <- sapply(x2, function2) 
y3 <- sapply(x3, function3) 

data1 <- data.frame(x1, y1) 
data2 <- data.frame(x2, y2) 
data3 <- data.frame(x3, y3) 

ggplot() + 
    geom_point(data = data1, aes(x1, y1, color = "B")) + 
    geom_point(data = data2, aes(x2, y2, color = "C")) + 
    geom_point(data = data3, aes(x3, y3, color = "A")) + 
    scale_color_manual(name = "Functions", 
        values = c("B" = "Green", "C" = "Red", 
           "A" = "Blue")) + 
    xlab("X") + 
    ylab("Y") 

下面是导致情节的截图:

enter image description here

有几个以前回答问题,解决类似的问题与传说排序,如本one,但没有人可以处理与多层地块。这question解决了版本0.9.2的图例排序,但是ggplot2 is currently on version 2.2.1。此外,它似乎只处理升序或降序。

我想知道是否有任何方法来自定义图例中值的顺序。例如,在图例中,是否可以将它显示为B,C,A而不是A,B,C?

+0

你不需要'sapply'运行的功能。你可以做'y1 = function1(x1)'等。 – eipi10

+0

感谢您的提示。我对R很新,所以我仍然在搞清楚。 – arbitrarystringofletters

回答

3

“ggplot2方法”是将数据重塑为长格式(或首先以长格式创建它)。然后,你只需要一个呼叫geom_point,你可以创建一个因素列命令的功能:

dat = data.frame(X=c(x1,x2,x3), 
       Y=c(y1,y2,y3), 
       Functions=rep(LETTERS[1:3], sapply(list(x1,x2,x3), length))) 

dat$Functions = factor(dat$Functions, levels=c("B","C","A")) 

ggplot(dat, aes(X, Y, colour=Functions)) + 
    geom_point() + 
    scale_color_manual(values=c(B="green", C="red", A="blue")) 

enter image description here

UPDATE:回应的意见,如果你想添加一个abline,你可以使用下面的代码。但是,这不仅会为颜色图例添加新的关键值,还会为其他三个预先存在的图例关键点添加对角线。

ggplot(dat, aes(X, Y, colour=Functions)) + 
    geom_point() + 
    scale_color_manual(values=c(B="green", C="red", A="blue", `My Abline`="black")) + 
    geom_abline(aes(intercept=0, slope=1, colour="My Abline")) 

enter image description here

如果你想为abline一个单独的传奇,那么你可以使用的点填充审美和保留的颜色图例只为abline。为此,请使用填充点标记(点标记形状21到25)。在下面的代码中,stroke=0用于删除填充点周围的边框。

ggplot(dat, aes(X, Y, fill=Functions)) + 
    geom_point(shape=21, size=2, stroke=0) + 
    geom_abline(aes(intercept=0, slope=1, colour="My Abline")) + 
    scale_fill_manual(values=c(B="green", C="red", A="blue")) + 
    scale_colour_manual(values="black") + 
    labs(colour="") 

enter image description here

+0

假设我想用黑色添加一条AB线。我怎么能把它包含在图例中? – arbitrarystringofletters

+0

什么是“AB线”?你是说abline? – eipi10

+0

是的。这是我的不好。 – arbitrarystringofletters