我正在尝试这段代码:
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)
实现我正在尝试的目标的正确方法是什么?
这可以通过下面的技巧来实现,但除了其他潜在的副作用之外,这是丑陋且不优雅的。谨慎使用!
实际上,您可以在管道内“硬分配”一个变量:这里是代码:
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之后,我稍微调整了我的代码以完美匹配您的用例。