我想要在同一图上包含数据中所有三个时间点的箱线图
数据:
df<-
structure(list(ID = c("ED_001", "ED_002", "ED_003", "ED_004", 
"ED_005"), Color = c("Black", "White", "Black", "Black", "White"
), Data_t1 = c(150, 159, 160, 154, 187), Data_t2 = c(123, 124, 
125, 126, 140), Data_t3 = c(133, 135, 145, 150, 153)), class = c("spec_tbl_df", 
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -5L), spec = structure(list(
    cols = list(ID = structure(list(), class = c("collector_character", 
    "collector")), Color = structure(list(), class = c("collector_character", 
    "collector")), Data_t1 = structure(list(), class = c("collector_double", 
    "collector")), Data_t2 = structure(list(), class = c("collector_double", 
    "collector")), Data_t3 = structure(list(), class = c("collector_double", 
    "collector"))), default = structure(list(), class = c("collector_guess", 
    "collector")), skip = 1), class = "col_spec"))
Run Code Online (Sandbox Code Playgroud)
我可以很容易地绘制第一个时间点:
df  %>% 
 ggplot(. , aes(x = as.factor(Color), y = Data_t1)) + 
    geom_boxplot()
Run Code Online (Sandbox Code Playgroud)
但如何绘制 Data_t2 和 Data_t3 呢?我认为facet_wrap不是正确的方法。我是否按时间点进行分组?如果是,如何分组?如果可能的话,我更喜欢 dplyr 解决方案,而不是将数据融合为长格式,因为我总是对长格式感到困惑。谢谢
看起来您\xe2\x80\x99已经注意到,如果\xe2\x80\x99采用长格式,则\xe2\x80\x99最容易处理数据。这里\xe2\x80\x99s 的方法是tidyr. 然后我使用一个方面来分隔不同的组。您使用哪个方面取决于您想要如何比较它们。
library(tidyverse)\ndf  %>% \n pivot_longer(starts_with("Data")) %>%\n ggplot(. , aes(y = value, x= Color, group = Color)) + \n  geom_boxplot() +\n  facet_grid(~name)\nRun Code Online (Sandbox Code Playgroud)\n
如果您确实希望它们全部位于同一图上而没有小面,则可以创建一个虚拟变量。您可以尝试使用factors 来按照您希望的方式对它们进行排序。
df  %>% \n pivot_longer(starts_with("Data")) %>%\n mutate(group_var = paste0(name, " - ", Color)) %>%\n ggplot(. , aes(y = value, x= group_var, group = group_var)) + \n    geom_boxplot()\nRun Code Online (Sandbox Code Playgroud)\n
由reprex 包于 2022 年 1 月 14 日创建(v2.0.1)
\n|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           590 次  |  
        
|   最近记录:  |