0

so I would like to do some graphs in R using ggplot. This is my data:

structure(list(Substrate = c("Starch", "Starch", "Starch", "Starch", 
"Starch", "Starch", "Starch", "Starch", "Starch", "Starch", "Starch", 
"Starch", "Starch", "Starch", "Starch", "Starch", "Starch", "Starch", 
"Starch", "Starch", "Starch", "Starch", "Starch", "Starch", "Starch", 
"Starch", "Starch", "Starch", "Starch", "Starch", "Starch", "Starch", 
"Glucomannan", "Glucomannan", "Glucomannan", "Glucomannan", "Glucomannan", 
"Glucomannan", "Glucomannan", "Glucomannan", "Glucomannan", "Glucomannan", 
"Glucomannan", "Glucomannan", "Glucomannan", "Glucomannan", "Glucomannan", 
"Glucomannan", "Glucomannan", "Glucomannan", "Glucomannan", "Glucomannan", 
"Glucomannan", "Glucomannan", "Glucomannan", "Glucomannan", "Glucomannan", 
"Glucomannan", "Glucomannan", "Glucomannan", "xyloglucan", "xyloglucan", 
"xyloglucan", "xyloglucan", "xyloglucan", "xyloglucan", "xyloglucan", 
"xyloglucan", "xyloglucan", "xyloglucan", "xyloglucan", "xyloglucan", 
"xyloglucan", "xyloglucan", "xyloglucan", "xyloglucan", "xyloglucan", 
"xyloglucan", "xyloglucan", "xyloglucan", "xyloglucan", "xyloglucan", 
"xyloglucan", "xyloglucan", "xyloglucan", "xyloglucan", "xyloglucan", 
"xyloglucan", "xyloglucan", "xyloglucan", "xyloglucan", "xyloglucan", 
"Arabinan", "Arabinan", "Arabinan", "Arabinan", "Arabinan", "Arabinan", 
"Arabinan", "Arabinan", "Arabinan", "Arabinan", "Arabinan", "Arabinan", 
"Arabinan", "Arabinan", "Arabinan", "Arabinan", "Arabinan", "Arabinan", 
"Arabinan", "Arabinan", "Arabinan", "Arabinan", "Arabinan", "Arabinan", 
"Arabinan", "Arabinan", "Arabinan", "Arabinan", "Xylan", "Xylan", 
"Xylan", "Xylan", "Xylan", "Xylan", "Xylan", "Xylan", "Xylan", 
"Xylan", "Xylan", "Xylan", "Xylan", "Xylan", "Xylan", "Xylan", 
"Xylan", "Xylan", "Xylan", "Xylan"), Time = c(1L, 5L, 9L, 12L, 
14L, 24L, 48L, 72L, 1L, 5L, 9L, 12L, 14L, 24L, 48L, 72L, 1L, 
5L, 9L, 12L, 14L, 24L, 48L, 72L, 1L, 5L, 9L, 12L, 14L, 24L, 48L, 
72L, 1L, 5L, 9L, 12L, 24L, 48L, 72L, 1L, 5L, 9L, 12L, 24L, 48L, 
72L, 1L, 5L, 9L, 12L, 24L, 48L, 72L, 1L, 5L, 9L, 12L, 24L, 48L, 
72L, 1L, 5L, 9L, 12L, 14L, 24L, 48L, 72L, 1L, 5L, 9L, 12L, 14L, 
24L, 48L, 72L, 1L, 5L, 9L, 12L, 14L, 24L, 48L, 72L, 1L, 5L, 9L, 
12L, 14L, 24L, 48L, 72L, 1L, 5L, 9L, 12L, 24L, 48L, 72L, 1L, 
5L, 9L, 12L, 24L, 48L, 72L, 1L, 5L, 9L, 12L, 24L, 48L, 72L, 1L, 
5L, 9L, 12L, 24L, 48L, 72L, 1L, 5L, 9L, 12L, 14L, 1L, 5L, 9L, 
12L, 14L, 1L, 5L, 9L, 12L, 14L, 1L, 5L, 9L, 12L, 14L), OD = c(0, 
1.27, 3.6, 4.72, 4.48, 2.96, 2.32, 2.32, 0.02, 1.31, 3.59, 4.87, 
4.23, 2.95, 2.15, 1.99, 0.03, 1.07, 3.28, 4.8, 4.56, 3.04, 2.4, 
2.32, 0.04, 1.26, 3.54, 5.08, 5, 3.16, 2.44, 2.44, 0.04, 0.42, 
1.83, 2.48, 2.2, 2.02, 1.93, 0.03, 0.43, 1.86, 2.2, 2.05, 1.89, 
1.78, 0.05, 0.57, 1.84, 1.79, 2.19, 1.99, 1.94, 0.05, 0.58, 1.83, 
1.78, 2.23, 1.73, 1.58, 0.02, 0.47, 1.99, 2.5, 2.47, 1.99, 2.05, 
1.87, 0, 0.49, 1.94, 2.52, 2.48, 1.94, 1.76, 1.58, 0.05, 0.54, 
1.63, 2.34, 2.23, 1.93, 1.69, 1.63, 0.02, 0.51, 1.75, 2.33, 2.29, 
1.87, 1.75, 1.63, 0.04, 0.24, 0.86, 1.61, 1.34, 1.19, 1.16, 0.04, 
0.25, 0.92, 1.64, 1.25, 1.13, 1.07, 0.03, 0.23, 0.69, 1.35, 1.14, 
1.08, 1.02, 0.04, 0.24, 0.73, 1.39, 1.15, 1.09, 1.06, 0, 0.1, 
0.47, 0.72, 0.7, 0, 0.09, 0.42, 0.68, 0.69, 0, 0.07, 0.18, 0.4, 
0.46, 0.01, 0.07, 0.17, 0.38, 0.44)), class = "data.frame", row.names = c(NA, 
-140L))

I would like to have multiple graphs (like this):

Graphs

But I would like to have starch for reference.. so I want to have starch line represented on all the graphs besides one other line that is either arabinan, glucomannan, xylan or xyloglucan. So overall I would like to have 4 graphs. How can I achieve this?

Thank you!

  • This is a data issue more than a ggpplot one. The easiest solution would be to have one column for the line colour and another for the facets. This would however require that the data for starch appear 4 times. – rps1227 Jun 07 '23 at 12:12

1 Answers1

3

One way is to separate out your data into starch and not starch and plot them as separate geoms:

library(tidyverse)

starch_dat <- filter(dat, Substrate == "Starch") |> 
  select(-Substrate)
no_starch_dat <- filter(dat, Substrate != "Starch") 

ggplot() +
  geom_line(data = no_starch_dat,
            mapping = aes(x = Time,
                          y = OD,
                          colour = Substrate)) +
  geom_line(data = starch_dat,
            mapping = aes(x = Time,
                          y = OD,
                          colour = "Starch")) +
  facet_wrap(~Substrate)

line chart

If you want points etc, you'd plot two geoms for each that you want.

nrennie
  • 1,877
  • 1
  • 4
  • 14