我找不到以下两个问题的解决方案:
首先我试试这个:
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
显然不起作用。但是使用像.$group
这样的东西也不成功。值得注意的是,我必须在aes()
第二个问题是这个。我无法在管道中调用已保存的ggplot(gg
)。
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"
感谢您的帮助!
很长一段时间后,我找到了解决方案here。必须在{}
中设置完整的ggplot术语。
mtcars %>%
mutate(group=ifelse(gear==3,1,2)) %>% {
ggplot(.,aes(carb,drat)) +
geom_point(shape=.$group)}
答案 0 :(得分:2)
如果您将shape
定义包含在aes()
中,则可以获得所需的行为。要在shape
之外使用aes()
,您可以传递一个值(即shape=1
)。另请注意,group
转换为离散var,geom_point
在将连续var传递给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
其次,%>%
运算符在被称为lhs %>% rhs
时,假定rhs
是一个函数。因此,如错误所示,您将gg
作为函数调用。将绘图作为函数调用数据框(即gg(mtcars)
)不是有效的操作。
请参阅@docendo discimus关于如何使用{}
完成从magrittr管道向现有ggplot
对象添加图层的问题的评论。