如何引用 ggplot 中的管道对象?

J. *_*Doe 5 r ggplot2

我正在尝试这段代码:

iris %>% 
    mutate(Sepal.Length = Sepal.Length*100) %>% 
    ggplot(aes(x = Sepal.Length, y = Sepal.Width, fill = Sepal.Length))+
    geom_col()+
    scale_fill_gradient2(low = "yellow", high = "green", mid = "red", midpoint = median(.$Sepal.Length))
Run Code Online (Sandbox Code Playgroud)

这个问题的重点是在部分midpoint。当我运行这个时,我收到错误:

Error in median(.$Sepal.Length) : object '.' not found
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

iris %>% 
    mutate(Sepal.Length = Sepal.Length*100) %>% 
    ggplot(aes(x = Sepal.Length, y = Sepal.Width, fill = Sepal.Length))+
    geom_col()+
    scale_fill_gradient2(low = "yellow", high = "green", mid = "red", midpoint = median(Sepal.Length))
Run Code Online (Sandbox Code Playgroud)

我遇到了类似的错误:

Error in median(Sepal.Length) : object 'Sepal.Length' not found
Run Code Online (Sandbox Code Playgroud)

实现我正在尝试的目标的正确方法是什么?

Jrm*_*FRL 2

这可以通过下面的技巧来实现,但除了其他潜在的副作用之外,这是丑陋且不优雅的。谨慎使用!

实际上,您可以在管道内“硬分配”一个变量:这里是代码:

iris %>% 
  mutate(Sepal.Length = Sepal.Length*100) %>% 
  {. ->> tmp} %>%
  ggplot(aes(x = Sepal.Length, y = Sepal.Width, fill = Sepal.Length)) +
  geom_col() +
  scale_fill_gradient2(low = "yellow", high = "green", mid = "red", 
                       midpoint = median(tmp$Sepal.Length))

rm(tmp) # remove temporary object
Run Code Online (Sandbox Code Playgroud)

编辑:在@jd-caddell之后,我稍微调整了我的代码以完美匹配您的用例。

在此输入图像描述