【问题标题】:Combining scale_colour and scale_fill in same function将 scale_colour 和 scale_fill 结合在同一个函数中
【发布时间】:2021-03-25 14:45:09
【问题描述】:

我正在尝试编写一个函数,允许我在同一个调用中同时控制 scale_colour 和 scale_fill。但是,当我尝试在同一个函数中将两者相加时,我收到以下错误消息:错误:无法将 ggproto 对象添加在一起。您是否忘记将此对象添加到 ggplot 对象中?

有没有办法克服这个问题?

library(ggplot2)
#> Warning: package 'ggplot2' was built under R version 3.6.3

dual_scale <- function(){
  scale_color_brewer(palette="Dark2")+
    scale_fill_brewer(palette="Dark2")
}

ggplot()+
  dual_scale()
#> Error: Cannot add ggproto objects together. Did you forget to add this object to a ggplot object?

reprex package (v1.0.0) 于 2021-03-25 创建

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    这仅仅是因为你不能使用+ 来组合 ggplot 中的东西,除非参数之一是情节本身。相反,您可以将比例包装在列表中,列表的+ 方法是单独添加元素。

    library(ggplot2)
    
    dual_scale <- function(){
      list(
        scale_color_brewer(palette="Dark2"),
        scale_fill_brewer(palette="Dark2")
      )
    }
    
    ggplot(mtcars, aes(wt, mpg))+
      geom_point(aes(colour = as.factor(cyl))) +
      dual_scale()
    

    或者,如果您确实需要 1 个具有相同中断、标签、标题等的比例,您可以设置一个双重审美比例,而不是两个单独的比例。

    dual_scale <- function() {
      scale_colour_brewer(palette = "Dark2", aesthetics = c("colour", "fill"))
    }
    
    ggplot(mtcars, aes(wt, mpg))+
      geom_point(aes(colour = as.factor(cyl))) +
      dual_scale()
    

    reprex package (v1.0.0) 于 2021-03-25 创建

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-18
      • 1970-01-01
      • 1970-01-01
      • 2015-08-04
      • 1970-01-01
      • 2021-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多