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

原文地址:http://www.cnblogs.com/weigongwu/p/wgw.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性