首页 > 其他分享 >R语言科研绘图

R语言科研绘图

时间:2022-11-16 19:55:41浏览次数:47  
标签:FALSE 科研 TRUE 绘图 names file text tb 语言

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

标签:FALSE,科研,TRUE,绘图,names,file,text,tb,语言
From: https://www.cnblogs.com/weigongwu/p/wgw.html

相关文章

  • 12-Go语言进阶-02
    并发编程并发、并行并发:同一时间段,两个程序轮流执行。并行:两个程序同时执行,需要有多核CPU的支持才能实现。并行不一定就比并发速度快,因为线程或进程之间的通信开销很......
  • 《Go 语言并发之道》读书笔记(二)
    今天这篇笔记重点讲goroutine首先怎么定义goroutine很简单,在方法前面加上go就可以了funcmain(){ gosayHello()}funcsayHello(){ fmt.Println("hello")}也......
  • R语言Apriori关联规则、kmeans聚类、决策树挖掘研究京东商城网络购物用户行为数据可视
    全文链接:http://tecdat.cn/?p=30360原文出处:拓端数据部落公众号随着网络的迅速发展,依托于网络的购物作为一种新型的消费方式,在全国乃至全球范围内飞速发展。电子商务成为......
  • C语言《数据结构与数据库/操作系统》实验测试数据集
    C语言《数据结构与数据库/操作系统》实验测试数据集实验二、栈的应用注意需要根据实验内容文件实现相应的数据结构——栈,以及菜单(程序要能循环使用,不要计算一次就必须重......
  • go语言实现第一个程序-hello,world!
    0.前言工作中一直使用c++编写高并发服务器程序,但c++编写高并非服务器程序时多线程逻辑,锁机制导致的死锁,内存泄漏,崩溃等问题会耗费大量时间和精力。听同事说go语言是专门做......
  • Go语言中字符串的查找方法小结
    这篇文章主要介绍了Go语言中字符串的查找方法小结,示例的main函数都是导入strings包然后使用其中的方法,需要的朋友可以参考下 1.funcContains(s,substrstring)bool这......
  • C语言实现反汇编【微机原理】
    C语言实现反汇编【微机原理】​​0.参考文章​​​​1.配置gcc(devc++中MinGW64)​​​​2.反汇编​​​​3.debug简单分析​​​​4.在c代码里内联汇编​​0.参考文章​​......
  • C语言getchar和putchar是怎么实现的?
    所有的stdio库函数,比如包括getchar/putchar/getc/putc之类的,都会经过stdiobuffer:如果从最简单的实现来说,可以把FILE结构体定义成下面这样:typedefstruct_iobuf{......
  • c语言自定义输出小数点位数_c语言double类型默认输出小数几位
    C语言中常用的小数有两种类型,分别是float或double;float称为单精度浮点型,double称为双精度浮点型。不像整数,小数没有那么多幺蛾子,小数的长度是固定的,float始终占用4个......
  • C语言借助两个数的大小交换,引入指针。
    前期没有指针的时候,我们的交换只可以通过在被调函数中输出语句,来输出交换后的样子!被调函数的形参是局部变量,生命期仅仅在被调函数中有。因此,主函数中a,b仍然是......