R Intermediate Application(Venn+Pie+Volcano+Q-Q plot))

text文件的制表符格式为sep="\t"(即空格),是默认状态,但如果文件格式为CSV,则需要将sep转换为=",",如果文件格式为EXCEL,则需要使用R包xlsx,随后读取文件时使用代码

read.xlsx2("data.xlsx",header=T,sheetIndex=1)

###sheetIndex命令用于控制导入第几张表。

绘制饼图

需要使用pie()函数,需要文件形式为data.frame,相关的绘图参数如下:labels=() ###确定标签名,radius=() ###用于改变半径,clockwise=T, ###用于控制数据呈现的方向(顺时针T或逆时针F),init.angle=90  ###用于控制数据开始呈现时的角度,density=20  ###可以将饼图转变为用线条填充的图,col=rainbow(8),lty=2 ###修改linetype,border="black"

How to drawa a round rainbow

par(mar=c(0,0,0,0))

###par()函数的作用为优化图形参数,mar=c(,,,)函数调节边距,mai=为英寸边距

pie(rep(1,2000),col=rainbow(2000),lty=0,labels="",init.angle=90,border=NA)

###rep(,)函数的用法为将某一特定数据复制多次,如rep(1:4,20)为将1:4的向量重复20次。在这里将1重复2000次以保证在饼图中每一块的大小都是一样的。

绘制Venn图(文氏图)

(可以体现不同结合之间呈现与相互关系)的作图方法:

使用VennDiagram包中的venn.diagram()

建议使用此包(保存为tiff格式),数据源为列表形式(即横向输出,且不像frame要求各行各列长度相同)源码形式:

venn.diagram(data,height=,width=,resolution=,imagetype="",filename="",fill="",label.col="",cat.col="",alpha=)###具体可见操作手册

使用gplots包中的venn()。

使用venneuler包中的venneuler()。

使用GOplot包中的GOvenn()。

如果数据中的字符串不是因子变量,那么就需要使用options(StringFactor=F)命令。

绘制3D饼状图

可以使用plotrix包中的pie3D()函数。

源码形式如下:

pie3D(data$value,

radius=0.8,height=0.1,theta=0.5, ###分别规定直径、高度、倾斜比例

+labels=paste(data$group,substring(data$value,0,4),sep="\\n"),

###将据表中的某一列输出成label

+explode=0.1,main="",shade=0.5)

###explode函数用于决定块间隔

在pie3D绘图中不存在clockwise的源码,数据默认输出形式为逆时针,这种情况可以通过逆转数据表中的数据呈现顺序来实现:

data.rev=data[nrow(data):1,] 

###将data的第n行至第一行输出为矩阵形式,构建成一个新的数据表

绘制三维散点图

有两种R包可供选择,分别为rgl(可交互旋转,不便于输出)和scatterplot3d(不可交互旋转,便于输出为PDF格式),函数形式为plot3d()与scatterplot3d()

源码形式

rgl包

