我发现以下两个问题没有解决方案:
首先我尝试这个:
library(tidyverse)
gg <- mtcars %>%
mutate(group=ifelse(gear==3,1,2)) %>%
ggplot(aes(x=carb, y=drat)) + geom_point(shape=group)
Error in layer(data = data, mapping = mapping, stat = stat, geom =
GeomPoint,:object 'group' not found
Run Code Online (Sandbox Code Playgroud)
这显然不起作用。但使用这样的东西.$group也并不成功。值得注意的是,我必须指定外部的形状aes()
第二个问题是这样的。我无法gg在管道中调用保存的 ggplot ( ) 。
gg <- mtcars %>%
mutate(group=ifelse(gear==3,1,2)) %>%
ggplot(aes(x=carb, y=drat)) + geom_point()
mtcars %>%
filter(vs == 0) %>%
gg + geom_point(aes(x=carb, y=drat), size = 4)
Error in gg(.) : could not find function "gg"
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助!
经过很长一段时间我在这里找到了解决方案。必须在 中设置完整的 ggplot 术语{}。
mtcars %>%
mutate(group=ifelse(gear==3,1,2)) %>% {
ggplot(.,aes(carb,drat)) +
geom_point(shape=.$group)}
Run Code Online (Sandbox Code Playgroud)
如果您将shape定义包含在内,aes()您可以获得所需的行为。要在shape外部使用,aes()您可以向其传递单个值(即shape=1)。另请注意group转换为离散变量,geom_point当您将连续变量传递给 时会引发错误shape。
library(tidyverse)
gg <- mtcars %>%
mutate(group=ifelse(gear==3,1,2)) %>%
ggplot(aes(x=carb, y=drat)) +
geom_point(aes(shape=as.factor(group)))
gg
Run Code Online (Sandbox Code Playgroud)
其次,%>%当调用 as 时lhs %>% rhs,运算符假定rhs是一个函数。因此,如错误所示,您正在gg作为函数进行调用。将绘图作为数据帧上的函数调用(即gg(mtcars))不是有效的操作。
请参阅 @docendo discimus 对问题的评论,了解如何使用magrittr 管道{}将图层添加到现有对象。ggplot