AAAA
AAAA

Reputation: 473

R: How to combine grouping and colour aesteric in ggplot line plot

I am trying to create a line plot with 2 types of measurements, but my data is missing some x values. In Line break when no data in ggplot2 I have found how to create plot that will make a break when there is now data, but id does not allow to plot 2 lines (one for each Type). 1) When I try

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

it makes only one line, but with break when there is no data

1 line with break

2) When I try

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

it makes 2 lines, but with break when there is no data enter image description here

3) When I try

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

it makes unreadyble chart enter image description here

4) of course I could combine the Type and grp to make new variable, but then the legend is not nice, and I get 4 groups (and colours) insted of 2. 5) also I could make something like that, but it dose not produce a legend, and in my real dataset i have way to many Types to do that

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 sample:

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))

Upvotes: 0

Views: 566

Answers (1)

Jack Brookes
Jack Brookes

Reputation: 3830

One way is to use interaction() to specify a grouping of multiple columns:

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

Upvotes: 1

Related Questions