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=右。

image-20221116152941007image-20221116152941007

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()
image-20221116153909591image-20221116153909591

调整坐标轴上的文字和数字并添加数字

# 设置坐标轴刻度大小和位置
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)# 为柱形图添加数字
image-20221116154401766image-20221116154401766

将图形的配色改为SCI配色

p3=p2+scale_color_npg()
p4=p2+scale_fill_npg()
p5=grid.arrange(p3,p4,ncol=2)
p5
image-20221116154343640image-20221116154343640

保存输出的图片为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

posted @   逐禅  阅读(305)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10亿数据,如何做迁移?
· 推荐几款开源且免费的 .NET MAUI 组件库
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· c# 半导体/led行业 晶圆片WaferMap实现 map图实现入门篇
· 易语言 —— 开山篇
点击右上角即可分享
微信分享提示