如何使用重新排序的组合 ggplot2 图表保持统计数据

How to Keep Statistics with Reordered Combined ggplot2 Graph

我正在使用 ggplot2 为 Seurat 的模块乐谱制作小提琴图,我想向其中添加统计信息。我制作了以下小提琴情节,但我想将小提琴从从左到右阅读“0”和“1”切换到“1”和“0”。 (感谢@StupidWolf 提供的示例!)

library(Seurat)
library(SeuratObject)
library(ggplot2)
library(ggpubr)
library(reshape2)

#add Seurat's module scores and create Seurat object from them =====================

ERlist <- list(c("CPB1", "RP11-53O19.1", "TFF1", "MB", "ANKRD30B",
                 "LINC00173", "DSCAM-AS1", "IGHG1", "SERPINA5", "ESR1",
                 "ILRP2", "IGLC3", "CA12", "RP11-64B16.2", "SLC7A2",
                 "AFF3", "IGFBP4", "GSTM3", "ANKRD30A", "GSTT1", "GSTM1",
                 "AC026806.2", "C19ORF33", "STC2", "HSPB8", "RPL29P11",
                 "FBP1", "AGR3", "TCEAL1", "CYP4B1", "SYT1", "COX6C",
                 "MT1E", "SYTL2", "THSD4", "IFI6", "K1AA1467", "SLC39A6",
                 "ABCD3", "SERPINA3", "DEGS2", "ERLIN2", "HEBP1", "BCL2",
                 "TCEAL3", "PPT1", "SLC7A8", "RP11-96D1.10", "H4C8",
                 "PI15", "PLPP5", "PLAAT4", "GALNT6", "IL6ST", "MYC",
                 "BST2", "RP11-658F2.8", "MRPS30", "MAPT", "AMFR", "TCEAL4",
                 "MED13L", "ISG15", "NDUFC2", "TIMP3", "RP13-39P12.3", "PARD68"))

tnbclist <- list(c("FABP7", "TSPAN8", "CYP4Z1", "HOXA10", "CLDN1",
                   "TMSB15A", "C10ORF10", "TRPV6", "HOXA9", "ATP13A4",
                   "GLYATL2", "RP11-48O20.4", "DYRK3", "MUCL1", "ID4", "FGFR2",
                   "SHOX2", "Z83851.1", "CD82", "COL6A1", "KRT23", "GCHFR",
                   "PRICKLE1", "GCNT2", "KHDRBS3", "SIPA1L2", "LMO4", "TFAP2B",
                   "SLC43A3", "FURIN", "ELF5", "C1ORF116", "ADD3", "EFNA3",
                   "EFCAB4A", "LTF", "LRRC31", "ARL4C", "GPNMB", "VIM", 
                   "SDR16C5", "RHOV", "PXDC1", "MALL", "YAP1", "A2ML1",
                   "RP1-257A7.5", "RP11-353N4.6", "ZBTB18", "CTD-2314B22.3", "GALNT3",
                   "BCL11A", "CXADR", "SSFA2", "ADM", "GUCY1A3", "GSTP1",
                   "ADCK3", "SLC25A37", "SFRP1", "PRNP", "DEGS1", "RP11-110G21.2",
                   "AL589743.1", "ATF3", "SIVA1", "TACSTD2", "HEBP2"))


genes = c(unlist(c(ERlist,tnbclist)))
mat = matrix(rnbinom(500*length(genes),mu=500,size=1),ncol=500)
rownames(mat) = genes
colnames(mat) = paste0("cell",1:500)
sobj = CreateSeuratObject(mat)
sobj = NormalizeData(sobj)

sobj$ClusterName = factor(sample(0:1,ncol(sobj),replace=TRUE))

sobj = AddModuleScore(object = sobj, features = tnbclist, 
                      name = "TNBC_List",ctrl=5)
sobj = AddModuleScore(object = sobj, features = ERlist, 
                      name = "ER_List",ctrl=5) 

sobjlists = FetchData(object = sobj, vars = c("ER_List1", "TNBC_List1", "ClusterName"))


#violin plot =======================================================

my_comparisons <- list( c("0", "1") )
ggplot(sobjlists,aes(x= ClusterName, y = ER_List1)) + 
  geom_violin(aes(fill=ClusterName)) +     
  geom_boxplot(width=0.1) + labs(y= "ER+ Signature", x = "ClusterName") + ggtitle(label = "Object") +
  theme(plot.title = element_text(hjust = 0.5)) + stat_compare_means(comparisons = my_comparisons, method = "wilcox.test")+ # Add pairwise comparisons p-value
  stat_compare_means(label.y = 0.75) 

使用 中的解决方案,我可以通过添加

重新排序绘图
+ scale_x_discrete(limits = c("1", "0"))

到我现在拥有的代码的最后。然而,这样做,“Wilcoxon,p = 0.13”消失,并给出以下错误:

ggplot(sobjlists,aes(x= ClusterName, y = ER_List1)) + 
  geom_violin(aes(fill=ClusterName)) +     
  geom_boxplot(width=0.1) + labs(y= "ER+ Signature", x = "ClusterName") + ggtitle(label = "Object") +
  theme(plot.title = element_text(hjust = 0.5)) + stat_compare_means(comparisons = my_comparisons, method = "wilcox.test")+ # Add pairwise comparisons p-value
  stat_compare_means(label.y = 0.75) + scale_x_discrete(limits = c("1", "0"))


Warning messages:
1: Unknown or uninitialised column: `p`. 
2: Computation failed in `stat_compare_means()`:
argument "x" is missing, with no default 

对于 TL;DR,我如何保留最高统计数据并重新排序小提琴?

感谢阅读!

这是对我有用的(来自 https://www.datanovia.com/en/blog/how-to-change-ggplot-legend-order/

sobjlists$ClusterName <- factor(sobjlists$ClusterName, levels = c("1", "0"))