如何在 ggplot 管道中使用子集?
How do I use subset in a ggplot pipe?
我正在尝试将 ggplot 与子集一起使用,为 MyName 的不同值制作单独样式的线条。
如果我将数据框设置为在子集函数中引用的临时变量 temp,则此方法有效
temp <- data.frame(x = ..., y = ..., MyName = ...)
temp %>% ggplot(aes(x = x, y= y) + geom_line(data = subset(temp, MyName == "Var Name"), ...)
除了我更喜欢避免创建临时数据框。
是否有语法可以避免这种情况?
像的东西。在此,除了正确的:
data.frame(x = ..., y = ..., MyName = ...) %>%
%>% ggplot(aes(x = x, y= y) + geom_line(data = subset(., MyName == "Var Name"), ...)
这表示对象“.”没有找到。
您可以使用 lambda 语法作为层的 data
参数。然后它知道使用提供给主 ggplot 调用的数据。
library(ggplot2)
library(magrittr)
iris %>% ggplot(aes(Sepal.Width, Sepal.Length)) +
geom_point(data = ~subset(., Species == "setosa"))
由 reprex package (v1.0.0)
于 2021-02-04 创建
幕后发生的一些额外细节; ggplot2 在 layer()
函数中的所有 data
参数上使用 fortify()
S3 泛型。存在一个调用 rlang::as_function()
的 ggplot2:::fortify.formula()
方法,它用 'real' 函数替换了 lambda 语法公式。 ggplot2:::Layer$layer_data()
ggproto 方法然后使用绘图数据作为唯一参数调用该函数。请注意,这与管道运算符的工作方式不同,但仍然很方便。
我正在尝试将 ggplot 与子集一起使用,为 MyName 的不同值制作单独样式的线条。
如果我将数据框设置为在子集函数中引用的临时变量 temp,则此方法有效
temp <- data.frame(x = ..., y = ..., MyName = ...)
temp %>% ggplot(aes(x = x, y= y) + geom_line(data = subset(temp, MyName == "Var Name"), ...)
除了我更喜欢避免创建临时数据框。
是否有语法可以避免这种情况? 像的东西。在此,除了正确的:
data.frame(x = ..., y = ..., MyName = ...) %>%
%>% ggplot(aes(x = x, y= y) + geom_line(data = subset(., MyName == "Var Name"), ...)
这表示对象“.”没有找到。
您可以使用 lambda 语法作为层的 data
参数。然后它知道使用提供给主 ggplot 调用的数据。
library(ggplot2)
library(magrittr)
iris %>% ggplot(aes(Sepal.Width, Sepal.Length)) +
geom_point(data = ~subset(., Species == "setosa"))
由 reprex package (v1.0.0)
于 2021-02-04 创建幕后发生的一些额外细节; ggplot2 在 layer()
函数中的所有 data
参数上使用 fortify()
S3 泛型。存在一个调用 rlang::as_function()
的 ggplot2:::fortify.formula()
方法,它用 'real' 函数替换了 lambda 语法公式。 ggplot2:::Layer$layer_data()
ggproto 方法然后使用绘图数据作为唯一参数调用该函数。请注意,这与管道运算符的工作方式不同,但仍然很方便。