更改函数内的默认ggplot2比例

时间:2014-06-23 12:53:33

标签: r ggplot2

我正在开发一个包含使用ggplot2的绘图功能的包。我想更改默认比例的颜色,但不影响全局环境。我正在为scale_colour_continuous分配一个新函数,使用一组新的默认颜色。

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对象之前的比例。

感谢任何帮助。

1 个答案:

答案 0 :(得分: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为多个你需要渐变