gpt4 book ai didi

r - 如何在ggplot中使用R的原生管道和占位符

转载 作者:行者123 更新时间:2023-12-03 07:53:22 26 4
gpt4 key购买 nike

如何在 ggplot geom 中使用 native 管道和占位符?

将 data.frame 传递给 ggplot 时, native 管道工作正常,但在 geom 内,当我想过滤原始 data.frame 时,我需要使用“magrittr”管道。

所以这工作正常:

mtcars |> 
ggplot() +
geom_col(data = . %>% filter(cyl == 4),
aes(x = gear, y = mpg),
fill = "grey80") +
geom_text(data = . %>% filter(cyl == 4 & gear == 3),
aes(x = gear,
y = mpg,
label = "ooo"), color = "tomato3") +
theme_minimal()

使用匿名函数,我可以完全切换到 native 管道:

mtcars |> 
ggplot() +
geom_col(data = (\(x) filter(x, cyl == 4)),
aes(x = gear, y = mpg),
fill = "grey80") +
geom_text(data = (\(x) filter(x, cyl == 4 & gear == 3)),
aes(x = gear,
y = mpg,
label = "ooo"), color = "tomato3") +
theme_minimal()

但是有没有一种优雅的方式来使用 R 的原生管道运算符和占位符来执行相同的操作?

这会引发错误“管道占位符的无效使用”:

mtcars |> 
ggplot() +
geom_col(data = _ |> filter(cyl == 4),
aes(x = gear, y = mpg),
fill = "grey80") +
geom_text(data = _ |> filter(cyl == 4 & gear == 3),
aes(x = gear,
y = mpg,
label = "ooo"), color = "tomato3") +
theme_minimal()

最佳答案

可以保留 native 管道,但利用 ggplot2 尽管可能会弃用公式语法以支持新的匿名函数语法,但仍然有效。

mtcars |> 
ggplot() +
geom_col(data = ~filter(., cyl == 4),
aes(x = gear, y = mpg),
fill = "grey80") +
geom_text(data = ~filter(., cyl == 4 & gear == 3),
aes(x = gear,
y = mpg,
label = "ooo"), color = "tomato3") +
theme_minimal()

也就是说,我个人坚信不要在我的绘图/图表代码中进行数据操作。我宁愿预先完成所有数据更改,然后编写一个纯粹的绘图函数。

d1 <- filter(mtcars, cyl == 4)
d2 <- filter(mtcars, cyl == 4 & gear == 3)

ggplot() +
geom_col(data = d1,
aes(x = gear, y = mpg),
fill = "grey80") +
geom_text(data = d2,
aes(x = gear,
y = mpg,
label = "ooo"), color = "tomato3") +
theme_minimal()

关于r - 如何在ggplot中使用R的原生管道和占位符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76613795/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com