R语言科研绘图
R语言科研绘图(1)
基本绘图语法绘制barplot
setwd("xxx\\02.barplotStat")
# 读取数据文件
#sep表示数据分隔符用制表符,comment.char表示数据中表示注释的符号,该符号后的数据会被识别为注释们不会被读入
# check.names默认为TRUE,表示对列名进行检查,如果不符合规范则会在前面加上X.
dt=read.table("input.txt",header=TRUE,sep="\t",comment.char="",check.names=FALSE)
tb=table(c(as.vector(dt[,1]),as.vector(dt[,2]))) # 对两列数据进行频数统计
tb=sort(tb,decreasing=TRUE) # 对频数进行降序排序
# 输入每个基因的邻接点节点数目
outTab=as.data.frame(tb)
colnames(outTab)=c("Gene","Count")
write.table(outTab,file="statResult.xls",sep="\t",quote=FALSE,row.names=FALSE)
# write.table(x, file = "", append = FALSE, quote = TRUE, sep = " ",
# eol = "\n", na = "NA", dec = ".", row.names = TRUE,
# col.names = TRUE, qmethod = c("escape", "double"),
# fileEncoding = "")
# x表示要输入的对象,最好是矩阵或数据框,如果不是会强制转换为数据框,file:一个字符串命名文件或编码而打开的一个链接,表示输出到控制台。 append: 逻辑,只有当file是一个字符串才相关,如果是TRUE,输出追加到文件,如果FALSE,任何有文件的名称被摧毁。 quote:一个逻辑值TRUE或FALSE或者数字向量,如果TRUE,任何字符或因素列将用双引号包围,如果一个数值向量,其元素为引用的列的索引。sep:字段分隔字符串,每一行x中的之都被这个字符换分隔开, row.names: 表示x的行名是否与x一起写的逻辑值,col.names也是如此。
#输入每个基因的邻接点节点数目
# 定义柱状图显示基因数目
shownum=40
if(nrow(tb)<shownum){
shownum=nrow(outTab)
}
n=as.matrix(tb)[1:shownum,]
# 绘制柱状图
pdf(file="barplot3.pdf",width=7,height=6)
par(mar=c(5,7,2,3),xpd=TRUE) # 设置内边距
#绘制柱状图
pdf(file="barplot.pdf",width=7,height=6)
par(mar=c(5,7,2,3),xpd=T)
bar=barplot(n,horiz=TRUE,col="skyblue",names=FALSE,xlim=c(0,ceiling(max(n)/5)*5),xlab="Number of adjacent nodes")
text(x=n*0.99,y=bar,n,pos=4,cex=0.5)
text(x=-0.2,y=bar,label=names(n),xpd=TRUE,pos=2,cex=0.5)
# cex是设置标记的文字的大小
dev.off()
#xpd:该参数用于绘制绘图区域的大小,取值为TRUE,FALSE,或者NA。当取值为FALSE时,表示将绘图区域限定在默认的绘图区域内;当取值为TRUE时,表示将绘图区域限定在默认的图形区域;当取值为NA时,表示将绘图区域限定为默认的设备区域。
#pos:文本相对于位置参数的方位。1=下,2=左,3=上,4=右。

