0

I'm trying to plot data from a study with three within-subjects (test item, frame, sample size) variables in ggplot. I have summarised and plotted test item on the x axis and have separate lines for sample size and have used facet_grid to separate the two frame conditions. The summarised this data to create within-subjects 95% CI error bars. I'd also like to underlay individual participant's lines. All the advice I have found so far doesn't explain how to plot individual and grouped data when you have facetted the data. Everything I have tried looks messy and doesn't clearly show individual's curves/lines.

Is there a way to do this?

I've considered splitting the data by the facetted conditions and plotting separately but if there is an easier way I would like to find it!

Here's a some of the data:

human_exp1 <- structure(list(sample_size = structure(c(1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("2", "8", "20"), class = "factor"), 
    sampling_frame = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L), .Label = c("category", "property"), class = "factor"), 
    test_item = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 
    3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
    3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
    4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
    5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 
    6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
    3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 
    4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
    4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
    5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
    6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
    3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
    4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 
    5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 
    6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
    6L, 6L, 6L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 
    3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
    4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
    4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
    5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
    6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
    3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 
    4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 
    5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
    5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
    6L, 6L, 6L, 6L, 6L, 6L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 
    3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
    3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
    4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
    5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 
    6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L
    ), .Label = c("1", "2", "3", "4", "5", "6"), class = "factor"), 
    id = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 
    11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 1L, 2L, 3L, 
    4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 
    17L, 18L, 19L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 
    12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 1L, 2L, 3L, 4L, 5L, 
    6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 
    19L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 
    14L, 15L, 16L, 17L, 18L, 19L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 
    8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 
    1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 
    15L, 16L, 17L, 18L, 19L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 
    9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 1L, 
    2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 
    15L, 16L, 17L, 18L, 19L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 
    9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 1L, 
    2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 
    15L, 16L, 17L, 18L, 19L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 
    9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 1L, 
    2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 
    15L, 16L, 17L, 18L, 19L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 
    9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 1L, 
    2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 
    15L, 16L, 17L, 18L, 19L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 
    9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 1L, 
    2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 
    15L, 16L, 17L, 18L, 19L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 
    9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 1L, 
    2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 
    15L, 16L, 17L, 18L, 19L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 
    9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 1L, 
    2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 
    15L, 16L, 17L, 18L, 19L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 
    9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 1L, 
    2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 
    15L, 16L, 17L, 18L, 19L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 
    9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 1L, 
    2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 
    15L, 16L, 17L, 18L, 19L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 
    9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 1L, 
    2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 
    15L, 16L, 17L, 18L, 19L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 
    9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 1L, 
    2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 
    15L, 16L, 17L, 18L, 19L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 
    9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 1L, 
    2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 
    15L, 16L, 17L, 18L, 19L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 
    9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 1L, 
    2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 
    15L, 16L, 17L, 18L, 19L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 
    9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 1L, 
    2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 
    15L, 16L, 17L, 18L, 19L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 
    9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L), .Label = c("1", 
    "2", "3", "4", "6", "7", "8", "9", "10", "11", "12", "13", 
    "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", 
    "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", 
    "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", 
    "44", "45", "46", "47", "48", "49", "50", "85", "86", "87", 
    "88", "89", "90", "91", "92", "93", "94", "95", "96"), class = "factor"), 
    response = c(0.75, 0.25, 0.4, 0.5, 0.3, 0.55, 0.65, 0.4, 
    0.3, 0.5, 0, 0.15, 0.65, 0.65, 0.5, 0.65, 0.8, 0.65, 0.65, 
    0.75, 0.15, 0.35, 0.6, 0.15, 0.3, 0.5, 0.1, 0.3, 0.5, 0, 
    0.25, 0.45, 0.75, 0.7, 0.45, 0.65, 0.75, 0.75, 0.3, 0.1, 
    0.25, 0.15, 0.2, 0.3, 0.35, 0.05, 0.3, 0.5, 0, 0.15, 0.5, 
    0.1, 0.35, 0.25, 0.5, 0.5, 0, 0.25, 0, 0.3, 0.1, 0.15, 0.35, 
    0.2, 0, 0.3, 0.5, 0, 0.1, 0.5, 0, 0.3, 0.1, 0.7, 0.45, 0, 
    0.25, 0, 0.35, 0.1, 0.15, 0.3, 0.1, 0, 0.2, 0.25, 0, 0.1, 
    0.5, 0, 0.15, 0.3, 0.7, 0.4, 0, 0.05, 0.1, 0.3, 0.1, 0, 0.3, 
    0.05, 0, 0.25, 0.25, 0, 0.15, 0.5, 0, 0.1, 0, 0.75, 0.6, 
    0, 0.75, 0.3, 0.9, 0.3, 0.2, 0.95, 0.6, 0.7, 0.6, 0.5, 0, 
    0, 0.5, 0.9, 0.8, 0.9, 0.75, 0.7, 0.8, 0.5, 0.25, 0.1, 0.05, 
    0, 0.65, 0.5, 0.3, 0.8, 0.5, 0, 0, 0.5, 0.4, 0.85, 0.5, 0.55, 
    0.55, 0.35, 0.3, 0.2, 0.15, 0.05, 0, 0.3, 0.15, 0.05, 0.45, 
    0.5, 0, 0, 0.5, 0.45, 0.55, 0.3, 0.35, 0.4, 0.3, 0.15, 0.2, 
    0.15, 0, 0, 0.3, 0.1, 0, 0.3, 0.5, 0, 0, 0.5, 0.35, 0.35, 
    0.25, 0.3, 0.5, 0.35, 0.05, 0.2, 0, 0, 0.05, 0.3, 0.05, 0, 
    0.3, 0.5, 0, 0, 0.5, 0, 0.55, 0, 0.3, 0.35, 0.2, 0.1, 0.2, 
    0, 0, 0, 0.3, 0.05, 0, 0.25, 0.5, 0, 0, 0.5, 0, 0.55, 0, 
    0.25, 0.5, 0.25, 0.8, 0.4, 0.75, 0.7, 0.45, 0.95, 0.85, 0.55, 
    0.7, 0.5, 0, 0.5, 0.8, 0.8, 0.95, 1, 0.8, 0.7, 1, 0.9, 0.2, 
    0.7, 0.75, 0.25, 0.7, 0.6, 1, 0.7, 0.5, 0, 1, 0.8, 0.9, 0.8, 
    0.75, 0.8, 0.85, 1, 0.25, 0.1, 0.2, 0.15, 0.25, 0.6, 0.2, 
    0, 0.45, 0.5, 0, 0.5, 0.7, 0.35, 0.45, 0.25, 0.75, 0.4, 0.2, 
    0.1, 0.15, 0.65, 0.1, 0.2, 0.55, 0.05, 0, 0.4, 0.5, 0, 0.5, 
    0.6, 0.35, 0.35, 0, 0.7, 0.45, 0, 0.1, 0.15, 0.15, 0.15, 
    0.05, 0.55, 0, 0, 0.35, 0.25, 0, 0.5, 0.55, 0.35, 0.2, 0, 
    0.8, 0.45, 0, 0.05, 0, 0.6, 0.25, 0.1, 0.5, 0, 0, 0.35, 0.25, 
    0, 0.5, 0.45, 0.35, 0.2, 0, 0.75, 0.4, 0.1, 0.9, 0.5, 0.95, 
    0.55, 0.4, 1, 0.65, 0.75, 0.6, 0.5, 0, 0.5, 0.75, 0.85, 0.95, 
    0.9, 0.6, 0.85, 0.75, 0.5, 0.5, 0.95, 0.3, 0.3, 0.55, 0.45, 
    0.35, 0.9, 0.5, 0, 0, 0.25, 0.65, 0.9, 0.25, 0.75, 0.65, 
    0.25, 0.2, 0.2, 0.1, 0.05, 0, 0.1, 0.15, 0.05, 0.4, 0.5, 
    0, 0, 0.45, 0.4, 0.55, 0.1, 0.5, 0.5, 0.2, 0.1, 0.2, 0.4, 
    0, 0, 0.1, 0.05, 0, 0.2, 0.5, 0, 0, 0.35, 0.35, 0.55, 0.1, 
    0.35, 0.4, 0.15, 0.1, 0.2, 0, 0, 0, 0.05, 0, 0, 0.2, 0.5, 
    0, 0, 0.15, 0, 0.55, 0, 0.2, 0.45, 0.15, 0.05, 0.25, 0, 0, 
    0, 0.05, 0, 0, 0.2, 0.5, 0, 0, 0.3, 0, 0.55, 0, 0.3, 0.35, 
    0.05, 0.8, 0.15, 0.8, 0.8, 0.75, 1, 0.7, 0.5, 0.95, 0.5, 
    0, 0.5, 0.9, 0.85, 1, 1, 1, 0.8, 1, 1, 0.15, 0.75, 0.8, 0.4, 
    1, 0.5, 1, 0.85, 0.5, 0, 1, 0.85, 1, 0.85, 0.9, 0.9, 0.85, 
    1, 0.1, 0, 0.25, 0.3, 0.4, 0.65, 0, 0, 0.6, 0.5, 0, 0, 0.75, 
    0.65, 0.65, 0.45, 0.7, 0.5, 0, 0.1, 0, 0.2, 0.3, 0.4, 1, 
    0, 0, 0.6, 0.5, 0, 0, 0.7, 0.35, 0.55, 0, 0.85, 0.3, 0, 0.1, 
    0, 0.25, 0.25, 0.1, 0.65, 0, 0, 0.65, 0.25, 0, 0, 0.65, 0.35, 
    0.3, 0.05, 0.85, 0.3, 0, 0.05, 0, 0.15, 0.25, 0.1, 0.5, 0, 
    0, 0.45, 0.25, 0, 0, 0.6, 0.35, 0.3, 0, 0.65, 0.25, 0, 0.95, 
    0.6, 1, 0.75, 0.65, 0.5, 0.55, 0.9, 0.8, 0.5, 0, 1, 0.9, 
    0.95, 1, 0.95, 0.5, 0.85, 0.8, 0.5, 0.55, 0.95, 0.45, 0.55, 
    0.5, 0.4, 0.35, 0.8, 0.5, 0, 0, 0.35, 0.65, 1, 0.45, 0.5, 
    0.55, 0.25, 0.15, 0.3, 0.25, 0.15, 0, 0, 0, 0, 0.35, 0.5, 
    0, 0, 0.4, 0.35, 0.5, 0.05, 0.25, 0.4, 0, 0.05, 0.2, 0.45, 
    0, 0, 0, 0, 0, 0.25, 0.5, 0, 0, 0.3, 0.35, 0.5, 0, 0, 0.35, 
    0, 0.05, 0.25, 0, 0, 0, 0, 0, 0, 0.15, 0.5, 0, 0, 0.15, 0, 
    0.5, 0, 0, 0.3, 0, 0.05, 0.25, 0, 0, 0, 0, 0, 0, 0.2, 0.5, 
    0, 0, 0.15, 0, 0.5, 0, 0, 0.35, 0)), row.names = c(NA, -684L
), class = c("tbl_df", "tbl", "data.frame"))

