R语言包ggplot2绘制多组箱线图
本文记录于2021年6月28日,2022年11月14日更新,如果内容有误,请私信或评论,我会在第一时间进行更正。
由于许多人好像对ggplot2所需要的数据的结构不是很清楚,那么我在这里补充一些内容,希望能够帮助大家理解下面的绘图,后续有时间,我也会重新开一个新的帖子,对ggplot2的数据以及各种常用形式的绘图进行更清晰完整的说明。
首先需要强调一下,ggplot2在进行绘图前,基本都需要把数据转化为上图右边的形式,即三个列的形式,对于初始数据并没有太多的要求,矩阵,列表等等。
如果数据是类似上图左边的形式,则只要指定行名然后使用melt函数转换即可,如下:
data <- reshape2::melt(rawdata, id = rowname(rawdata))
同理,如果想要指定特定的列用来绘图,只需要指定列即可:
data <- reshape2::melt(rawdata[, c("a", "b")], id = rowname(rawdata),variable.name = "VAR",value.name = "VAL")
鉴于有挺多人对该问题有疑惑,我把完整的代码和数据放在这里,希望还有疑惑的同学看一下,如果还是有不明白的地方一起讨论。
Cibersort的数据与代码-算法与数据结构文档类资源-CSDN下载
最近在做cibersort浸润分析,在对结果做可视化的时候遇到一点问题(问题解答蓝字部分)
根据默认的绘图只能进行一组数据的绘制,而我想要的结果是不同组数据同时展示
就是这张图这种,然后在网上查了一下这个问题,虽然R语言相关的可视化问题挺多,但是没有发现这个问题怎么解决。
不过也有一些帖子给了启发,就是导入一个额外的样本表型信息,然后再在代码的fill属性中设置选择样本信息,这对和我一样的小白们讲是比较麻烦的一种解决方法。
后来结合这个思路,我找到了一个解决办法:
这个是原始数据
这个是自己手动添加了分组信息之后的数据
最简单的解决方法就是在数据中对样本直接添加分组信息,根据自己做分析时的分组,直接添加在cibersort的结果中。
代码也只需要非常简单的修改
plot.info_all <- plot.info %>%as.data.frame() %>%rownames_to_column("sample") %>%pivot_longer(cols = 3:8,names_to = "CellType",values_to = "Composition")plot.info_all <- plot.info_all[,c(19,2,20)]
ggboxplot(plot.info_all,x = "CellType",y = "Composition",color = "black",fill = "group",#只需要修改这里,讲fill = "CellType"改为fill = "group"xlab = "",ylab = "Cell composition",main = "TME Cell composition"
) +theme_base() +theme(axis.text.x = element_text(angle = 90,hjust = 1,vjust = 1))
Q&A
1,针对代码“plot.info_all[,c(19,2,20)]”中的“19,2,20”进行一个解释
上面这张图是免疫浸润的结果,这个结果是每个样本的每种免疫细胞的评分,对于每个样本,这些评分的和是1,我们进行免疫浸润的目的就是得到这个占比,以此来进行针对单样本层面的免疫分析。
绘图则是对结果进行可视化的展示,在刚才那行代码中,就是对需要展示的结果进行选择,同时需要结合前面一部分代码:
plot.info_all <- plot.info %>%as.data.frame() %>%rownames_to_column("sample") %>%pivot_longer(cols = 3:10,names_to = "CellType",values_to = "Composition")
注意这部分代码里的“cols = 3:10”,意思是选择刚才那个免疫浸润结果里的第3到10列进行读取
从结果中可以看出,进行列选择之前是24列,选择之后是19列,“19,2,20”中19指的是CellType,就是盒图结果的X轴名称,2指的是分组依据,也就是前面提到的手动添加的分组信息,20指的是Compostion列,也就是将选择的细胞进行计算之后得到的分值
这里多说一句,plot.info_all的数据是以列的方式进行保存的,在绘图时进行读取并绘图的依据便是前面选择的三个对象
如果绘图时想要根据自己的需求进行选择对象,就可以通过这两处修改进行选择了
2,对两组或任意组直接的差异关系进行对比,并显示
代码如下:
library("ggsignif")
library(gridExtra)
library(tibble)#rownames_to_column
library(ggplot2)
library(grid)
library(reshape2)
library(ggpubr)
library(dplyr)
library(tidyr)
library(pheatmap)
pkgs <- c("matrixStats", "pheatmap", "RColorBrewer", "tidyverse", "cowplot","ggpubr","bslib","ggthemes")
lapply(pkgs, library, character.only = T)#Error in theme_base() : 没有"theme_base"这个函数plot.info <- read.table('ImmuCellAI_icb_result.txt',sep = '\t',header = T,row.names = 1)
plot.info <- plot.info[,-2]###去除respond列
#plot.info <- plot.info[,-17]###去除数据太低的Effect-memory,如果对数据有改动请注意修改
plot.info <- plot.info[,-25]###去除gamma
plot.info <- plot.info[,-25]###去除score
###################################################
plot.info_1 <- plot.info %>%as.data.frame() %>%rownames_to_column("sample") %>%pivot_longer(cols = 3,names_to = "CellType",values_to = "Composition")
###分组进行绘图
plot.info_1 <- plot.info_1[,c(25,2,26)]
plot1 <- ggboxplot(plot.info_1,x = "CellType",y = "Composition",color = "black",fill = "group", #只需要修改这里,讲fill = "CellType"改为fill = "group"xlab = "",ylab = "",#main = "TC",col="white",borde="white"
)
###分组并计算差异进行绘图
geom_signif()
compare_means(Composition ~ group, #将Composition与group进行联系data = plot.info_1,method="wilcox.test", paired=FALSE)#计算Wilcoxonmy_comparisons <- list(c("group1","group2"), c("group1","group3"),c("group1", "group4"))#这里设置对照组
ggplot(plot.info_1,aes(group,Composition,fill=group#CellType#设置))+geom_boxplot(width=0.5)+theme(plot.title=element_text(size = 10),axis.text.x=element_text(size=15,angle=0),axis.text.y=element_text(size=15),axis.title.x=element_text(size = 20),axis.title.y=element_text(size = 25))+labs(x="Cytotoxic.TC", #设置CellType#横坐标显示内容,可以为空y= "" #纵坐标显示内容,可以为空)+geom_signif(comparisons = my_comparisons,step_increase = 0.1,#两组直接对比框的高度map_signif_level = F,#这里可以设置两组之间差异显示为数值或者***,F为数值,T为***test = t.test,size=1,#线条粗细textsize = 5#P值字号大小)
此处代码仅供参考
我把代码与数据文件上传了CSDN资源
boxplot.zip_matlabboxplot美化-其它文档类资源-CSDN下载
有兴趣的可以支持一下
R语言包ggplot2绘制多组箱线图相关推荐
- 【R语言】24种R语言作图新手入门之boxplot箱线图(二)
目录 一.前言 二.初阶画图 2.1 基础语法 2.2 简单箱线图 2.3 带点箱线图 2.4 给线条"上色" 2.5 填充"上色" 2.6 修改图形顺序 三. ...
- 用python绘制多组箱线图、柱状图、簇状图
目录 箱线图 单组数据 多组数据 柱状图 数据叠加显示 数据分离显示 簇状图 箱线图 单组数据 只有一组数据时候用matplotlib就很方便实现,还可以对箱线图的格式进行调整,示例代码如下: imp ...
- R语言R原生及可视化包ggplot2绘制并排的箱图实战(Side-by-Side Boxplots)
R语言R原生及可视化包ggplot2绘制并排的箱图实战(Side-by-Side Boxplots) 目录 R语言R原生及可视化包ggplot2绘制并排的箱图实战(Side-by-Side Boxpl ...
- R语言可视化包ggplot2绘制Bump Chart(凹凸图)实战
R语言可视化包ggplot2绘制Bump Chart(凹凸图)实战 目录 R语言可视化包ggplot2绘制Bump Chart(凹凸图)实战 #导入包
- R语言使用ggplot2绘制带有边缘直方图的散点图实战
R语言使用ggplot2绘制带有边缘直方图的散点图实战 目录 R语言使用ggplot2绘制带有边缘直方图的散点图实战
- R语言Logistic回归模型亚组分析森林图(forest plot)绘制
R语言Logistic回归模型亚组分析森林图(forest plot)绘制 目录 R语言Logistic回归模型亚组分析森林图(forest plot)R语言Logistic回归模型亚组分析森林图
- R语言使用ggplot2绘制直方图
R语言使用ggplot2绘制直方图 代码备份 参考链接: R语言绘制直方图(简书)https://www.jianshu.com/p/18ac00dc64fd #读取数据---- setwd(&quo ...
- 使用ggplot2画 点图、箱线图、小提琴图、蜂窝图、云雨图
使用ggplot2画 点图.箱线图.小提琴图.蜂窝图.云雨图 加载包 library(tidyverse) library(cowplot) library(ggrepel) library(ggsc ...
- R语言中使用boxplot函数绘制箱线图
(源自百度,便于查看故复制于此,若有冒犯会删除) 箱线图简介 箱线图又称箱形图或盒须图,该图是由5个特征值绘制而成的图形. 5个特征值是变量的最大值.最小值.中位数.第1四分位数和第3四分位数. 连接 ...
最新文章
- Java 技术之动态代理机制
- SAP Kyma能像SAP BYD那样做field extension吗
- tgc 什么意思 tgt_TGT的完整形式是什么?
- distinct返回null报错_在Java中如何避免“!=null”式的判空语句?
- hive 2.3 mysql_hive 2.3.4环境搭建
- sql server收缩数据库日志
- 新宝市场分析近期大涨的抱团板块个股大多高位收阴或者黄昏星的感觉
- 怎么彻底删除users下的文件夹_c盘用户文件夹特别大,c盘users文件夹可以删除吗...
- no.10京东咚咚架构演讲读后感
- 新媒体时代,内容为王已经走偏
- aardio - 时钟例程
- 对账 概念 - 账证核对,账账核对,账实核对,账表核对
- 微信小程序解密出来是乱码的问题
- 中国IT咨询公司的机会在哪里?
- Idea使用“ctrl+/”快捷键进行 行注释 时,在//后自动添加空格
- 服务器系统开机提示0xc000007b,示例电脑开机出现0xc000007b蓝屏解决办法
- 第六周小组作业:软件测试与评估
- 机械手末端速度计算(实例)
- 快来给你的Hexo博客招募亿只live2d看板娘吧(๑•̀ㅂ•́)و✧
- 2022年G2电站锅炉司炉考试练习题及在线模拟考试
热门文章
- 【imessage苹果推信】软件安装苹果虚拟机推群发UDID和App的Bundle Id生成deviceToken
- golang中从一个日期开始往后增加一段时间
- Excel到PPT动嘴就能做!ChatGPT4接入Office全家桶
- 计算机ct检查,何谓CT检查
- 1495_关于费曼技巧相关信息的一点思考
- 自动化机器视觉行业视觉方案设计心得
- 舆情监控前几大公司有哪些,TOOM品牌好的舆情数据监测平台?
- 无人机遥感图像拼接与处理,速成方法
- Spring Boot实战,整合Prometheus实现应用监控
- VUE的el和data的写法以及MVVM模型、VUE的数据代理