【R语言】24种R语言作图新手入门之boxplot箱线图(二)

article/2025/9/15 4:34:20

目录

  • 一、前言
  • 二、初阶画图
      • 2.1 基础语法
      • 2.2 简单箱线图
      • 2.3 带点箱线图
      • 2.4 给线条“上色”
      • 2.5 填充“上色”
      • 2.6 修改图形顺序
  • 三、进阶画图
      • 3.1 排序箱线图
      • 3.2 差异箱线图
      • 3.3 多基因差异箱线图
      • 3.4 多组差异箱线图
      • 3.5 多基因多组差异箱线图
  • 四、讨论

一、前言

箱线图一般用于可视化基因的表达情况,常化用统计学方法计算组间基因的表达差异情况。以下主要是boxplot和geom_boxplot

二、初阶画图

2.1 基础语法

boxplot(x, data, notch, varwidth, names, main)
#x:向量或公式
#data:是数据帧
#notch:逻辑值。 设置为TRUE以绘制凹口
#varwidth:一个逻辑值。 设置为true以绘制与样本大小成比例的框的宽度
#names:将打印在每个箱线图下的组标签
#main:用于给图表标题

2.2 简单箱线图

#内置数据集
ToothGrowth$dose <- as.factor(ToothGrowth$dose)
head(ToothGrowth)
p <- ggplot(ToothGrowth, aes(x=dose, y=len)) + 
geom_boxplot()
p

在这里插入图片描述

#翻转横置
p + coord_flip()

在这里插入图片描述

#凹形箱线图
ggplot(ToothGrowth, aes(x=dose, y=len)) + 
geom_boxplot(notch=TRUE)

请添加图片描述

#修改离群值、颜色、形状和大小
ggplot(ToothGrowth,aes(x=dose, y=len)) + 
geom_boxplot(outlier.colour="red", outlier.shape=8,outlier.size=4)

请添加图片描述

2.3 带点箱线图

#初始箱线图
p <- ggplot(ToothGrowth, aes(x=dose, y=len)) + 
geom_boxplot()
#显示每个值
p + geom_dotplot(binaxis='y', stackdir='center', dotsize=1)

请添加图片描述

#发散式散点
p + geom_jitter(shape=16, position=position_jitter(0.2)) # 0.2:X方向上的发散程度

请添加图片描述

2.4 给线条“上色”

简单上色

#根据dose列分三色
p<-ggplot(ToothGrowth, aes(x=dose, y=len, color=dose)) +
geom_boxplot()
p

请添加图片描述

自定义修改颜色
scale_color_manual() : 使用自定义颜色
scale_color_brewer() : 使用 RColorBrewer 包中的调色板
scale_color_grey() : 使用灰色调色板

#自定义调色板
p<-ggplot(ToothGrowth, aes(x=dose, y=len, color=dose)) +
geom_boxplot()
p+scale_color_manual(values=c("#999999", "#E69F00", "#56B4E9"))

请添加图片描述

#使用brewer调色板
p+scale_color_brewer(palette="Dark2")

请添加图片描述

2.5 填充“上色”

#使用单色
ggplot(ToothGrowth, aes(x=dose, y=len)) +
geom_boxplot(fill='#A4A4A4', color="black")+
theme_classic()

请添加图片描述

#分组上色
p<-ggplot(ToothGrowth, aes(x=dose, y=len, fill=dose)) +
geom_boxplot()
p

请添加图片描述

修改颜色与上面改线条颜色同理,只不过变成了fill
scale_fill_manual() : 使用自定义颜色
scale_fill_brewer() : 使用 RColorBrewer 包中的调色板
scale_fill_grey() : 使用灰色调色板

p<-ggplot(ToothGrowth, aes(x=dose, y=len, color=dose)) +
geom_boxplot()
p+scale_fill_manual(values=c("#999999", "#E69F00", "#56B4E9"))

请添加图片描述

#使用brewer调色板
p+scale_fill_brewer(palette="Dark2")

请添加图片描述

#灰色调色板几乎不使用,不过代码如下大家可以自己运行
#使用黑白色线条
p<-ggplot(ToothGrowth, aes(x=dose, y=len, color=dose)) +
geom_boxplot()
p + scale_color_grey() + theme_classic()
#使用黑白色填充
p<-ggplot(ToothGrowth, aes(x=dose, y=len, fill=dose)) +geom_boxplot()
p + scale_fill_grey() + theme_classic()

2.6 修改图形顺序

p + scale_x_discrete(limits=c("2", "0.5", "1"))

请添加图片描述

