gpt4 book ai didi

r - 数据参数如何通过 ggplot 传递?

转载 作者:行者123 更新时间:2023-12-05 00:17:57 25 4
gpt4 key购买 nike

我试图在 ggplot 的 geom 参数中直接包含子集,并试图理解似乎不一致的行为。

如果我使用 data = 。 %>% filter() 它有效,但如果我尝试使用 data = filter(.) 我会收到一条错误消息。在 ggplot 流之外,这两种语法通常可以互换,那么这里发生了什么?

library(tidyverse)

# piping in, works
ggplot(data = cars, aes(x = speed, y = dist)) +
geom_point(data = . %>% filter(speed > 10))

# '.' in function, error: "object '.' not found"
ggplot(data = cars, aes(x = speed, y = dist)) +
geom_point(data = filter(. , speed > 10))

最佳答案

我是这样理解幕后发生的事情的。

一般按照magrittr语法

. %>% some_function(...)

的缩写
function(x) some_function(x, ...)

所以在你的情况下,

. %>% filter(speed > 10)

可以展开为

function(x) filter(x, speed > 10)

我们可以确认确实如此

ggplot(data = cars, aes(speed, dist)) + geom_point(data = function(x) filter(x, speed > 10))    

工作并给出与“管道输入,工作”示例相同的结果。

所以这里的关键是要认识到 data(在 geom_point 内)可以将 function 作为参数。该函数是一个匿名函数,应用于 ggplot2 主调用中的 data 参数。

引自ggplot2 issue #1486

This PR will make it possible to supply a function as the data argument to the layer function. The function will be applied to the global data of the plot and the result will be used in the layer.

考虑到所有这些,就很清楚为什么了

... + geom_point(data = filter(. , speed > 10))

没用。 geom_* 中的 data 需要是 data.frame 或返回 data.frame 的函数应用于主 ggplot2 调用的 data 参数。

关于r - 数据参数如何通过 ggplot 传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58810916/

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