使用 ggplot 将多个变量同时组合在具有分类、均值和 sd 的纵向图中——可能是枢轴长

问题描述 投票:0回答:1

假设我在两个时刻测量了一些孩子的 6 种社交和情感技能,并且我对每个变量进行了单独的分类(低、平均和高)。现在我正在处理数据框中的 18 列。连续格式(z 分数结果)和分类格式(分类 - 低、平均和高)有 6 个主要变量(例如 SA、SM、SOCA、REL 和 Total),以及两个时间点( T1 和 T2)。数据集为宽格式

现在我想将所有内容绘制在一起,并有两个输出。首先,我使用构面换行的一个输出

接近这个(错误的):

(这是错误的,因为分类——低、平均和高)仅针对一个变量 (

profile_total
)。

以及所有行都在一起的输出。喜欢这个

部分 dput 在这里:

数据

df2 = structure(list(profile_self_awareness = c("average", "average", 
"average", "average", "average", "average", "high", "average", 
"average", "average", "average", "average", "average", "average", 
"average", "average", "average", "average", "average", "average", 
"average", "average", "average", "average", "high", "average", 
"average", "average", "average", "average", "average", "average", 
"average", "average", "high", "average", "average", "average", 
"average", "average"), profile_self_management = c("average", 
"low", "average", "average", "low", "average", "high", "average", 
"average", "average", "average", "average", "average", "average", 
"average", "average", "average", "average", "average", "average", 
"average", "average", "average", "average", "high", "average", 
"average", "average", "average", "average", "average", "average", 
"average", "average", "high", "average", "average", "average", 
"average", "average"), profile_social_awareness = c("average", 
"average", "average", "average", "low", "average", "average", 
"low", "average", "average", "average", "average", "average", 
"average", "average", "average", "average", "average", "average", 
"average", "low", "average", "average", "average", "average", 
"average", "average", "average", "average", "average", "average", 
"average", "average", "average", "average", "average", "average", 
"average", "average", "average"), profile_relationship = c("average", 
"low", "average", "average", "average", "low", "high", "average", 
"high", "average", "average", "average", "average", "average", 
"average", "average", "average", "average", "average", "average", 
"low", "average", "average", "average", "high", "average", "average", 
"average", "average", "average", "average", "average", "average", 
"average", "high", "average", "average", "average", "average", 
"average"), profile_responsbile = c("average", "low", "average", 
"average", "low", "average", "high", "average", "high", "average", 
"average", "average", "average", "average", "average", "average", 
"average", "average", "average", "average", "average", "average", 
"average", "average", "high", "average", "average", "average", 
"average", "average", "average", "average", "average", "average", 
"high", "average", "average", "average", "average", "average"
), profile_total = c("average", "low", "average", "average", 
"average", "average", "high", "average", "high", "average", "average", 
"average", "average", "average", "average", "average", "average", 
"average", "average", "average", "low", "average", "average", 
"average", "high", "average", "average", "average", "average", 
"average", "average", "average", "average", "average", "high", 
"average", "average", "average", "average", "average"), `Self-awareness (total)_zscore_t1` = structure(c(-0.586884313101275, 
-0.314854576777207, 1.3173238411672, -0.314854576777207, 0.501234632194997, 
0.501234632194997, 1.58935357749127, 0.229204895870929, 1.3173238411672, 
0.229204895870929, 0.501234632194997, 1.3173238411672, 0.501234632194997, 
0.773264368519065, 1.3173238411672, 0.501234632194997, -0.314854576777207, 
-0.858914049425343, -0.858914049425343, -0.858914049425343, -0.0428248404531391, 
-0.586884313101275, 1.04529410484313, 0.773264368519065, 1.58935357749127, 
-0.0428248404531391, 0.501234632194997, 1.04529410484313, 0.229204895870929, 
1.04529410484313, -0.0428248404531391, 0.773264368519065, -0.858914049425343, 
-0.858914049425343, 1.58935357749127, 0.773264368519065, -1.13094378574941, 
1.04529410484313, 0.229204895870929, -0.0428248404531391), "`scaled:center`" = 14.1574270557029, "`scaled:scale`" = 3.67606870305055, dim = c(40L, 
1L)), `Self-awareness (total)_zscore_t2` = structure(c(-0.599928625867865, 
-0.599928625867865, 0.738851296023554, -0.332172641489581, -1.13544059462443, 
-0.867684610246149, 0.738851296023554, 0.203339327266987, 1.54211924915841, 
0.47109531164527, 1.27436326478012, 1.00660728040184, 0.47109531164527, 
0.738851296023554, 1.27436326478012, -0.0644166571112974, -0.867684610246149, 
0.203339327266987, 0.203339327266987, -1.670952563381, -1.13544059462443, 
-0.599928625867865, 1.27436326478012, -0.0644166571112974, 1.54211924915841, 
-0.867684610246149, -1.13544059462443, 1.54211924915841, 0.738851296023554, 
0.738851296023554, -0.332172641489581, 1.27436326478012, -1.13544059462443, 
-0.599928625867865, 1.27436326478012, 0.203339327266987, -0.0644166571112974, 
0.203339327266987, -0.0644166571112974, -0.599928625867865), "`scaled:center`" = 14.2405797101449, "`scaled:scale`" = 3.73474379040286, dim = c(40L, 
1L)), `Self-Management (total)_zscore_t1` = structure(c(0.663508256527916, 
-2.36865638948498, 1.2699411857305, -0.397749369576599, -1.91383169258305, 
-1.45900699568111, 2.48280704413566, -1.00418229877918, 1.2699411857305, 
0.208683559625981, 0.815116488828561, 1.2699411857305, 0.815116488828561, 
0.815116488828561, -0.246141137275954, 0.663508256527916, -0.246141137275954, 
-1.15579053107982, 0.360291791926626, -0.246141137275954, -1.00418229877918, 
-0.700965834177889, 0.663508256527916, 0.966724721129206, 2.02798234723372, 
-0.0945329049753089, 0.208683559625981, 0.208683559625981, -0.549357601877244, 
0.663508256527916, -0.0945329049753089, 0.208683559625981, 0.360291791926626, 
0.511900024227271, 1.72476588263243, 1.2699411857305, 0.057075327325336, 
0.815116488828561, 1.2699411857305, 0.208683559625981), "`scaled:center`" = 28.6235341151386, "`scaled:scale`" = 6.59594789032934, dim = c(40L, 
1L)), `Self-Management (total)_zscore_t2` = structure(c(-0.733319754058991, 
-2.53755178724211, 0.469501601396422, 0.920559609692202, -1.9361411095144, 
-0.131909076331284, -0.883672423490917, -0.883672423490917, 1.97302829571569, 
0.319148931964496, 1.37161761798798, 0.319148931964496, 0.469501601396422, 
0.619854270828349, 1.67232295685184, 1.82267562628376, 0.469501601396422, 
-0.131909076331284, 0.469501601396422, -2.38719911781018, -1.48508310121862, 
0.168796262532569, 1.52197028741991, -0.131909076331284, 2.42408630401147, 
-0.582967084627064, -0.432614415195137, -1.03402509292284, -0.131909076331284, 
-0.432614415195137, 0.0184435931006426, 0.619854270828349, -0.883672423490917, 
-0.282261745763211, 1.67232295685184, 0.619854270828349, -0.582967084627064, 
1.82267562628376, 0.920559609692202, 0.619854270828349), "`scaled:center`" = 28.8773311230833, "`scaled:scale`" = 6.65102923531902, dim = c(40L, 
1L)), `Social Awareness (total)_zscore_t1` = structure(c(0.588541785081397, 
-0.565012428107959, 0.588541785081397, -0.400218969080908, -2.04815355935142, 
-0.0706320510268063, 1.2477156211896, -1.88336010032437, 1.2477156211896, 
-0.0706320510268063, -0.565012428107959, -0.565012428107959, 
0.753335244108448, 0.258954867027295, -0.235425510053857, 0.423748326054346, 
-0.400218969080908, -1.05939280518911, -0.894599346162061, 0.0941614080002446, 
-1.88336010032437, -0.565012428107959, 1.08292216216255, -0.0706320510268063, 
1.2477156211896, -0.400218969080908, 1.41250908021665, 1.08292216216255, 
-0.0706320510268063, 0.918128703135499, -1.38897972324321, 1.08292216216255, 
-0.565012428107959, -0.235425510053857, 0.258954867027295, 0.753335244108448, 
-0.0706320510268063, 1.08292216216255, 0.753335244108448, 0.0941614080002446
), "`scaled:center`" = 28.4286095543101, "`scaled:scale`" = 6.06820201423073, dim = c(40L, 
1L)), `Social Awareness (total)_zscore_t2` = structure(c(0.415223252162562, 
-0.552580257562162, 0.899125007024924, -0.229979087653921, -2.81078844691985, 
-0.552580257562162, -0.0686785026998002, -1.52038376728689, 1.54432734684141, 
-0.713880842516283, 1.38302676188729, -0.552580257562162, -0.229979087653921, 
-0.0686785026998002, -0.875181427470404, 0.899125007024924, -0.0686785026998002, 
-0.552580257562162, -0.713880842516283, -2.48818727701161, -2.32688669205749, 
-0.713880842516283, 1.54432734684141, -0.875181427470404, 1.38302676188729, 
-0.229979087653921, -1.35908318233277, 1.06042559197904, -0.229979087653921, 
-0.229979087653921, -1.35908318233277, 0.253922667208441, -0.875181427470404, 
-0.0686785026998002, 0.576523837116682, -1.52038376728689, 0.253922667208441, 
0.576523837116682, 0.253922667208441, 0.253922667208441), "`scaled:center`" = 28.4257796257796, "`scaled:scale`" = 6.19960553946183, dim = c(40L, 
1L)), `Relationship Skills (total)_zscore_t1` = structure(c(0.780377922416048, 
-1.88648860822022, 0.632218670714033, -0.404896091200073, 0.0395816639059724, 
-1.73832935651821, 1.96565193603217, -0.553055342902088, 1.81749268433015, 
-0.404896091200073, -0.404896091200073, -0.553055342902088, 0.632218670714033, 
0.187740915607988, -0.108577587796043, 1.37301492922411, -0.404896091200073, 
-1.44201085311418, 0.187740915607988, 0.928537174118063, -1.88648860822022, 
-0.108577587796043, 1.07669642582008, 0.780377922416048, 1.96565193603217, 
0.0395816639059724, 1.22485567752209, -0.256736839498058, -0.701214594604103, 
0.632218670714033, -0.553055342902088, 0.0395816639059724, 0.484059419012018, 
-0.553055342902088, 1.81749268433015, 1.37301492922411, -1.29385160141216, 
1.07669642582008, 1.22485567752209, 0.484059419012018), "`scaled:center`" = 33.7328437917223, "`scaled:scale`" = 6.74949413224121, dim = c(40L, 
1L)), `Relationship Skills (total)_zscore_t2` = structure(c(0.205477449092768, 
-0.959841291895562, 0.351142291716309, 0.642471976963392, -2.12516003288389, 
-0.0858522361543147, -0.377181921401397, -1.54250066238973, 1.95345556057526, 
0.0598126064692266, 1.07946650483402, -0.522846764024939, -0.0858522361543147, 
1.3707961900811, 0.642471976963392, 1.22513134745756, -0.814176449272021, 
-0.231517078777856, -0.0858522361543147, -0.66851160664848, -1.97949519026035, 
-1.1055061345191, 0.933801662210474, 0.49680713433985, 1.80779071795172, 
-0.0858522361543147, -0.377181921401397, -0.377181921401397, 
-0.0858522361543147, -1.1055061345191, -0.814176449272021, 0.642471976963392, 
-0.377181921401397, 0.351142291716309, 1.51646103270464, -1.39683581976619, 
0.642471976963392, 1.51646103270464, 0.351142291716309, 0.49680713433985
), "`scaled:center`" = 33.5893819991705, "`scaled:scale`" = 6.86507452305713, dim = c(40L, 
1L)), `Responsible Decision-Making (total)_zscore_t1` = structure(c(1.0518956213287, 
-2.0258106653719, 1.22287930392318, -0.4869575220216, -1.85482698277742, 
-0.144990156832644, 2.24878139949005, -0.828924887210555, 1.90681403430109, 
0.367960890950789, 0.880911938734223, -0.4869575220216, 0.709928256139745, 
-0.657941204616077, -0.4869575220216, 0.538944573545267, -0.4869575220216, 
-0.4869575220216, -0.4869575220216, 0.196977208356312, -1.34187593499399, 
-0.828924887210555, 1.39386298651766, -0.4869575220216, 1.90681403430109, 
-0.657941204616077, 0.367960890950789, 0.538944573545267, -0.657941204616077, 
1.0518956213287, -0.828924887210555, 0.880911938734223, 0.538944573545267, 
-0.144990156832644, 1.56484666911213, 1.22287930392318, -0.828924887210555, 
0.538944573545267, 0.709928256139745, -0.657941204616077), "`scaled:center`" = 26.84797657082, "`scaled:scale`" = 5.84851130134857, dim = c(40L, 
1L)), `Responsible Decision-Making (total)_zscore_t2` = structure(c(-0.153371532658601, 
-2.3372624123534, 0.518594891862876, 0.0146200734717684, -2.67324562461414, 
-0.657346351049708, 0.182611679602137, -1.49730438170155, 1.86252774090583, 
0.518594891862876, 0.686586497993245, -0.153371532658601, 0.686586497993245, 
0.518594891862876, 0.854578104123614, 1.02256971025398, -0.825337957180077, 
0.518594891862876, -0.489354744919339, -1.49730438170155, -1.66529598783192, 
-0.489354744919339, 2.0305193470362, 0.854578104123614, 1.86252774090583, 
-0.153371532658601, -0.153371532658601, 0.0146200734717684, 0.182611679602137, 
-0.657346351049708, -0.657346351049708, 1.19056131638435, -0.489354744919339, 
0.350603285732506, 2.0305193470362, -0.32136313878897, 0.518594891862876, 
0.182611679602137, -0.153371532658601, -0.153371532658601), "`scaled:center`" = 26.9129714048902, "`scaled:scale`" = 5.95267836908444, dim = c(40L, 
1L)), `Overall total - children_zscore_t1` = structure(c(0.704962586111146, 
-1.83943304988991, 1.15638761830488, -0.485157953308703, -1.38800801769617, 
-0.85450570692176, 2.30546951843439, -1.05969890337346, 1.81300584695032, 
0.0483443574657117, 0.25353755391741, 0.130421636046391, 0.828078503982165, 
0.294576193207749, -0.0747715604053071, 0.869117143272504, -0.444119314018364, 
-1.22385346053482, -0.321003396147345, 0.130421636046391, -1.59320121414787, 
-0.649312510470062, 1.23846489688556, 0.458730750369108, 2.10027632198269, 
-0.279964756857005, 0.910155782562844, 0.540808028949787, -0.485157953308703, 
0.992233061143523, -0.731389789050741, 0.663923946820806, 0.0893829967560514, 
-0.238926117566666, 1.64885128978896, 1.32054217546624, -0.731389789050741, 
1.0743103397242, 1.0743103397242, 0.0483443574657117), "`scaled:center`" = 131.821979522184, "`scaled:scale`" = 24.3672796489477, dim = c(40L, 
1L)), `Overall total - children_zscore_t2` = structure(c(-0.161975714406081, 
-1.70865173077828, 0.670849832871257, 0.313924598323827, -2.58113563744978, 
-0.479242589559352, -0.201634073800239, -1.35172649623085, 2.09855077106098, 
0.115632801353032, 1.34504194257196, -0.0826589956177626, 0.274266238929668, 
0.750166551659575, 0.789824911053734, 1.26572522378364, -0.439584230165193, 
-0.0826589956177626, -0.161975714406081, -2.02591860593155, -2.06557696532571, 
-0.637876027135988, 1.70196717711939, 0.0759744419588731, 2.13820913045514, 
-0.399925870771034, -0.756851105318465, 0.115632801353032, 0.0363160825647142, 
-0.518900948953511, -0.756851105318465, 0.869141629842052, -0.836167824106782, 
-0.00334227682944478, 1.66230881772523, -0.637876027135988, 0.19494952014135, 
1.10709178620701, 0.353582957717986, 0.234607879535509), "`scaled:center`" = 132.08427672956, "`scaled:scale`" = 25.2153648127785, dim = c(40L, 
1L))), row.names = c(NA, -40L), class = c("tbl_df", "tbl", "data.frame"
))

