【问题标题】:Conditional formatting of plot using ggplot2使用 ggplot2 对绘图进行条件格式设置
【发布时间】:2020-11-21 15:23:54
【问题描述】:

我正在编写一个利用 ggplot2 的自定义包。目的是制作符合公司品牌和风格的标准情节。

在函数中,用户可以识别参数的输入。根据绘图类型,使用的比例需要不同(即离散值与连续值)。我希望函数根据参数的数据类型选择适当的比例。

scatter_plot_multiple <- function(data, xaxis, yaxis, grouping, title = "", subtitle = "", xlabel = "", ylabel = "") {
      xaxis <- enquo(xaxis)
      yaxis <- enquo(yaxis)
      grouping <- enquo(grouping)
      
      ggplot(data) +
        aes(!!xaxis, !!yaxis, colour = !!grouping) +
        geom_point() +
        labs(title = title,
             subtitle = subtitle,
             x = xlabel,
             y = ylabel) +
        customTheme() +
        custom_scale_colour()
}

在前面的函数中,我希望 custom_scale_colour() 根据 grouping 参数的数据类型进行更改。例如:

scatter_plot_multiple(mpg, cty, hwy, drv) 将使用 custom_scale_colour()

scatter_plot_multiple(mpg, cty, hwy, cyl) 将使用 custom_gradient_colour()

我不确定如何应对这一挑战。

【问题讨论】:

    标签: r function ggplot2 conditional-statements


    【解决方案1】:

    在 ggplot2 中,您可以像在 magrittr/dplyr 管道中一样添加条件语句。插入一个用大括号括起来的 if 语句:+ {if ([condition]) {[action]}}。应用于函数内引用的变量名,使用这种方法可能如下所示。

    library(ggplot2)
    library(dplyr)
    library(rlang)
    
    scatter_plot_multiple <- function(data, xaxis, yaxis, grouping, title = "", subtitle = "", xlabel = "", ylabel = "") {
    
      xaxis <- enquo(xaxis)
      yaxis <- enquo(yaxis)
      grouping <- enquo(grouping)
      groupingClass <- class(pull(data, as_name(grouping)))
    
      ggplot(data) +
        aes(!!xaxis, !!yaxis, colour = !!grouping) +
        geom_point() +
        labs(title = title,
             subtitle = subtitle,
             x = xlabel,
             y = ylabel) +
        customTheme() +
         {if (groupingClass == 'character') {
           custom_scale_colour()}} +
         {if (groupingClass == 'numeric') {
           custom_gradient_colour()}}
    }
    

    【讨论】:

    • 谢谢@rjen。不确定我是否正确理解您的解决方案。它似乎是基于一个特定的值。我希望实现的是基于数据类型的条件。因此,如果标识的列是数字,则函数将“选择”custom_gradient_colour,如果列是字符串,则函数将“选择”custom_scale_colour。我的假设是需要评估列的“类型”,并基于执行条件语句以及其他事情。
    • @Ryan Garnett:我已经编辑了我的答案。我删除了示例并输入了解决方案。
    • 谢谢@rjen,这太棒了
    • 我测试它并得到以下错误: scatter_plot_multiple(mpg, cty, hwy, drv) 中的错误:找不到对象'drv' 关于为什么函数看不到该列的任何想法?跨度>
    • @Ryan Garnett:我已经编辑了我的解决方案。它现在还展示了该方法如何在函数内使用带引号的变量名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 2020-04-29
    • 2020-04-28
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多