在 ggplot 中使用参数占位符

Use argument place holder within ggplot

我正在尝试在 ggplot() 中使用参数占位符 .。但由于某些我不完全确定的原因,它不起作用。

我正在做的是这个(使用来自 ggplot2/tidyverse 的示例数据):

library(tidyverse)
library(magrittr)

corr_eqn <- function(x, y, digits = 2) {
  corr_coef <-
    round(cor(x, y, use = "pairwise.complete.obs"), digits = digits)
  paste("r = ", corr_coef)
}


economics %>%
  filter(date >= "1990-11-01") %>%
  ggplot(aes(pop, unemploy)) +  
  geom_point()+
  annotate(geom = "text", x=-Inf, y=Inf, hjust=0, vjust=1,
           label = economics[economics$date>="1990-11-01",] %$% corr_eqn(pop, unemploy))

不过,我想将标签后面的命令缩减为label = . %$% corr_eqn(pop, unemploy)。 IE。我不想再次调用 economics[economics$date>="1990-11-01",],因为我已经为此进行了过滤:

economics %>%
  filter(date >= "1990-11-01") %>%
  ggplot(aes(pop, unemploy)) +  
  geom_point()+
  annotate(geom = "text", x=-Inf, y=Inf, hjust=0, vjust=1,
           label = . %$% corr_eqn(pop, unemploy))

但是,它不适用于参数占位符 .。我应该怎么做?

此外,如果有可能不必再次将 popunemploy 作为单独的参数列在 corr_eqn fn 中,这也很棒。

问题是 annotate 不在管道内,所以 . 在那里没有意义。 ggplot 中的 + 运算符与 magrittr 中的 %>% 没有相同的功能;在您的代码中,管道实际上在调用 ggplot() 时停止。 + 运算符将允许下一个函数将各种元素添加到绘图中,但它通常不允许您以您希望的方式访问提供给 ggplot() 调用的数据%>% 运算符。

另一方面,如果您使用 geom_text 而不是 annotate,这些问题就会消失,因为您正在直接访问子集数据中的变量:

economics %>%
  filter(date >= "1990-11-01") %>%
  ggplot(aes(pop, unemploy)) +  
  geom_point() + 
  geom_text(aes(x = min(pop), y = max(unemploy), label = corr_eqn(pop, unemploy)), 
            hjust = 0, vjust = 1, size = 6)