2014-06-23 37 views
2

我正在開發一個包含使用ggplot2的繪圖函數的包。我想更改默認比例的顏色,但不會影響全球環境。我正在爲scale_colour_continuous分配一個新函數,並使用一組新的默認顏色。更改函數內的默認ggplot2縮放比例

library(ggplot2) 
dat  <- data.frame(a = 1:5, b = 1:5) 
home.plot <- function(x){ 
scale_colour_continuous <- function(...) ggplot2::scale_colour_continuous(..., low = "purple", high = "green") 
ggplot(dat, aes(x = a, y = b)) + geom_point(aes(colour = a), size = 10) 
} 

home.plot(dat) 

這不起作用,顏色不會從黑色和藍色變爲紫色和綠色。我想這是因爲ggplot2在home.plot函數的環境之外尋找scale_colour_continuous()函數。

如果我們嘗試相同的,但在全球環境下它的工作原理:

scale_colour_continuous <- function(...) ggplot2::scale_colour_continuous(..., low = "purple", high = "green") 
ggplot(dat, aes(x = a, y = b)) + geom_point(aes(colour = a), size = 10) 

但是這改變ggplot的行爲爲所有後續情節,而不僅僅是那些由home.plot創建。

我知道我可以通過+ scale_colour_continuous()創建ggplot對象後更改顏色,但home.plot不知道用戶是繪製了一個離散變量還是連續變量,因此我需要更改行爲在ggplot對象創建之前的比例尺。

任何幫助表示讚賞。

回答

2
dat  <- data.frame(a = 1:5, b = 1:5) 
home.plot <- function(x,y=1){ 

    gg <- ggplot(dat, aes(x = a, y = b)) + 
    geom_point(aes(colour = a), size = 10) 
    if(y==1){ 
    gg <- gg+scale_colour_gradient(low="purple", high="green") 
    }else{ 
    gg <- gg+scale_colour_gradientn(colours=c("red","yellow", 
               "green","cyan","blue")) 
    } 
    return(gg) 
} 

home.plot(dat) 

enter image description here

home.plot(dat,2) 

enter image description here

這應該工作。對於2種顏色,你可以使用漸變,bur多個你需要gradientn

+0

謝謝你的回答。我寧願避免使用其他解決方案。在包中,我繪製了幾個層次和比例相當複雜的圖表,並且他們需要大量的if()s。 –

+0

「if」只是顯示可能性,你可以跳過它,只是紫綠色的梯度 – Pigeon

+0

如果不清楚我打算完成什麼,我很抱歉。正如我在上面的帖子中所寫的,我知道我可以在ggplot創建對象後更改比例。這不夠靈活,因爲我不知道繪圖函數中輸入變量的特徵。他們可能是數字向量和因素。 –

相關問題