color=c(rep('red',3),rep('orange',3,rep('blue',3))

###定义color,使用rep函数,红、橘、蓝色各重复三次

plot3d(x,y,z,col=color,type="s",radius=0.5,pch=)

scatterplot3d包

color=c(rep('red',3),rep('orange',3,rep('blue',3))

scatterplot3d(data,main="",color=color,type="p",highlight.3d=F,angel=60,grid=T,box=T,scale.y=1,cex.symbols=,pch=)

legend("topright",c("a","b","c",fill=c("red","orange","blue")

###在右上角生成图注

对于scatterplot3d()来说,其角度的调整因为图片本身的不可交互而难以进行,因此可以通过创建循环语句,连续生成不同角度的图片,最后进行筛选即可

pdf('name',width=10,height=10)

###将下列源码做出的图片输出为pdf格式

diffangle<-function(ang){

color=c(rep('red',3),rep('orange',3),rep('blue',3))

scatterplot3d(data,main="",color=color,type="p",highlight.3d=F,angel=ang,grid=T,box=T,scale.y=1,cex.symbols=,pch=)

legend("topright",c("a","b","c"),fill=c("red","orange","blue"))

}   

###function(){代码}函数用于指定代码中某个特定的变量

sapply(seq(-360,360,2),diffangle) 

###sapply()函数为循环语句,从-360度到360度之间每两度运行一次代码

dev.off()

绘制火山图

可用base系统下的plot()函数。数据表需包含的信息为Pvalue(用于分析显著性差异,需进行负对数处理→ -log10(Pvalue)),Fold change值(实验组/对照组,需要取对数处理→log2或e(Fold

change))。除此之外在作图前还需要增加一个threshold信息,用于后续上色。

源码:

data$logFoldchange=log(data$Foldchange)

###将表中的foldchange值取对数后生成一列名为logFoldchange的数据,如果表中Foldchange信息本身就是取过对数的则不需要这一步操作

data$logP=-log10(data$Pvalue) 

###将表中的P.value取负对数后生成一列名为logP的数据

###接下来设置火山图的上色方式,对满足不同条件的点设置不同的颜色

data$threshold=as.factor(data$Pvalue<0.05&abs(data$logFoldchange)>0)

###在表中新建一列名为threshold的数据,当Pvalue小于0.5且logFoldchange绝对值大于0(即foldchange绝对值不等于1)时输出为TURE,否则为FALSE

plot(data$logFoldchange~data$logP,pch=,xlab="fold

change",ylab="-log10(Pvalue)",col=data$threshold,cex=0.1,main="vocano

plot") 

###绘制火山图,plot的上色方式以threshold列为准

abline(v=0,h=-log10(0.05),col=green)

###在图上添加垂直线与水平线,分别在x=0处与y=-log10(0.05)处,颜色设置为绿色

除此之外,也可以用ggplot2做火山图

源码:

rawdata<-read.data("volcanorawdata.txt")

data$logFoldchange=log2(data$Foldchange)

data$logP=-log10(data$Pvalue)

rawdata$threshold[rawdata$Pvalue<0.05&rawdata$logFoldchange>0]="up"

rawdata$threshold[rawdata$Pvalue<0.05&rawdata$logFoldchange<0]="down"

rawdata$threshold[rawdata$Pvalue>0.05]="none"

###上面三列将数据根据不同的条件进行了分类,如果输出的结果只有T和F两种,那么如上边base系统的火山图源码所示,直接使用rawdata$threshold=as.factor(条件)即可。

volcano=ggplot(rawdata,aes(x=logFoldchange,y=logP,color=threshold))

###定义x轴与y轴

+xlab("log2(Foldchange)")+ylab("-log10(P-value)") 

###轴标题

+geom_point(size=4,alpha=0.6)+scale_color_manual(values=c("red","blue","grey"))+ 

###绘制plot图,定义点的类型与颜色(根据threshold呈现颜色)

geom_hline(aes(yintercept=-log10(0.05)),colour="grey",size=1.2,linetype=2)+

geom_vline(aes(xintercept=0),colour="grey",size=1.2,linetype=2)  ###在threshold处添加垂直/水平线(abline)

###如果想要添加注释,可以再rawdata后手动添加一列,并命名为label,将感兴趣的基因名输入对应行然后使用ggrepel包进行添加

library(ggrepel)

volcano+geom_text_repel(data

=rawdata,  ###输入原始数据

+aes(label=label),colour

= "black",size=5,direction="both",    ###在aes()中指定label使用哪一列,输入列名即可;指定标签的颜色、字体大小和方向

+point.padding=unit(1.6,"lines"),box.padding=unit(0.5,

"lines"),  ###设置字到点的距离

+color="black",segment.color="black",segment.size=1,direction="both") 

###分别设置字体颜色、指向线段的颜色及大小,方向等,当segment.colour=NA时不显示线段

在R语言中,log()指的是取e为底的对数,log2()与log10()都可计算,但其他底数则需要使用如下方法:在R语言中,lognx的表现方式为log(x,n)

绘制Q-Q图

Q-Q图:用于检验数据分布,用变量数据分布的分位数与所指定分布的分位数之间的关系曲线来检验。通常情况下,横坐标为理论分布的分位数,纵坐标为样品分布的分位数,点的分布越接近45度斜率的直线,则越能证明样品分布符合理论分布使用qqnorm(data)和qqline(data)命令分别生成点图和趋势线。当检验数据是否是正态分布时,可以通过shapiro.test(data)来进行显著性差异检验得到p.value。

在一张画布中放置多张图片

可以使用layout函数或ggpubr包

figures<-layout(matrix(c(1,1,0,2,2,3,4,0,3),3,3,byrow=TRUE),c(2,2),c(2,2),TRUE) 

###matrix()函数中分别放入的信息为矩阵数字信息,行数为3,列数为3,优先从行开始排序(默认情况下矩阵都是从列开始排序)。

layout.show(figures)

这样得到的矩阵或画布割裂信息如下:


上述layout函数的运行结果

(即将画布切割成9块,每块按照矩阵信息放置图片,共放4张,0的位置不放图片)

随后按照顺序绘制图片即可,图片会按照设置好的画布割裂信息放置。

其他函数

substring("",0,4)函数指将引号中的字符串0-4个字符输出

sample()函数,即随机抽样函数,括号内依次填写数据来源,抽取数目,以及是否放回抽样(如果放回式抽样为replace=T,否则为F)

length()函数可以求出data中的数据数目

注:当图片导出为pdf格式时,可以保存为矢量图格式。

你可能感兴趣的:(R Intermediate Application(Venn+Pie+Volcano+Q-Q plot)))