ggplot2:参考稍后对 geoms 的调用中提供给 ggplot(...) 的数据

Mik*_*nce 3 r ggplot2 tidyverse

data我经常遇到这样的场景:不同的几何对象需要查看提供给初始调用的参数的数据子集ggplot()

通常,这发生在长链之后可视化某些内容的情况下,我实际上不需要在工作区中保存数据,但我当前的解决方法是这样做,然后在每个几何中显式引用它,例如:

(
    #...
    # long chain
    # ...
) -> to_plot
(
    ggplot()
    + geom_ribbon(
        data = (
            to_plot #using intermediate object saved to workspace
            %>% dplyr::filter(
                cells_or_boots=='bootss'
            )
        )
        , mapping = aes(
            x = x
            , ymin = lo
            , ymax = hi
        )
    )
    + geom_line(
        data = (
            to_plot #using intermediate object saved to workspace
            %>% dplyr::filter(
                cells_or_boots=='cells'
            )
        )
        , mapping = aes(
            x = x
            , y = mean
        )
    )
)
Run Code Online (Sandbox Code Playgroud)

是否有类似dplyr::cur_data()ggplot2 的东西可以实现类似的功能:

(
    #...
    # long chain
    # ...
    %>% ggplot()
    + geom_ribbon(
        data = (
            ggplot_cur_data()  #place for hoped-for dplyr::cur_data() equivalent
            %>% dplyr::filter(
                cells_or_boots=='boots'
            )
        )
        , mapping = aes(
            x = x
            , ymin = lo
            , ymax = hi
        )
    )
    + geom_line(
        data = (
            ggplot_cur_data()  #place for hoped-for dplyr::cur_data() equivalent
            %>% dplyr::filter(
                cells_or_boots=='cells'
            )
        )
        , mapping = aes(
            x = x
            , y = mean
        )
    )
)
Run Code Online (Sandbox Code Playgroud)

bou*_*all 10

我们可以将函数传递给datageom 中的参数:

# suppose you have your longer pipeline here
mtcars %>%
  ggplot()+
    geom_point(
      aes(wt, mpg),
      data = ~ filter(.x, cyl == 6), 
      colour = "red"
    ) +
    geom_point(
      aes(wt, mpg),
      data = ~ filter(.x, cyl == 4), 
      colour = "blue"
    )
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

或者,您可以用来. %>% [pipeline]创建匿名函数。起始位置.是传递给 的数据的占位符ggplot2()

mtcars %>%
  ggplot()+
    geom_point(
      aes(wt, mpg),
      data = . %>% filter(cyl == 6), 
      colour = "red"
    ) +
    geom_point(
      aes(wt, mpg),
      data = . %>% filter(cyl == 4), 
      colour = "blue"
    )
Run Code Online (Sandbox Code Playgroud)

来自帮助文件:

将使用单个参数(绘图数据)调用函数。返回值必须是一个data.frame,并将用作图层数据。可以根据公式创建函数(例如~ head(.x, 10))。