有两行的图,根据一个列的值分成不同的图

时间:2019-05-21 01:39:34

标签: r ggplot2

我有一个这种格式的数据框,但是有几百行:

dfex = data.frame(dot = c('A', 'B', 'C', 'D', 'E', 'F'), 
                  group = c('A1', 'A1', 'A1', 'A2', 'A2', 'A2'), 
                  x1 = c(1, 2, 3, 4, 5, 6), 
                  x2 = c(4, 5, 6, 1, 2, 3), 
                  y = c(1, 2, 3, 4, 5, 6))

我想基于group中的值创建不同的图,因此一个图将仅具有组A1行,而另一个图仅具有组A2行。

在每个图上,x1-y对和x2-y对应该有两条不同的线。最好我也可以列出这些行的相关性。

我对ggplot2很熟悉,所以使用它会很棒。

这是一张令人惊叹的油画,可以更好地理解我的意思: enter image description here

2 个答案:

答案 0 :(得分:2)

以下代码将分为两部分。 facet_wrap会将图形分为两组。由于变量存储在单独的列中,因此我创建了两行。

ggplot(dfex) +
  geom_line(mapping = aes(x = x1, y = y, color = "blue")) +
  geom_line(mapping = aes(x = x2, y = y, color = "red")) +
  facet_wrap(. ~group)

或者另外将数据收集为更整齐的格式,

gather(dfex, "xVar", "x", 3:4) %>% 
  ggplot() +
  geom_line(mapping = aes(x = x, y = y, color = xVar)) +
  facet_wrap(. ~group)

答案 1 :(得分:2)

我同意@camille,最好在绘制之前将数据重整为长格式。

library(tidyverse)

dfex %>%
  gather(key, value, -c(dot, group, y)) %>%
  ggplot() +
  aes(value, y, color = key) + 
  geom_line() + 
  facet_wrap(.~group)

enter image description here