我找不到以下两个问题的解决方案:
首先我试试这个:
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"
感谢您的帮助!
编辑
很长一段时间后,我在这里找到了解决方案。必须在{}
中设置完整的ggplot项。
mtcars %>%
mutate(group=ifelse(gear==3,1,2)) %>% {
ggplot(.,aes(carb,drat)) +
geom_point(shape=.$group)}
shape
定义包装在aes()
中,则可以获得所需的行为。 要在aes()
之外使用shape
,您可以向其传递单个值(即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
对象添加层的问题。