r - 如何在ggplot中引用管道对象?

标签 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))

这个问题的重点在midpoint部分。当我运行这个时,我收到错误:
Error in median(.$Sepal.Length) : object '.' not found

我也试过:
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))

我得到了一个类似的错误:
Error in median(Sepal.Length) : object 'Sepal.Length' not found

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

最佳答案

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

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

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

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

enter image description here

关于r - 如何在ggplot中引用管道对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61503696/

相关文章:

r - ggplot : Boxplot by several categorical variables

r - 仅在 ggplot2 重叠时闪避或抖动

r - PROC NLIN 从 SAS 到 R

r - 如何使用 pROC 的 ggroc 将 AUC 添加到多 ROC 图中

r - model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels) 中的错误 : factor X has new levels

r - 如何将调查响应的数据框转换为频率表?

r - 使用facet_wrap时显示每个散点图的回归方程和R^2

r - ggmap map 样式存储库?现在 CloudMade 不再提供 API

r - 根据时间在R中绘制数据

r - coin::wilcox_test 与 R 中的 wilcox.test