0

I'd like to make a line plot for longitudinal data in a design with two groups. Since the group means range from 30-43 I want my plot to start at 28. Nevertheless, I want the scale of the y-axis to start at 0 and insert a break. I found the scale_y_break() function from ggbreak but sadly the output looks weird, since the y-axis ticks are not displayed until 28, there is a lot of spacing added between and a duplicate of the graph is visable.

Here is a reproducible example:

plotdata <- data.frame(
  Group = c("Intervention", "Intervention", "Intervention", "Control", "Control", "Control"),
  Mean = c(30, 35, 43, 31, 33, 34),
  Std_Error = c(0.66779, 0.91275, 1.11335, 0.73653, 0.82869, 0.91173),
  Timepoint = c("Baseline", "6 Weeks", "12 Weeks", "Baseline", "6 Weeks", "12 Weeks")
)

plotdata$Timepoint <- factor(plotdata$Timepoint, levels = c("Baseline", "6 Weeks", "12 Weeks"))

plot <- ggplot(plotdata, aes(x = Timepoint, y = Mean, color = Group, group = Group)) +
  geom_errorbar(aes(ymin = Mean - Std_Error, ymax = Mean + Std_Error), width = 0.1, size = 0.8,  color = "grey60") + 
  geom_line(linewidth = 1.8) +  
  geom_point(size = 2.5) +  
  labs(x = "Timepoint", y = "Outcome", title = "Trajectory") +
  scale_color_manual(values = c("Intervention" = "#D81A61", "Control" = "#1E88E5")) + 
  theme_bw() +  
  theme(
    axis.title.x = element_text(margin = margin(t = 15), face = "italic"),  
    axis.title.y = element_text(margin = margin(r = 15), face = "italic"), 
    axis.text.x = element_text(margin = margin(t = 5)),  
    panel.grid.major.x = element_blank(), 
    panel.grid.minor.x = element_blank(), 
    panel.border = element_blank(), 
    plot.title = element_text(size = 14, face = "bold")
  )

plot
plot +  scale_y_break(
  breaks = c(0, 28)
)  

And the outcome looks like this: Without scale break: enter image description here With scale break: enter image description here

Can Anyone help me out how to fix this? Thank you very much in advance!

1
  • I am unsure about the targetted output but would this code help you? plot + scale_y_continuous(breaks=seq(0, 45, 5), limits=c(0, 45)) Using scale_y_continuous to both fix limits and breaks Commented Nov 8, 2024 at 13:28

1 Answer 1

1

I would never do this, but if you must:

Set your scale_y to include the 0, 45 range and explicitly set the breaks to include 0 as follows

scale_y_continuous(limits = c(0, 45), breaks  = c(0, seq(25, 45, 5))) +

then use

plot +  scale_y_break(
  breaks = c(1, 28),
  scales = "fixed"
)    
1
  • Thank you really much, that did the job!
    – Lea
    Commented Nov 11, 2024 at 10:26

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.