ggplot2绘制相关性散点图时如何为不同分组点设置指定颜色
需求说明
绘制相关性散点图时需为三类数据点配置差异化颜色:
- 正常细胞系:黑色
- 癌细胞系:红色
- 肿瘤样本:蓝色
目前已完成ggplot基础框架搭建与数据点标注,因每个细胞系有专属名称,无法通过dplyr或Excel完成批量数据分组;曾尝试将数据拆分为多个独立数据框,分别调用geom_point为对应子集指定颜色,但方法未生效。
原有代码
#create master frame df <- my_file names <- rownames(df) df <- as.data.frame(df) class(df) normals <- df[1:21] cell_lines <- df[22:60] tumors <- df[61:219] row.names(df) <- c("PTPRO", "PPP1R14C", "IRF8", "TSPAN8","NKD1") #create new data frame for 2 specific sets row_to_keep <- c(TRUE,TRUE,FALSE,FALSE,FALSE) df1 <- df[row_to_keep,] # create scatter plot df1=data.frame(t(df)) #switch rows and columns ggplot(df1,aes(x=PTPRO,y=PPP1R14C))+ geom_point() + #scatter plot coord_trans(y='log10',x='log10') + #logarithmic scale geom_text( #label names label=rownames(df1), nudge_x=0.25,nudge_y=0.25, check_overlap=T, )
当前效果

预期实现按三类样本分组着色的散点图,保留原有对数坐标轴、样本名标注设置。
问题原因与修正方案
之前拆分数据框调用geom_point不生效,是因为拆分操作在转置前执行:转置前数据行是基因、列是样本,按列拆分出的子集在转置后维度、映射关系完全错乱,无法正常叠加图层。
不需要拆分多个数据框,直接在转置后的样本行数据中新增分组列,将颜色映射到分组变量即可,修正后代码如下:
library(ggplot2) # 读取并处理基础数据 df <- my_file df <- as.data.frame(df) rownames(df) <- c("PTPRO", "PPP1R14C", "IRF8", "TSPAN8","NKD1") # 提取目标基因数据,转置为样本为行、基因为列的绘图格式 df1 <- as.data.frame(t(df[c("PTPRO", "PPP1R14C"), ])) # 按样本位置直接新增分组标签,无需手动逐个标注 df1$sample_group <- c( rep("正常细胞系", 21), rep("癌细胞系", 39), # 对应22-60共39个样本 rep("肿瘤样本", nrow(df1) - 60) # 对应61行及之后的所有样本 ) # 绘制分组散点图 ggplot(df1, aes(x = PTPRO, y = PPP1R14C, color = sample_group)) + geom_point(size = 2) + coord_trans(y = "log10", x = "log10") + # 手动指定三类样本对应的颜色 scale_color_manual( values = c( "正常细胞系" = "black", "癌细胞系" = "red", "肿瘤样本" = "blue" ) ) + geom_text( aes(label = rownames(df1)), nudge_x = 0.25, nudge_y = 0.25, check_overlap = TRUE, show.legend = FALSE ) + labs(color = "样本类型") + theme_bw()
注意:如果样本顺序有调整,只需要修改
rep()函数内的样本数即可,不需要改动其他绘图逻辑。
内容的提问来源于stack exchange,提问作者eclecticintrovert
相关产品推荐
相关产品推荐

