1

我正在尝试创建一个如下图所示的图,但是在涉及多个 x 轴时我真的很挣扎。任何帮助,将不胜感激。提供的图的示例代码。

示例图:
示例图

df <- data.frame(Time=c(" ","Phase 1","Phase 1","Phase 1","Phase 1"," ",
                            " ","Phase 2","Phase 2","Phase 2","Phase 2"," "),
                 Condition=c("BO", "BO", "BO", "BO","BO","BO", 
                        "OB","OB","OB","OB","OB","OB"), 
                 Phase=c("Baseline", "T1", "T2", "T1", "T2", "Follow-Up"),
                 Change=c(0,-2.84, -5.02, -6.81,-7.41,-6.80, 0, -3.35,-6.92,-7.05,-6.59,-6.41))

尝试按照此处提供的代码。但并没有走多远。

4

1 回答 1

0

这是一个建议:

library(tidyverse)
library(grid)
library(ggthemes)

# data preparation
df1 <- df %>% 
    mutate(Phase = as_factor(Phase)) %>% 
    group_by(id_Group = cumsum(Phase=="Baseline")) %>% 
    mutate(id = row_number()) %>% 
    mutate(Time = paste("Phase", id_Group, sep = " ")) %>% 
    ungroup() 

# plot

# vector for labels
label_x <- c("Baseline", "T1", "T2", "T1", "T2", "Follow-Up")

# textGrob
phase1 <- textGrob("Phase 1", gp=gpar(fontsize=13, fontface="bold"))
phase2 <- textGrob("Phase 2", gp=gpar(fontsize=13, fontface="bold"))

# plot
ggplot(df1, aes(x=factor(id), y=Change, colour=Condition, group=Condition)) +
    geom_line(size=1 ) +    
    scale_x_discrete(breaks = 1:6, labels= label_x) +
    theme_economist_white(gray_bg = FALSE) +
    theme(plot.margin = unit(c(1,1,2,1), "lines")) +
    annotation_custom(phase1,xmin=2,xmax=3,ymin=-8.2,ymax=-8.2) + 
    annotation_custom(phase2,xmin=4,xmax=5,ymin=-8.2,ymax=-8.2) +
    coord_cartesian(clip = "off")


在此处输入图像描述

于 2021-08-07T07:59:27.340 回答