ggplot2:组合组,颜色和线型

时间:2018-12-02 15:36:13

标签: r ggplot2

我有一个包含3个因子(conditionmeasuretime)的数据库,并希望使用x轴,颜色/组和线型对其进行绘制。

例如,我的数据如下:

DT <- data.frame(condition = rep(c("control", "experimental"), each = 4),
                 measure = rep(c("A", "A", "B", "B"), 2),
                 time = rep(c("pre-test", "post-test"), 4),
                 score = 1:8)

> DT
     condition measure      time score
1      control       A  pre-test     1
2      control       A post-test     2
3      control       B  pre-test     3
4      control       B post-test     4
5 experimental       A  pre-test     5
6 experimental       A post-test     6
7 experimental       B  pre-test     7
8 experimental       B post-test     8

我的目标是绘制这样的图形:

enter image description here

我尝试过:

ggplot(DT, aes(time, score, group = measure, color = measure, linetype = condition)) +
    geom_line() +
    geom_point()

但是它返回此错误:

Error: geom_path: If you are using dotted or dashed lines, colour, size and linetype must be constant over the line

我想念什么?

2 个答案:

答案 0 :(得分:7)

您要使用

ggplot(DT, aes(time, score, group = interaction(measure, condition), 
               color = measure, linetype = condition)) +
  geom_line() + geom_point()

enter image description here

因为实际分组不仅取决于measure,而且取决于condition。当单独按measure分组时,我想这是在问一种平行四边形而不是线。

答案 1 :(得分:4)

data.frame(
  condition = rep(c("control", "experimental"), each = 4),
  measure = rep(c("A", "A", "B", "B"), 2),
  time = rep(c("pre-test", "post-test"), 4),
  score = 1:8
) -> DT

DT_wide <- tidyr::spread(DT, time, score)

ggplot() +
  geom_segment(
    data = DT_wide,
    aes(
      x = "pre-test", xend = "post-test", 
      y = `pre-test`, yend = `post-test`,
      color = measure, 
      linetype = condition
    )
  ) +
  geom_point(
    data = DT,
    aes(time, score, color = measure)
  )

enter image description here