首页 > 解决方案 > R:箱线图:在重复测量的情况下在每个主题之间画线

问题描述

我有数据,其中我在 4 个不同阶段对相同主题进行了测量。我的目标是制作一个图表,其中既有箱线图,也有每个主题的点,并用一条线连接每个阶段之间的每个主题。最终结果是将下面的两个图表组合成一个最终图表

library(ggplot2)
df_original = data.frame(study_id = c("id1", "id2", "id3", "id4", "id5", "id6", "id7", "id8", "id9", "id10"),
                val_stage1 = runif(10, 5.0, 6.0),
                val_stage2 = runif(10, 5.0, 6.5), 
                val_stage3 = runif(10, 4.7, 5.8), 
                val_stage4 = runif(10, 5.5, 7.0))
df_original
df_plot1 = data.frame(group = "stage1", value = df_original[, "val_stage1"], ID = df_original$study_id)
df_plot2 = data.frame(group = "stage2", value = df_original[, "val_stage2"], ID = df_original$study_id)
df_plot3 = data.frame(group = "stage3", value = df_original[, "val_stage3"], ID = df_original$study_id)
df_plot4 = data.frame(group = "stage4", value = df_original[, "val_stage4"], ID = df_original$study_id)

plot_data = rbind(df_plot1,
                       df_plot2,
                       df_plot3,
                       df_plot4)
ggplot(plot_data, aes(x=group, 
                      y=value, 
                      fill=group
                      )
       ) + 
geom_boxplot(outlier.shape = NA) +
  geom_point()

箱形图

library(lattice)
# source https://publicifsv.sund.ku.dk/~jufo/courses/rm2017/plotRrepeated.pdf
xyplot(value ~ group, group = ID, data = plot_data, type = "b")

阶段之间有线条的重复测量

标签: rggplot2plotboxplotlattice

解决方案


tidyverse 方法如下所示:

mylabs <- levels(plot_data$group)
library(tidyverse)
plot_data %>% 
ggplot(aes(x = as.numeric(group), y = value)) + 
  geom_boxplot(aes(group = group, fill = group), outlier.shape = NA) +
  geom_point(aes(color = ID)) +
  geom_line(aes(color = ID)) + 
  theme(legend.position = "none") + 
  labs(x = "Group") +
  scale_x_continuous(breaks = 1:4, labels = mylabs)

在此处输入图像描述


推荐阅读