0

So I am trying to create a line graph which shows scores pre and post intervention for a number of participants. However, the number of participants does not reflect the x axis scale. For example (see picture) the x-axis goes from 2 to 7. But, I want the x axis to only show the participants who completed the questionnaires. e.g. 2,3,5,7. Does anyone know how this can be done? my code is as follows: enter image description here

ggplot(data = my_data, aes(x = Participant)) +
  geom_line(aes(y = PRE_QUIP_RS, colour = "PRE QUIP RS")) +
  geom_point(aes(y = PRE_QUIP_RS, colour = "PRE QUIP RS")) +
  geom_line(aes(y = POST_QUIP_RS, colour = "POST QUIP RS")) +
  geom_point(aes(y = POST_QUIP_RS, colour = "POST QUIP RS")) +
  scale_colour_manual("", 
                      breaks = c("PRE QUIP RS", "POST QUIP RS"),
                      values = c("blue", "orange")) +
  xlab("Participants ") +
  scale_y_continuous("QUIP RS Scores", limits = c(0,30)) + 
  labs(title="Pre and Post QUIP RS Scores")

enter image description here

jay.sf
  • 60,139
  • 8
  • 53
  • 110
JacobHad
  • 33
  • 4
  • your data is not well structured for this. You need to restructure data to "long" format, then use `aes(group = participant)` to identify the line. Please provide a reproducible example and we can help. – Matt L. Sep 29 '22 at 20:48
  • Coerce the x axis variable to factor. Discrete variables are plotted consecutively. – Rui Barradas Sep 29 '22 at 21:03

1 Answers1

0

Coerce Participant to factor. Factors are internally coded as consecutive integers, so the main question is solved.

As for the repetition of code to plot the several columns, this sort of problem is usually a data reformating problem. See reshaping data.frame from wide to long format.

I have simplified the column names a bit.

suppressPackageStartupMessages({
  library(ggplot2)
  library(dplyr)
  library(tidyr)
})

set.seed(2022)
Participant <- c(2,3,5,7)
PRE <- sample(20:30, 4)
POST <- sample(10:20, 4)
my_data <- data.frame(Participant, PRE, POST)

my_data %>%
  pivot_longer(-Participant) %>%
  mutate(Participant = factor(Participant)) %>%
  ggplot(aes(x = Participant, value, color = name, group = name)) +
  geom_line() +
  geom_point() +
  scale_colour_manual("", 
                      breaks = c("PRE", "POST"),
                      values = c("blue", "orange")) +
  xlab("Participants") +
  scale_y_continuous("QUIP RS Scores", limits = c(0,30)) + 
  labs(title="Pre and Post QUIP RS Scores")

Created on 2022-09-29 with reprex v2.0.2

Rui Barradas
  • 70,273
  • 8
  • 34
  • 66