情节

df2 %>%
  select(starts_with("profile_"),
         `Self-awareness (total)_zscore_t1`, `Self-awareness (total)_zscore_t2`,
         `Self-Management (total)_zscore_t1`, `Self-Management (total)_zscore_t2`,
         `Social Awareness (total)_zscore_t1`, `Social Awareness (total)_zscore_t2`,
         `Relationship Skills (total)_zscore_t1`, `Relationship Skills (total)_zscore_t2`,
         `Responsible Decision-Making (total)_zscore_t1`, `Responsible Decision-Making (total)_zscore_t2`,
         `Overall total - children_zscore_t1`, `Overall total - children_zscore_t2`
  ) %>%
  pivot_longer(`Self-awareness (total)_zscore_t1`:`Overall total - children_zscore_t2`)  %>%
  mutate(time = rep(c("t1","t2"),2400 /2)) %>%
  mutate(name = str_remove_all(name, "_zscore_t1")) %>%
  mutate(name = str_remove_all(name, "_zscore_t2")) %>%
  
  select(profile_total,name,value,time) %>%
  #filter(str_detect(name, "Overall total - ")) %>%
  
  ggplot(aes(x = time, y = value, group = profile_total, color = profile_total)) +
  
  stat_summary(fun.y = mean, geom = "line",size=1.0, aes(color = profile_total))+
  
  stat_summary(fun.data = mean_se, geom = "errorbar", width=.1) +
  
  geom_text(aes(label = after_stat(sprintf("%.1f", y))), stat = "summary", fun = "mean", show_guide=F, hjust = -.5, vjust = 1) +
  facet_wrap(~name)
