R - DPLYR 和 GGPLOT 管道未按预期工作



我找不到以下两个问题的解决方案:

首先我试试这个:

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对象添加层的问题。

最新更新