首页 文章

更改函数内的默认ggplot2比例

提问于
浏览
2

我正在开发一个包含使用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 回答

  • 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为多个你需要渐变

相关问题