首页 > 解决方案 > 使用 ggplot2 对绘图进行条件格式设置

问题描述

我正在编写一个利用 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()

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

标签: rfunctionggplot2conditional-statements

解决方案


在 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()}}
}

推荐阅读