r ggplot2 tidyverse visualization
1个回答
0
投票

如果我理解正确,您想根据每个变量的配置文件分类为该变量着色。

要实现这一目标,需要进行一些数据整理,将数据重塑为整齐的格式。作为第一步,我做了一些重命名,然后将数据分成两部分(配置文件和 z 分数),我分别对其进行旋转,并使用连接再次将其组合。

library(tidyverse)
library(janitor)

df2_tidy <- df2 %>%
  janitor::clean_names() |>
  rename_with(
    ~ gsub("^(.*?)_total_zscore_(.*)$", "zscore_\\1_\\2", .x),
    matches("zscore_")
  ) |>
  rename(
    zscore_overall_t1 = overall_total_children_zscore_t1,
    zscore_overall_t2 = overall_total_children_zscore_t2
  ) |>
  mutate(id = row_number())

df2_profile <- df2_tidy |>
  select(id, starts_with("profile")) |>
  pivot_longer(
    cols = -id,
    names_to = c(".value", "name"),
    names_pattern = c("^(profile)_(.*)$")
  ) |>
  mutate(
    name = recode(
      name,
      relationship = "relationship_skills",
      responsbile = "responsible_decision_making",
      total = "overall"
    )
  )

df2_zscore <- df2_tidy |>
  select(-starts_with("profile")) |>
  pivot_longer(
    cols = -id,
    names_to = c(".value", "name", "time"),
    names_pattern = c("^(zscore)_(.*)_(t1|t2)$")
  ) %>%
  mutate(
    zscore = as.numeric(zscore)
  )

df2_tidy <- df2_zscore |>
  left_join(
    df2_profile,
    by = c("id", "name")
  )

labels <- df2 |>
  select(-starts_with("profile")) |>
  names() |>
  gsub("\\(?total\\)?.*$", "", x = _) |>
  trimws() |>
  unique()

labels <- setNames(labels, janitor::make_clean_names(labels))

df2_tidy |>
  ggplot(aes(x = time, y = zscore, group = profile, color = profile)) +
  stat_summary(fun.y = mean, geom = "line", size = 1.0) +
  stat_summary(fun.data = mean_se, geom = "errorbar", width = .1) +
  geom_text(
    aes(
      label = after_stat(sprintf("%.1f", y)),
      hjust = after_stat(ifelse(x == 1, 1.5, -.5))
    ),
    stat = "summary", fun = "mean", show_guide = FALSE, vjust = .5
  ) +
  facet_wrap(~name, labeller = labeller(name = labels))

© www.soinside.com 2019 - 2024. All rights reserved.