2017-09-01 104 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