带有连接各个 daa 点的线的箱线图

Boxplot with lines connecting individual daa points

我想制作一个箱线图,其中我正在调查的两个条件下的个人数据点在每个度量值内连接,即 LN1__00、LN2__00 等。但是,我有很难做到这一点。

这是一些示例代码和情节图...

LN1__00 <- c(5.5,2.5,4.5,3.0,5.5,11.5)
LN2__00 <- c(9.5,9.5,5.5,7.0,11.5,17.5)
LN3__00 <- c(26.5,42.5,40.5,18.0,27.5,32.5)
condition <- c("1","2","1","2","1","2")
PB_ID <- c("A","A","B","B","C","C")

Sleepstages_Lat <- data.frame(LN1__00,LN2__00,LN3__00,condition,PB_ID)

Sleepstages_Lat2 <- melt(Sleepstages_Lat, id.vars = c("PB_ID", "condition"))

# PLOT
plottitle = "Conditions"
subtitle = "Sleep (Stage) Latencies"

# define some stuff
colour_datapoints = "gray45" # gray45
shape_datapoints = 1
size_datapoints = 2
stroke_datapoints = 1 # thickness of circles

margins = unit(c(1, 8, 1, 1), 'lines')
p <- ggplot (Sleepstages_Lat2, aes(x = variable, 
                               y=value, 
                               fill = condition))
p <- p + geom_boxplot(outlier.shape = NA, 
                  alpha = 0.9, 
                  colour="black", 
                  notch = F)+ 
geom_point(shape = shape_datapoints, 
          size = size_datapoints, 
          colour = colour_datapoints, 
          stroke = stroke_datapoints,
         position = position_jitterdodge(jitter.width = 0.1, dodge.width = 0.7))+
geom_line(aes(group = interaction(PB_ID, variable)), alpha = 0.6, colour = "black", data = Sleepstages_Lat2,
        position = position_jitterdodge(dodge.width = 0.7))+
theme_bw()+
coord_flip()
p

我知道有几个讨论这个话题,但我找不到正确的答案。

这并不是您所描述问题的真正解决方案,但如果适合您的情况,它可能是解决问题的方法。如果您显式组合变量和条件,则可以避免使用任何位置躲避。

LN1__00 <- c(5.5,2.5,4.5,3.0,5.5,11.5)
LN2__00 <- c(9.5,9.5,5.5,7.0,11.5,17.5)
LN3__00 <- c(26.5,42.5,40.5,18.0,27.5,32.5)
condition <- c("1","2","1","2","1","2")
PB_ID <- c("A","A","B","B","C","C")

Sleepstages_Lat <- data.frame(LN1__00,LN2__00,LN3__00,condition,PB_ID)

Sleepstages_Lat2 <- reshape2::melt(Sleepstages_Lat, id.vars = c("PB_ID", "condition"))

Sleepstages_Lat2 = Sleepstages_Lat2 %>%
  unite(test, c(variable,condition), sep = "_", remove = "FALSE")

p  <- ggplot (Sleepstages_Lat2, aes(x = test, y = value, fill = condition)) +
        geom_boxplot(outlier.shape = NA) + 
        geom_point() +
        geom_line(aes(group = interaction(PB_ID, variable)))+
        theme_bw() +
        coord_flip()
p

这段代码可以满足我的需要...

LN1__00 <- c(5.5,2.5,4.5,3.0,5.5,11.5)
LN2__00 <- c(9.5,9.5,5.5,7.0,11.5,17.5)
LN3__00 <- c(26.5,42.5,40.5,18.0,27.5,32.5)
condition <- c("1","2","1","2","1","2")
PB_ID <- c("A","A","B","B","C","C")

Sleepstages_Lat <- data.frame(LN1__00,LN2__00,LN3__00,condition,PB_ID)

Sleepstages_Lat2 <- melt(Sleepstages_Lat, id.vars = c("PB_ID", "condition"))

Sleepstages_Lat2$var.cond = paste(Sleepstages_Lat2$variable, Sleepstages_Lat2$condition, sep = "_")

#create jitter
b1 <- runif(nrow(Sleepstages_Lat2), -0.2, -0.1)
b2 <- runif(nrow(Sleepstages_Lat2), 0.1, 0.2)
Sleepstages_Lat2$b_corr <- NA
for (i in 1:nrow(Sleepstages_Lat2)){
  if (Sleepstages_Lat2$condition[i] == 1){
Sleepstages_Lat2$b_corr[i] <- as.numeric(Sleepstages_Lat2$variable[i])+b1[i]
  }else{
Sleepstages_Lat2$b_corr[i] <- as.numeric(Sleepstages_Lat2$variable[i])+b2[i]
  }
}

# PLOT
plottitle = "Conditions"
subtitle = "Sleep (Stage) Latencies"

# define some stuff
colour_datapoints = "gray45" # gray45
shape_datapoints = 1
size_datapoints = 2
stroke_datapoints = 1 # thickness of circles

margins = unit(c(1, 8, 1, 1), 'lines')
p <- ggplot (Sleepstages_Lat2, aes(x = variable, 
                               y=value, 
                               fill = condition))
p <- p + geom_boxplot(outlier.shape = NA, 
                  alpha = 0.9, 
                  colour="black", 
                  notch = F)+ 
  geom_point(shape = shape_datapoints, 
          size = size_datapoints, 
          colour = colour_datapoints, 
          stroke = stroke_datapoints,
          aes(x = b_corr,
          group = var.cond))+
  geom_line(aes(x = b_corr, y = value, group=interaction(PB_ID, variable)), colour =     "gray68", show.legend = FALSE, linetype="dashed")+  
  theme_bw()+
  coord_flip()
p