I used summarySEwithin to summarise the data:

within <- Rmisc::summarySEwithin(data = human_exp1, measurevar = "response",
                                 withinvars = c("sample_size", "sampling_frame", "test_item"),
                                 idvar = "id")

I used the summarised data to plot the group means in ggplot. Particularly so I could compute within-ss confidence intervals for the means.

pd <- position_dodge(0.1) 

ggplot(within, aes(x=test_item, y=response, colour=factor(sample_size), group=factor(sample_size)))+
  geom_point(position=pd, size=5)+
  geom_line(position=pd, size = .8)+ 
  facet_grid(cols = vars(sampling_frame))+ 
  geom_errorbar(aes(ymin=response-ci, ymax=response+ci), width=1, position=pd, size=1)+
  ylim(0, 1)+
  theme_bw()+
  scale_x_discrete(
    breaks=c("1","2","3", "4", "5", "6"),
    labels=c("S1", "S2", "T1", "T2", "T3", "T4")
  )+
  # theme(legend.position = c(.9, .85))+
  labs(x = "Test Item", y = "Generalisation Response")

I then summarised the data and grouped by all the grouping variables including id


gd <- human %>% 
  group_by(id, test_item, sample_size, sampling_frame) %>% 
  summarise(response = mean(response))%>%
  ungroup()

