R:如何在ggplot线图

时间:2018-03-25 13:24:00

标签: r ggplot2

我正在尝试使用两种类型的测量创建一个线图,但我的数据缺少一些x值。在Line break when no data in ggplot2我已经找到了如何创建在现在有数据时会休息的图,但是id不允许绘制2行(每种类型一行)。 1)当我尝试

ggplot(Data, aes(x = x, y = y,  group = grp)) + geom_line()

只有一行,但没有数据时有中断

1 line with break

2)当我尝试

ggplot(Data, aes(x = x, y = y,  col = Type)) +
  geom_line()

它会生成2行,但在没有数据时会中断 enter image description here

3)当我尝试

ggplot(Data, aes(x = x, y = y,  col = Type, group = grp)) +
  geom_line()

它使得图表不可用 enter image description here

4)当然我可以将Type和grp组合起来制作新的变量,但是传说并不好看,我得到4组(和颜色)2。 5)我也可以制作类似的东西,但它不会产生一个传奇,而在我的真实数据集中,我有很多类型可以做到这一点

ggplot() +
      geom_line(data = Data[Data$Type == "A",], aes(x = x, y = y, group = grp), col = "red") +
      geom_line(data = Data[Data$Type == "B",], aes(x = x, y = y, group = grp), col = "blue")

enter image description here

数据样本:

Data <- data.frame(x = c(1:100, 201:300), y = rep(c(1, 2), 100), Type = rep(c("A", "B"), 100), grp = rep(c(1, 2), each = 100))

1 个答案:

答案 0 :(得分:1)

一种方法是使用interaction()指定多列的分组:

library(ggplot2)

Data <- data.frame(x = c(1:100, 201:300), y = rep(c(1, 2), 100), Type = rep(c("A", "B"), 100), grp = rep(c(1, 2), each = 100))

ggplot(Data, aes(x = x, y = y, col = Type, group = interaction(grp,Type))) +
  geom_line()

enter image description here