【问题标题】:dplyr/ggplot using pipelinedplyr/ggplot 使用管道
【发布时间】:2018-02-19 11:32:25
【问题描述】:

谁能告诉我如何将以下 dplyr 代码与 ggplot 条形图集成。我让它们都独立工作,但是每当我尝试将它们组合在一起时,就会出现问题。

这是生成汇总表的 dplyr 代码(插入到脚本下方):

pop.2.df %>%
gather(key = "trial", value = 'capture','sco.1','sco.2', 'sco.3') %>% 
group_by(trial, capture) %>% summarise(n = n()) 

A tibble: 6 x 3
Groups:   trial [?] 
trial capture     n
  <chr>   <chr> <int>
1 sco.1       n    28
2 sco.1       y    94
3 sco.2       n    38
4 sco.2       y    84
5 sco.3       n    45
6 sco.3       y    77

这是生成条形图的 ggplot 代码,但是如果我首先从上面的脚本中创建一个对象然后绘图,我只能让它工作。我希望使用管道运算符在一段代码中完成所有工作:

 ggplot(data = pop.2.df.v2) + geom_bar(mapping = aes(x = trial, fill = capture), position = "dodge")

【问题讨论】:

  • 代码中有数据有帮助,你可以随时使用 dput()
  • 管道不适用于your summarised data %&gt;% ggplot() + etc
  • 我确定它应该可以工作....但我无法获得正确的语法。

标签: r ggplot2 dplyr pipeline


【解决方案1】:

您使用了错误的几何: geom_bar 需要计数统计。改用 geom_col

your summarised data %>% ggplot() +geom_col(...)

【讨论】:

  • 谢谢。我真的不明白为什么它不应该与 geom_bar 一起使用,因为在汇总后应该计算统计信息,不是吗?无论如何,我让它按照以下要求工作:pop.2.df %&gt;% gather(key = "trial", value = 'capture', 'sco.1','sco.2', 'sco.3') %&gt;% group_by(trial, capture) %&gt;% summarise(count= n()) %&gt;% ggplot() + geom_col(mapping = aes(x = trial, y = count, fill=capture), position = "dodge")
  • 不,geom_bar 需要依靠一些东西(存在于您的原始数据框中),而不是已经计算的值。 geom_col 使用给定的值
  • 你可以使用geom_barstat = "identity",基本上就是geom_col
  • 以防万一有人还在看这个问题。我发现您可以轻松地将数据帧通过管道传递到任何参数位置(不仅仅是我最初想的那样)。这在您想要在传递数据框之前进行大量操作的情况下非常有用。请参阅此示例:stackoverflow.com/questions/43881601/…
  • @Dasr 管道适用于许多对象,而不仅仅是数据帧。在这里看到这个,非常好的管道介绍:stackoverflow.com/questions/42385010/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-28
  • 2020-06-09
  • 1970-01-01
  • 1970-01-01
  • 2018-09-01
  • 2017-11-25
  • 1970-01-01
相关资源
最近更新 更多