gd

I then tried many different versions of geom_line() with the gd summarised data to add individual lines.

Any help would be much appreciated. I would like the individual lines to appear as faint grey lines behind the group mean lines.

Here is what I have with the within-subjects grouped data

enter image description here

Here is what I get when I try to add individual lines with geom_line(data = human, aes(x=test_item, y=response, group=id))

enter image description here

Con Des
  • 359
  • 1
  • 2
  • 9
  • Maybe also post what you have so far, and what you don't like about it. "Looks messy" is very subjective. You will only get technical help here, like "How do I achieve X using ggplot2?". Questions like "Please make my data look good, everything I tried looks bad." are a bad fit. – ziggystar Jun 24 '21 at 06:15
  • I don't understand why group by `id`. Can you post the code you have tried and explain better, like @ziggystar says? – Rui Barradas Jun 24 '21 at 06:29
  • @ziggystar I have added what I have so far. I clearly wasn't asking to make my data look good and the post clearly is asking "How do I achieve X using ggplot". – Con Des Jun 24 '21 at 08:05
  • @RuiBarradas posted. What is the issue with grouping by ```id```? – Con Des Jun 24 '21 at 08:07
  • It would also help to post an image of what you have. An image together with your last paragraph is something that lets people quickly understand the problem. Then they can look at your code, in case they are interested to help. Also make sure your code is complete. You are missing some variable names (name of the data), also `pd` is missing. Here I stopped trying to run it. Your question is currently a lot of work even understanding what's going on. Best thing would be one self-contained runnable block of code. Then post the image, then tell what you want to have different. – ziggystar Jun 24 '21 at 09:21
  • @ziggystar Thanks. I have edited the post to include more information posted images. What I would like is to show each individual participant's line/curve (like for the grouped data) in faint grey in the background. – Con Des Jun 24 '21 at 22:55
  • If I do `human %>% ggplot(aes(x=test_item, y=response, group=id, color=id)) + geom_line()` on your data, what comes out looks good to me. But I cannot facet anything, as there is only one `sampling_frame` and only one `sample_size`. Also some `id`s have no value for `test_item` 3, which might be ok. But there are also no items 4-6 at all. – ziggystar Jun 25 '21 at 08:09
  • This means your data cannot be used to reproduce your problem. Can you please post one working block of code that outputs a figure close to what you want? As I understand, you want the last figure with correct individual lines in faint gray? Then post data and code that produces the last figure. – ziggystar Jun 25 '21 at 08:16
  • @ziggystar Thanks. When you say what comes out looks good to me, what do you mean? – Con Des Jun 25 '21 at 22:22
  • @ziggystar My bad. I have now included a subset of the data from 20 participants so all the factor levels are represented. – Con Des Jun 25 '21 at 22:56
  • Perhaps what I want to do is not possible. – Con Des Jun 25 '21 at 23:09
  • @ConDes Maybe you also want to facet by `sample_size`? Because if we use `id` as group, `sampling_frame` as facet and `test_item_id` as x, then we have multiple rows for each point, which makes a mess. Try to plot the individuals by also facet over `sample_size`, then it looks nice: `human_exp1 %>% ggplot(aes(x=test_item, y=response, group=id, color=id)) + geom_line(position=position_jitter(0.1)) + facet_grid(sample_size ~ sampling_frame)`. Or maybe color by `sample_size`? – ziggystar Jun 28 '21 at 07:32