三、进阶画图

3.1 排序箱线图

library(plyr)
library(ggpubr)#读取文件
rt=read.table(inputFile, sep="\t", header=T, check.names=F)    
x=colnames(rt)[2]
y=colnames(rt)[3]
colnames(rt)=c("id","Type","expression")#排序
med=ddply(rt,"Type",summarise,med=median(expression))
rt$Type=factor(rt$Type, levels=med[order(med[,"med"],decreasing = T),"Type"])#绘制
col=rainbow(length(levels(factor(rt$Type))))
pdf(file=outFile, width=10, height=6) #输出图片文件
p=ggboxplot(rt, x="Type", y="expression", color = "Type",palette = col,ylab=y,xlab=x,#add = "jitter",    #绘制每个样品的散点legend = "right")
p+rotate_x_text(45) #倾斜角度
dev.off()
print(p+rotate_x_text(45))

请添加图片描述

3.2 差异箱线图

#读取文件
rt=read.table(inputFile,sep="\t",header=T,check.names=F)
x=colnames(rt)[2]
y=colnames(rt)[3]
colnames(rt)=c("id","Group","Expression")#设置分组
group=levels(factor(rt$Group))
rt$Group=factor(rt$Group, levels=group)
comp=combn(group,2)
my_comparisons=list()
for(i in 1:ncol(comp)){my_comparisons[[i]]<-comp[,i]}#绘制boxplot
pdf(file=outFile,width=5,height=4.5)
boxplot=ggboxplot(rt,x="Group",y="Expression",color="Group",xlab=x,ylab="TP53 Expression",legend.title=x,palette = c(colornormal,colortumor),add = "jitter")+ 
stat_compare_means(comparisons = my_comparisons,method = "wilcox.test") #默认是wilcox.test,可换成t.test,kruskal.test,anova,下面同理
print(boxplot)
dev.off()

请添加图片描述

3.3 多基因差异箱线图

#读取文件
rt=read.table(inputFile,sep="\t",header=T,check.names=F,row.names=1)
x=colnames(rt)[1]
colnames(rt)[1]="Type"#整理表格
data=melt(rt,id.vars=c("Type"))
colnames(data)=c("Type","Gene","Expression")#绘制
pdf(file=outFile, width=6, height=5)
p=ggboxplot(data, x="Gene", y="Expression", color = "Type", ylab="Gene expression",xlab="",legend.title=x,palette = c(colornormal,colortumor),width=0.6, add = "none")
p=p+rotate_x_text(60)
#标显著星号
p1=p+stat_compare_means(aes(group=Type),method="wilcox.test",symnum.args=list(cutpoints = c(0, 0.001, 0.01, 0.05, 1), symbols = c("***", "**", "*", " ")),label = "p.signif")
print(p1)
dev.off()

请添加图片描述

3.4 多组差异箱线图

#读取文件
rt=read.table(inputFile,sep="\t",header=T,check.names=F)
x=colnames(rt)[2]
y=colnames(rt)[3]
colnames(rt)=c("id","Type","Expression")#设置分组
group=levels(factor(rt$Type))
rt$Type=factor(rt$Type, levels=group)
comp=combn(group,2)
my_comparisons=list()
for(i in 1:ncol(comp)){my_comparisons[[i]]<-comp[,i]}#绘制
pdf(file=outFile, width=5.5, height=5)
boxplot=ggboxplot(rt, x="Type", y="Expression", color="Type",xlab=x,ylab=y,legend.title=x,add = "jitter")+ 
scale_colour_manual(values = c("#FED43999","#709AE199","#8A919799","#D2AF8199"))+
stat_compare_means(comparisons = my_comparisons)
print(boxplot)
dev.off()

请添加图片描述

3.5 多基因多组差异箱线图

#读取文件
rt=read.table(inputFile, header=T,sep="\t",check.names=F,row.names=1)
x=colnames(rt)[1]
colnames(rt)[1]="Type"#差异分析
geneSig=c("")
for(gene in colnames(rt)[2:ncol(rt)]){rt1=rt[,c(gene,"Type")]colnames(rt1)=c("expression","Type")p=1if(length(levels(factor(rt1$Type)))>2){test=kruskal.test(expression ~ Type, data = rt1)p=test$p.value}else{test=wilcox.test(expression ~ Type, data = rt1)p=test$p.value}Sig=ifelse(p<0.001,"***",ifelse(p<0.01,"**",ifelse(p<0.05,"*","")))geneSig=c(geneSig,Sig)
}
colnames(rt)=paste0(colnames(rt),geneSig)#整理表格
data=melt(rt,id.vars=c("Type"))
colnames(data)=c("Type","Gene","Expression")#绘制
pdf(file=outFile, width=9, height=5)
p1=ggplot(data,aes(x=Type,y=Expression,fill=Type))+guides(fill=guide_legend(title=x))+labs(x = x, y = "Gene expression")+geom_boxplot()+facet_wrap(~Gene,nrow =1)+ #theme_bw()+theme(axis.text.x = element_text(angle = 45, hjust = 1))
p2=p1+scale_fill_manual(values=c("#FED43999","#709AE199","#8A919799","#D2AF8199"))
print(p2)
dev.off()

请添加图片描述

四、讨论

箱线图最主要的运用场景还是为了展示某个或者某几个变量的分布,如果讨论分组便介入t检验,非参数秩和检验等统计学方法计算其显著性。以上代码都是导入自己的文件可直接运行的,可关注公主号「生信初学者」回复关键词【boxplot】获取代码和示例数据。


http://chatgpt.dhexx.cn/article/HVsaywHW.shtml

相关文章

sns.boxplot()简单用法

sns.boxplot() 箱形图&#xff08;Box-plot&#xff09;&#xff1a; 又称为盒须图、盒式图或箱线图&#xff0c;是一种用作显示一组数据分散情况资料的统计图。它能显示出一组数据的最大值、最小值、中位数及上下四分位数 #参数如下&#xff1a; seaborn.boxplot(xNone, yN…

Matplotlib - 箱线图、箱型图 boxplot () 所有用法详解

目录 基本用法 水平箱线图&#xff0c;显示均值 改变箱线图的形状&#xff08;箱体的形状notch、异常值的形状sym&#xff09; 改变箱线图的颜色&#xff08;箱体边框的颜色、箱体填充色&#xff09; 相较散点图和折线图&#xff0c;柱状图、饼图、箱线图&#xff08;箱…

matlab之绘制箱线图函数boxplot

一、功能 用箱线图可视化汇总统计量 二、语法 1.boxplot(x) 创建 x 中数据的箱线图。如果 x 是向量&#xff0c;boxplot 绘制一个箱子。如果 x 是矩阵&#xff0c;boxplot 为 x 的每列绘制一个箱子。 在每个箱子上&#xff0c;中心标记表示中位数&#xff0c;箱子的底边和…

超详细Seaborn绘图 ——(二)boxplot boxenplot

箱形图&#xff08;Box-plot&#xff09;又称为盒须图、盒式图或箱线图&#xff0c;是一种用作显示一组数据分散情况资料的统计图。 它主要用于反映原始数据分布的特征&#xff0c;还可以进行多组数据分布特征的比较。箱形图最大的优点就是不受异常值的影响&#xff08;异常值也…

matplotlib之pyplot模块——绘制箱线图(盒须图)boxplot()(二)演示外观参数、返回值

当前有效matplotlib版本为&#xff1a;3.4.1。 概述 boxplot()函数的作用是绘制箱线图&#xff08;箱线图、盒须图、箱图&#xff09;。 箱线图是由一个箱体和一对箱须所组成的统计图形。箱体是由第一四分位数、中位数&#xff08;第二四分位数&#xff09;和第三四分位数所…

matplotlib之pyplot模块——绘制箱线图(盒须图)boxplot()(一)基本参数

当前有效matplotlib版本为&#xff1a;3.4.1。 概述 boxplot()函数的作用是绘制箱线图&#xff08;箱线图、盒须图、箱图&#xff09;。 箱形图&#xff08;boxplot&#xff09;又称盒须图或箱线图&#xff0c;是一种用来显示某一组数据分散情况的统计图&#xff0c;因形状如…

matplotlib.pyplot.boxplot()绘制箱型图

目录 一、matplotlib.pyplot.boxplot()语法 二、绘制箱型图 ①绘制简单箱型图 ②各个参数绘制箱型图 &#xff08;1&#xff09;notch参数&#xff08;bool值&#xff0c;是否凹口的形式展现箱线图&#xff0c;默认值False非凹口&#xff09; &#xff08;2&#xff09;sy…

Matlab中boxplot函数的用法

Boxplot函数&#xff1a; boxplot&#xff08;x&#xff09;函数&#xff1a;绘制数据X的盒须图。如果X为矩阵&#xff0c;则对每一列分别进行绘制。盒须图用于表现数据统计信息&#xff0c;由“盒”与“须”组成&#xff0c;“盒”中有一条直线&#xff0c;表示样本的中位数&a…

Matplotlib——箱线图boxplot()函数

箱线图一般用来展现数据的分布&#xff0c;如上下四分位值、中位数等&#xff0c;也可以直观地展示异常点。Matplotlib提供了boxplot()函数绘制箱线图。 import matplotlib.pyplot as plt_ plt.boxplot(range(10)) # 10个数&#xff0c;0-9plt.show()箱线图虽然看起来简单&a…

python绘制箱线图boxplot()

最近在处理数据时&#xff0c;需要使用python绘制箱线图。 1. 箱线图 箱线图&#xff08;Box-plot&#xff09;又称为盒式图或箱型图&#xff0c;是一种用来显示一组数据分散情况的统计图&#xff0c;它能显示一组数据的上界、下界、中位数、上下四分位数以及异常值等。 四分…

boxplot

1. 简介 箱形图&#xff0c;又称为盒须图、盒式图、盒状图或箱线图&#xff0c;是一种用作显示一组数据分散情况资料的统计图。箱形图于1977年由美国著名统计学家约翰图基&#xff08;John Tukey&#xff09;发明。它能显示出一组数据的最大值、最小值、中位数、上下四分位数及…

Box plot (箱线图) 解读以及Python实现

因为最近论文有信息量很大的结果需要展示,如果用常用的折线图或者柱状图很难集中且全面的展示实验结果,和老板讨论之后了解到--箱线图这种神奇的图形展示方式。边学边用~记录在这里~也给有论文写作需要的小伙伴们一个参考~ 1. 什么是箱线图? 箱形图(Box-plot)又称为盒须…

箱线图(Boxplot)也称箱须图(Box-whisker Plot)

简述&#xff1a; 箱线图&#xff08;Boxplot&#xff09;也称箱须图&#xff08;Box-whisker Plot&#xff09;&#xff0c;是利用数据中的五个统计量&#xff1a;最小值、第一四分位数、中位数、第三四分位数与最大值来描述数据的一种方法。它也可以粗略地看出数据是否具有有…

plt.boxplot()函数绘制箱图、常用方法及含义详解

1. 箱图含义 箱图是一中用于统计数据分布的统计图&#xff0c;也可以粗略地看出数据是否具有对称性&#xff0c;分布的分散程度等信息。箱图中的信息含义如下&#xff1a; 最下方的横线表示最小值最上方的横线表示最大值黑色空心圆圈表示异常值黑色实心圆圈表示极端值箱子由…

mysql查询between_MySQL查询数据过滤之BETWEEN操作符简介

BETWEEN运算符是一种逻辑运算符&#xff0c;判断指定值是否在范围内。 BETWEEN运算符的语法&#xff1a; expr [NOT] BETWEEN begin_expr AND end_expr; expr 是判断值是否在 begin_expr 和 end_expr 范围的内的表达式。 如果的值 expr大于或等于(> ) begin_expr &#x…

mysql 查询正在进行的事务

SELECT * FROM information_schema.innodb_trx字段解析 innodb_trx表&#xff1a; trx_id&#xff1a;事务ID。 trx_state&#xff1a;事务状态&#xff0c;有以下几种状态&#xff1a;RUNNING、LOCK WAIT、ROLLING BACK 和 COMMITTING。 trx_started&#xff1a;事务开始时间…

MySql 查询结果列拼接

MySql 查询结果列拼接 select concat( country,‘‘, province,’’, city,‘_’, store_properties) from wxshops

mysql 查询json字段

目录 json字段查询 字段格式 ​编辑查询&#xff1a; 注意&#xff1a; eg: json字段更新 json字段作为条件判断 代码&#xff1a; json字段判断&#xff08;json字段中有[]&#xff0c;需要判断就可以使用&#xff09; 结果 json字段查询 字段格式 查询&#xff…

mysql查询表的内容_mysql查询表内容

一&#xff0c;说明&#xff1a;表名为student 1&#xff0c;查询某个表里的字段 select 字段名1&#xff0c;字段名1 form student; 例如&#xff1a;查询student中的sname select sname from student; 2,查询某个表里的字段(字段下面有重复的内容)&#xff0c;并且显示的查询…

mysql查询排名

在MySQL中&#xff0c;不存在类似于SQL Server或Orcal等中的rank()函数来得到排名&#xff1b;所以我们需要手动地写这个rank功能。 基本知识&#xff1a; sql语句中&#xff0c;使用来定义一个变量。如&#xff1a;ranksql语句中&#xff0c;使用:来给变量赋值,&#xff1a;r…