如果采用长格式,则将多个组的两个子组相互绘制

时间:2018-08-21 22:13:22

标签: r ggplot2

#data
set.seed(1)
data_foo <- data.frame(id = rep(LETTERS[1:4], times = 2), group_measure = c(rep('a_c',4),rep('b_c',4), c(rep('a_d',4),rep('b_d',4))),
                       value = sample(1:5, size = 16, replace = TRUE))

我想绘制x轴上的“ a”子组与y轴上的“ b”子组,并为每个度量绘制一个图。 像这样:

require(tidyr)
require(ggplot2)
require(patchwork)

data_foo_long <- data_foo %>% spread( group_measure, value)

p1 <- ggplot(data_foo_long, aes(x = a_c, y = b_c)) +
  geom_point()
p2 <- ggplot(data_foo_long, aes(x = a_d, y = b_d)) +
  geom_point()
p1 + p2

enter image description here

我看不到刻面(?)的方法。
但是我给人的印象是,当我采用长格式时,必须有一种更好的,类似ggplot的方式将一组中两个子组的结果相互绘制。不用说-有比这两个更多的措施。


P.S。如果有人对这个问题有更好的建议,请随时发表评论!

1 个答案:

答案 0 :(得分:1)

这是一种方法。我将由您决定“更多措施”的效果如何。

使用tidyr::separate将group_measure拆分为前缀和后缀,然后在前缀上扩展:

library(tidyverse)
data_foo %>% 
  separate(group_measure, 
           into = c("prefix", "suffix"), 
           sep = "_") %>% 
  spread(prefix, value)

  id suffix a b
1  A      c 2 2
2  A      d 4 4
3  B      c 2 5
4  B      d 1 2
5  C      c 3 5
6  C      d 2 4
7  D      c 5 4
8  D      d 1 3

现在,您可以绘制ab,并带有后缀:

data_foo %>% 
  separate(group_measure, 
           into = c("prefix", "suffix"), 
           sep = "_") %>% 
  spread(prefix, value) %>% 
  ggplot(aes(a, b)) + 
    geom_point() + 
    facet_wrap(~suffix)

enter image description here