ggplot管道传参报错:传入.加管道提示<fseq>对象,求答疑与方案
问题解答
1. 写法错误还是机制变更?
你之前的写法本身就是错误的,ggplot从未支持过在ggplot()的第一个(data)参数中直接传入. %>% ...这样的管道序列。
报错里的<fseq> object是因为你传递给ggplot()的不是它需要的数据框,而是由.和管道生成的函数序列对象(functional sequence),ggplot无法识别这种类型的输入,所以运行失败。你可能混淆了管道在ggplot图层参数中的用法,而非主data参数的用法。
2. 推荐的管道传递方式
目前有两种常用且规范的管道写法:
方式一:先完成所有数据处理,再传入ggplot
把数据清洗、变换、过滤的步骤全部放在ggplot()之前,用管道串联,最后将处理好的数据直接传给ggplot():
mtcars %>% mutate(Bla = cyl + mpg) %>% filter(am == 1) %>% ggplot(aes(x = mpg, y = cyl)) + geom_point()
方式二:在图层中使用管道过滤数据
如果需要针对特定图层过滤数据(而非全局处理),可以在图层的data参数中使用. %>% ...的写法,这是ggplot配合管道的正确用法:
mtcars %>% mutate(Bla = cyl + mpg) %>% ggplot(aes(x = mpg, y = cyl)) + geom_point(data = . %>% filter(am == 1))
内容的提问来源于stack exchange,提问作者J. Doe
相关产品推荐
相关产品推荐