ggplot2绘制barplot
载入的R包
library(gridExtra)
library(ggsci)
library(ggplot2)
绘制前的数据准备
# 设置工作目录,方便直接读取数据
setwd("xx\\02.barplotStat")
# 读取数据文件
#sep表示数据分隔符用制表符,comment.char表示数据中表示注释的符号,该符号后的数据会被识别为注释们不会被读入
# check.names默认为TRUE,表示对列名进行检查,如果不符合规范则会在前面加上X.
dt=read.table("input.txt",header=TRUE,sep="\t",comment.char="",check.names=FALSE)
tb=table(c(as.vector(dt[,1]),as.vector(dt[,2]))) # 对两列数据进行频数统计
tb=sort(tb,decreasing=TRUE) # 对频数进行降序排序
# 输入每个基因的邻接点节点数目
outTab=as.data.frame(tb)
colnames(outTab)=c("Gene","Count")
write.table(outTab,file="statResult.xls",sep="\t",quote=FALSE,row.names=FALSE)
# write.table(x, file = "", append = FALSE, quote = TRUE, sep = " ",
# eol = "\n", na = "NA", dec = ".", row.names = TRUE,
# col.names = TRUE, qmethod = c("escape", "double"),
# fileEncoding = "")
# x表示要输入的对象,最好是矩阵或数据框,如果不是会强制转换为数据框,file:一个字符串命名文件或编码而打开的一个链接,表示输出到控制台。 append: 逻辑,只有当file是一个字符串才相关,如果是TRUE,输出追加到文件,如果FALSE,任何有文件的名称被摧毁。 quote:一个逻辑值TRUE或FALSE或者数字向量,如果TRUE,任何字符或因素列将用双引号包围,如果一个数值向量,其元素为引用的列的索引。sep:字段分隔字符串,每一行x中的之都被这个字符换分隔开, row.names: 表示x的行名是否与x一起写的逻辑值,col.names也是如此。
#输入每个基因的邻接点节点数目
# 定义柱状图显示基因数目
shownum=40
if(nrow(tb)<shownum){
shownum=nrow(outTab)
}
n=as.matrix(tb)[1:shownum,]
# 绘制柱状图
pdf(file="barplot3.pdf",width=7,height=6)
# par(mar=c(5,7,2,3),xpd=TRUE) # 设置内边距
tb=tb[1:shownum]
x1=names(tb)
x2=tb
G=data.frame(x1,x2)
G=G[,-2]
G=G[order(G$Freq,decreasing=TRUE),]
G=G[1:30,]
利用ggplot2绘制
p1=ggplot(G,aes(x=reorder(x1,Freq),y=Freq))+
geom_bar(stat="identity",position=position_dodge(0.9),color="skyblue",width=0.6)+
theme_bw()+
labs(y="Number of adjacent nodes",x="species")+
coord_flip()

调整坐标轴上的文字和数字并添加数字
# 设置坐标轴刻度大小和位置
p2=p1 + theme(
axis.text.x=element_text(vjust = -2, colour="red", size = 10),
axis.ticks.length.x=unit(-0.2, "cm"),
axis.text.y=element_text(vjust=0,color="blue",size=5),
axis.title.x = element_text(size = 12, vjust = -1))+
geom_text(aes(label=Freq),position=position_dodge(0.9),vjust=0,size=2,hjust=-0.8)# 为柱形图添加数字

将图形的配色改为SCI配色
p3=p2+scale_color_npg()
p4=p2+scale_fill_npg()
p5=grid.arrange(p3,p4,ncol=2)
p5

保存输出的图片为pdf格式
ggsave(p5,file="test.pdf")
ggsave(p5,file="test2.pdf",width=12,height=10)
代码汇总
p1=ggplot(G,aes(x=reorder(x1,Freq),y=Freq))+
geom_bar(stat="identity",position=position_dodge(0.9),color="skyblue",width=0.6)+
theme_bw()+
labs(y="Number of adjacent nodes",x="species")+
coord_flip()
## 因为默认的position_dodge()里的内容一定是和width相等的,
# 当position_dodge为0的时候,两个柱子会重合;
# 设置坐标轴刻度大小和位置
p2=p1 + theme(
axis.text.x=element_text(vjust = -2, colour="red", size = 10),
axis.ticks.length.x=unit(-0.2, "cm"),
axis.text.y=element_text(vjust=0,color="blue",size=5),
axis.title.x = element_text(size = 12, vjust = -1))+
geom_text(aes(label=Freq),position=position_dodge(0.9),vjust=0,size=2,hjust=-0.8)# 为柱形图添加数字
#positon_dodge(0.9)表示两个柱形之间的间距为0.9
p3=p2+scale_color_npg()
p4=p2+scale_fill_npg()
p5=grid.arrange(p3,p4,ncol=2)
ggsave(p5,file="test.pdf")
ggsave(p5,file="test2.pdf",width=12,height=10)
sci配色[1] 柱状图绘制[2] 柱状图[3]
参考资料
[1]简书: https://www.jianshu.com/p/b1897f06328d
[2]简书: https://www.jianshu.com/p/05391806ab80
[3]知乎: https://zhuanlan.zhihu.com/p/542550401
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10亿数据,如何做迁移?
· 推荐几款开源且免费的 .NET MAUI 组件库
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· c# 半导体/led行业 晶圆片WaferMap实现 map图实现入门篇
· 易语言 —— 开山篇