``` ggboxplot(b, x = "FAB", y = "expression", fill = "group", palette = "lancet")+ stat_compare_means(aes(group = group), method = "wilcox.test", label = "p.signif", symnum.args=list(cutpoints = c(0, 0.001, 0.01, 0.05, 1), symbols = c("***", "**", "*", "ns")))+ theme(text = element_text(size=10), axis.text.x = element_text(angle=45, hjust=1))```b <- gather(a,key=CIBERSORT,value = Proportion,-c(group,sample))这有什么用
gather()
函数的部分。用户给出的代码是:
b <- gather(a, key="CIBERSORT", value="Proportion", -c(group, sample))
首先,我要回忆一下gather()
函数的用途。这个函数来自tidyr包,用于将数据从宽格式转换为长格式。宽格式的数据通常有多个列代表不同的变量,而长格式则将这些列堆叠起来,使每个观察值占一行,更适合某些分析和绘图的需求。
接下来,我需要分析函数中的各个参数。第一个参数是数据框a,所以用户是将数据框a转换为长格式后存储到b中。key参数设置为"CIBERSORT",这应该是指新生成的列名,用于存放原来的列名。value参数是"Proportion",表示原来的数值会被收集到这一列中。而第三个参数是-c(group, sample)
,这应该意味着除了group和sample这两列之外,其他所有列都会被合并到key和value中。
这个时候,我需要考虑用户的原始数据结构。假设数据框a中有多个列,比如不同的免疫细胞类型(如CD4_T细胞、CD8_T细胞等),每个列对应样本中该细胞类型的比例。此外,还有group和sample列用于标识分组和样本ID。在宽格式下,每一行代表一个样本,每个细胞类型作为单独的列。但使用gather()
后,每个样本的每个细胞类型会变成单独的一行,这样数据结构变得更长,适合用ggplot2进行绘图,特别是当需要分面或者按不同类别进行颜色填充时。
然后,用户后面的代码使用了ggboxplot,并指定x为"FAB",y为"expression",填充颜色按"group"分组,这可能意味着用户正在绘制不同FAB类别下,表达量的箱线图,并按组别着色。而统计检验部分使用了Wilcoxon检验,并添加显著性标记。不过,这里可能存在变量名不一致的情况,比如在转换后的数据框b中,应该有CIBERSORT(细胞类型)和Proportion(比例),但ggboxplot中使用的x是"FAB",y是"expression",可能需要确认变量是否正确对应。
可能的疑问点在于,用户的数据转换是否正确,是否将原本的细胞类型列正确转换为了长格式,以便后续的绘图。例如,假设FAB是数据框a中的一个列,可能在转换后,b中的CIBERSORT列包含不同的细胞类型,而Proportion是对应的比例。但ggboxplot中使用的是x="FAB",这可能代表不同的分类,需要确认数据框b的结构是否包含FAB列,或者是否在之前的步骤中有其他处理。
总结来说,用户的问题主要在于理解gather()
的作用,即数据从宽变长,便于后续的可视化和分析。可能需要指出数据转换后的结构变化,以及如何适应后续的绘图函数需求。此外,检查变量名是否正确对应,确保绘图时使用的列存在于转换后的数据框b中,避免因列名错误导致的绘图问题。这段代码主要完成数据重塑和可视化两个步骤,我将分步解释各部分功能:
一、数据重塑步骤
b <- gather(a, key=CIBERSORT, value = Proportion, -c(group,sample))
作用:使用tidyr包的gather函数将宽数据转换为长数据格式
原数据假设结构:
sample | group | CD4_Tcells | CD8_Tcells | Macrophages |
---|---|---|---|---|
S1 | A | 0.25 | 0.12 | 0.08 |
转换后数据结构:
sample | group | CIBERSORT | Proportion |
---|---|---|---|
S1 | A | CD4_Tcells | 0.25 |
S1 | A | CD8_Tcells | 0.12 |
S1 | A | Macrophages | 0.08 |
参数解析:
key=CIBERSORT
:创建新列存储原来的列名(免疫细胞类型)value=Proportion
:创建新列存储对应的数值(细胞比例)-c(group,sample)
:保留不参与转换的标识列
二、可视化步骤 ggboxplot部分实现:
绘制分组的箱线图
- x轴:FAB分类(需确认数据中存在该字段)
- y轴:expression表达量
- 颜色填充:group分组
- 使用《柳叶刀》期刊配色
添加统计检验
- 使用Wilcoxon秩和检验
- 符号标记显著性:***p<0.001, **p<0.01, *p<0.05, ns不显著
- 自动添加星号标记
调整主题样式
- 整体字体大小10pt
- x轴标签45度旋转避免重叠
三、典型应用场景 这段代码常用于:
- 免疫浸润分析(如CIBERSORT结果)
- 多组间表达量比较
- 临床分组(group)与分子特征(FAB)的关联分析
注意点:
- 需确认原数据a中存在FAB字段
- 若从CIBERSORT结果出发,建议检查Proportion是否已做归一化处理
- Wilcoxon检验适用于非正态分布数据,但需满足独立样本假设
建议验证数据: 可通过以下命令检查转换结果:
head(b) # 查看前6行
str(b) # 验证数据结构
levels(b$CIBERSORT) # 查看免疫细胞类型
相关推荐

















