我正在尝试这个代码:
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 之后,我稍微调整了我的代码以完美匹配您的用例。
关于r - 如何在ggplot中引用管道对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61503696/