R 如何翻转 facet_grid 行?

问题描述

我有以下情节,希望老年人排在底部,年轻人排在顶部。

enter image description here

数据:

structure(list( Gender = structure(c(1L,1L,2L,1L),.Label = c("Male","Female"),class = "factor"),Age = structure(c(2L,.Label = c("Younger","Older"),SleepDeprivation = structure(c(2L,2L),.Label = c("No","Yes"),ROI = structure(c(1L,.Label = "Right noradrenergic Bundle",FA = c(0.270336896,0.239859328,0.253058553,0.239136323,0.236547187,0.250703156,0.240607098,0.256228983,0.249909833,0.25690344,0.263866663,0.240790352,0.25867039,0.295251846,0.215813458,0.252566397,0.281900764,0.23559688,0.242475167,0.282497048,0.259372681,0.294507146,0.288260996,0.239144236,0.223323226,0.253974199,0.240887016,0.253256589,0.223256662,0.235150456,0.291969478,0.305382729,0.270458698,0.232845142,0.28080976,0.264537901,0.258622199,0.271028847,0.225935951,0.250249714,0.283011079,0.278435558,0.279990733,0.233835503,0.238910407,0.300289392,0.274696231,0.288767546,0.223124981,0.256094754,0.239295736,0.270433217,0.299104929)),row.names = c(NA,-53L),class = "data.frame")

我的代码

library(tidyverse)
library(wesanderson)
library(ggplot2)

DF$Age <- factor(DF$Age,levels  = c("Younger","Older"))

我注意到我的 geom_text 导致了这个问题。由于我最初省略了该代码,因此下面的答案能够生成正确的图。

geomtext 标签

labelp4w <- data.frame(
  label = c(c(paste0('atop(~italic(t)[Student](15.95) == -0.93)'),paste0("italic(p) == 0.36")),c(paste0('atop(italic(t)[Student](30.15) == 0.51)'),paste0("italic(p) == 0.61"))),Age   = c(c("Younger","Younger"),c("Older","Older")))
## plot
(p4 <- ggplot(data = DF,aes(x=SleepDeprivation,y=FA)) +
    theme_minimal() +
        facet_grid(cols = vars(ROI),rows = vars(Age),labeller = as_labeller(c("Younger"  = "Younger Adults","Older"    = "Older Adults","title" ="title")))+
    geom_violin(lwd = 1,alpha = 0.5,trim=F,aes(fill = Age)) +
    geom_Boxplot(width = 0.1) +
    scale_fill_manual(values=wes_palette(n=2,name="GrandBudapest2")) +
    geom_text(data = labelp4w,x = 1.5,y=seq(0.75,0.68,length = 4),label = labelp4w$label,size = 7.5,parse = T) +
    scale_y_continuous(breaks = seq(0.2,0.8,0.2),limits = (c(0.2,0.8))) +
    theme(plot.title    = element_text(hjust = 0.3,size=40,face="bold",margin=margin(0,0)),legend.position = "none",legend.text   = element_blank(),legend.title  = element_blank(),axis.title.y  = element_blank(),axis.title.x  = element_text(size = 25,face = "bold"),axis.text.x   = element_text(size = 25,axis.text.y   = element_blank(),strip.text.x  = element_text(size  = 28,strip.text.y  = element_text(size  = 20,face="bold"),plot.subtitle = element_text(hjust = 0.5,size = 20),plot.caption  = element_text(color = "black",size =20),panel.grid.major = element_blank(),panel.grid.minor = element_blank(),strip.background = element_blank(),panel.border = element_blank()) + 
    labs(x = "")
)

问题是在添加 geom_text 时发生的。我不知道为什么?

解决方法

这似乎是您自己造成的。

DF$Age <- factor(DF$Age,levels  = c("Younger","Older"))
ggplot(data = DF,aes(x=SleepDeprivation,y=FA)) +
    facet_grid(cols = vars(ROI),rows = vars(Age),labeller = as_labeller(c("Younger"  = "Younger Adults","Older"    = "Older Adults","title" ="title")))+
    geom_violin(lwd = 1,alpha = 0.5,trim=F,aes(fill = Age)) +
    geom_boxplot(width = 0.1) +
    labs(x = "")

在上面我删除了所有杂乱的代码,这不会影响您的定位。

enter image description here

geom_text 的更新

在包含 geom_text 的情况下,这似乎是对 2 个数据集执行排序之间的模糊交互。请注意,DF$Age 是一个因子,而 labelp4w$Age 是一个字符向量。在这种情况下,排序来自后者。只需确保两者都是因素即可。


labelp4w <- data.frame(
  label = c(c(paste0('atop(~italic(t)[Student](15.95) == -0.93)'),paste0("italic(p) == 0.36")),c(paste0('atop(italic(t)[Student](30.15) == 0.51)'),paste0("italic(p) == 0.61"))),Age   = factor(c("Younger","Younger","Older","Older"),levels = c("Younger","Older")))