2 Answers2

1

Is this what you want? I grouped the individual lines by both id and sample_size to get single lines:

ggplot(within, aes(x=test_item, y=response, colour=factor(sample_size), group=factor(sample_size)))+
  geom_point(position=pd, size=5)+
  geom_line(position=pd, size = .8)+ 
  facet_grid(cols = vars(sampling_frame))+ 
  geom_errorbar(aes(ymin=response-ci, ymax=response+ci), width=1, position=pd, size=1)+
  ylim(0, 1)+
  theme_bw()+
  scale_x_discrete(
    breaks=c("1","2","3", "4", "5", "6"),
    labels=c("S1", "S2", "T1", "T2", "T3", "T4")
  )+
  # theme(legend.position = c(.9, .85))+
  labs(x = "Test Item", y = "Generalisation Response")  + 
  geom_line(data=human_exp1, alpha=0.2, color="black", aes(x=test_item, Y=response, group=interaction(id,sample_size)))

enter image description here

ziggystar
  • 28,410
  • 9
  • 72
  • 124
  • 1
    @ConDes Tip for the future: If you have problems with grouping for line plot (happens frequently), then `filter` down your data until you have only data for one line (`group`/`color`). Then instead of plotting, look at the filtered data and check whether this is what you expect. In this case, I found multiple points with same `x`, but different `sample_size`. This was the problem. Also if this solves your problem, please accept the answer. – ziggystar Jul 05 '21 at 06:45
0

Is this what you are lookong for?

library(dplyr)
library(ggplot2)

within %>%
  ungroup() %>%
  group_by(test_item, sample_size) %>%
  summarise(mean = mean(response), ci = sd(response)) -> smry
  
pd <- "jitter"
ggplot(within, aes(x = test_item, y = response)) +
  geom_point(aes(colour = sample_size), position = pd) +
  geom_errorbar(
    data = smry,
    mapping = aes(y = mean, ymin = mean - ci, ymax = mean + ci), 
    size = 1
  )+
  facet_grid(cols = vars(sampling_frame)) + 
  ylim(0, 1) +
  scale_x_discrete(
    breaks = c("1","2","3", "4", "5", "6"),
    labels = c("S1", "S2", "T1", "T2", "T3", "T4")
  ) +
  labs(x = "Test Item", y = "Generalisation Response") +
  theme_bw()
  # theme(legend.position = c(.9, .85))+
Rui Barradas
  • 70,273
  • 8
  • 34
  • 66
  • Thanks for this, but this is not what I am after. This post got me some of the way https://drsimonj.svbtle.com/plotting-individual-observations-and-group-means-with-ggplot2. But I think this doesn't work with my data because ```sampling_frame``` is facetted. – Con Des Jun 24 '21 at 22:58
  • I figured that I needed to use the unsummarised data to plot the lines for individual participants. – Con Des Jun 24 '21 at 22:59
  • @ConDes In the last `geom_line` of the question after the edit, try not to group by `id`. – Rui Barradas Jun 25 '21 at 04:03
  • Thanks. I have actually tried many different versions of this. None of them have worked. I get the same kind of figure as above. – Con Des Jun 25 '21 at 05:30