查看原文
其他

“宝藏级”R语言生信代码大全,彻底掌握生信作图精髓!

科研小Z 科研Z库 2022-04-24

R语言精要和基础画图是学习R的基石,今天给大家带来常见图形的R作图代码及解释,帮助大家轻松理解和学习R作图技巧。



一、R语言绘制散点图

其实绘制散点图,用plot(x,y)直接就可以了,不过这样绘制出来的散点图太简单了,不能达到使用的要求,所以要详细得设置一些参数,才能让图形更加的漂亮。

plot(cars$dist~cars$speed,#y~x,cars是R自带的数据

main="Relationship between car distance & speed",#标题

xlab = "Speed(miles per hour)",#x轴标题

ylab = "Distance travelled (miles)",#Y轴标题

xlim = c(0,30),#设置x轴的取值区间为0到30

ylim = c(0,140),#设置y轴的取值区间为0到140

xaxs = "i",#这里是设置x轴的风格,暂时没看明白有多大区别

yaxs = "i",

col = "red",#设置颜色

pch = 19)#pch指代点的形状,用数字表示,可查看帮助文档



如果要保存图片怎么办呢?小K觉得最简单的方法就是使用RStudio这个IDE,极其得好,可惜很多人都不知道。如果你不会,可以用如下代码实现(图形的参数还有很多个,这里只使用了其中的几个)

png(filename="散点图.png",width=480,height=480)

plot(cars$dist~cars$speed,#y~x

main="Relationship between car distance & speed",#标题

xlab = "Speed(miles per hour)",#x轴标题

ylab = "Distance travelled (miles)",#Y轴标题

xlim = c(0,30),#设置x轴的取值区间为0到30

ylim = c(0,140),#设置y轴的取值区间为0到140

xaxs = "i",#这里是设置x轴的风格,暂时没看明白有多大区别

yaxs = "i",

col = "red",

pch = 19)#pch指代点的形状,用数字表示,可查看帮助文档

dev.off()


如果你还有另一组数据,需要在上面这幅图里绘制,也就是在同一幅图里面绘制两组数据的散点图,可以像下面这样用point函数:

png(filename="散点图.png",width=480,height=480)

plot(cars$dist~cars$speed,#y~x

main="Relationship between car distance & speed",#标题

xlab = "Speed(miles per hour)",#x轴标题

ylab = "Distance travelled (miles)",#Y轴标题

xlim = c(0,30),#设置x轴的取值区间为0到30

ylim = c(0,140),#设置y轴的取值区间为0到140

xaxs = "i",#这里是设置x轴的风格,暂时没看明白有多大区别

yaxs = "i",

col = "red",

pch = 3)#pch指代点的形状,用数字表示,可查看帮助文档

points(cars$speed~cars$dist,pch=19)#因为比较难弄数据,就把原先的数据因果关系颠倒一下,pch设置与前面不同以区分

dev.off()


如果自己没有数据的话,可以用data()查看R语言内置的数据的哦。还是有挺多数据的。

上面的这些是散点图,但是你只要在参数里面type="l"#是字母l,那么就会将这些点串联起来画成线了。



二、条形图

绘制代码如下:

png(filename="散点图.png",width=480,height=480)

Sales <- read.csv("/home/rickey/文档/电子书/R教程/Learn R statistics/R Graph/Code/Chapter 1/Data Files/citysales.csv",header=TRUE)#header设置为TRUE表示把数据行和列的名称也读取进来

barplot(Sales$ProductA,

names.arg=Sales$City,

col="blue")

dev.off()



三、图形输出

用代码保存图形,将绘图语句夹在开启目标图形设备的语句和关闭目标图形设备的语句之间即可。

#pdf("mygraph.pdf")#pdf文件

win.metafile("filename.wmf")#windows图形文件

#png("filename.png")#PBG文件

#jpeg("filename.jpg")#JPEG文件

#bmp("filename.bmp")#BMP文件

#postscript("filename.ps")#PostScript文件

attach(mtcars)

plot(wt,mpg)

abline(lm(mpg~wt))

title("Regression of MPG on Weight")

detach(mtcars)

dev.off()



四、使用图形

dose=c(20,30,40,45,60)

drugA=c(16,20,27,40,60)

drugB=c(15,18,25,31,40)

plot(dose,drugA,type="b")

type="b" 同时画出点和线

type=“c" 没有点只有线



五、图形参数

在上例中,我们想使用实心三角而不是空心圆圈作为点符号的话,病想用虚线代替实现连接这些点:

dose=c(20,30,40,45,60)

drugA=c(16,20,27,40,60)

drugB=c(15,18,25,31,40)

plot(dose,drugA,type="b")

opar = par(no.readonly=TRUE) #复制一份单签的图形参数

par(lty=2,pch=17) #将默认的线性类型修改为虚线(lty=2)并且将默认的点符号改为了实心三角(pch=17)

#也可以使用par(lty=2);par(pch=17)两句

plot(dose,drugA,type="b")#绘制了图形

par(opar)#还原了原始设置

#或者这样写plot(dose,drugA,type="b",lty=2,pch=17)来画图,但只是针对于这张图

pch:指定绘制点时使用的符号

cex:指定符号的大小。cex是一个数值,表示绘图符号相对于默认值大小的缩放倍数。默认大小为1,1.5表示放大为默认值的1.5倍.

lty:指定线条类型

lwd:指定线条宽度。(默认值的几倍)

col:默认的绘图颜色。如这是col=c("red","blue")并需要绘制三条线,第一条为红色,第二条为蓝色,第三条为红色

col.axis:坐标轴颜色

col.main:标题颜色

col.sub:副标题的颜色

fg:前景色

bg:背景色

example:col=1,col="white" col="#FFFFFF" col=rgb(1,1,1) col=hsv(0,1,1) 都可以表示白色


R中也用多种用于创建连续型颜色向量的函数rainbow()、heat.colors()、terrain.colors()、top.colors()、cm.colors()


gray()可以生成多节灰度

n=10

mycolors=rainbow(n)

pie(rep(1,n),labels=mycolors,col=mycolors)

mygrays=gray(0:n/n)

 pie(rep(1,n),labels=mygrays,col=mygrays)



六、文本属性

cex:表示相对默认大小缩放倍数的数值。(倍数)

cex.axis:坐标轴刻度文字的缩放倍数。

cex.lab:坐标轴标签(名称)的缩放倍数。

cex.main:标题的缩放倍数

cex.sub:副标题的缩放倍数


font:整数类型。1=常规,2=粗体,3=斜体,4=粗斜体,5=符号字体(adobe编码)

font.axis font.lab font.main font.sub

ps 磅值文本最终的大小为ps*cex

family 绘制文本是使用的字体族。标准取值为serif(衬线)、sans(无衬线)和mono(等宽)

Windows中,可以通过函数windowsFont()创造新的映射。(Mac,采用quartzFont())


PDF或者PostScript输出格式图形,修改相对简单。

PDF使用names(pdfFonts())找出系统有哪些字体可用,然后用pdf(file=”myplot.pdf“,family="fontname")生成图形。

PostScript输出格式的图形,可以使用names(postscriptFonts())和postscript(file="myplot.ps",family="fontname")



七、图形尺寸和边界尺寸

pin:以英寸表示的图形尺寸(宽和高)

mai:以数值向量表示的边界大小,顺序为“下、左、上、右”单位为英寸

mar:以数值向量表示的边界大小,顺序为“下、左、上、右”单位为英分。默认=c(5,4,4,2)+0.1



八、添加文本

dose=c(20,30,40,45,60)

drugA=c(16,20,27,40,60)

drugB=c(15,18,25,31,40)

plot(dose,drugA,type="b",col="red",lty=2,pch=2,lwd=2,main="Clinical Trails for Drug A",sub="This is hypothetical data",xlab="Dosage",ylab="Drug Respponse",xlim=c(0,60),ylim=c(0,70))


某些高级绘图函数已经包含了默认的标题和标签。可以通过plot()语句货单独的par()语句中添加ann=FALSE来移除他们


九、图形组合

在R中使用函数par()或layout()可以容易地组合多幅图形为一幅图形。par()函数中使用图形参数mfrow=c(nrows,ncols)来穿件按行填充的、行数为nrows、列数为ncols的图形矩阵。另外,可以使用nfcols=c(nrows,ncols)按列填充矩阵。

attach(mtcars)

opar=par(no.readonly=TRUE)

par(mfrow=c(3,1))

hist(wt)

hist(mpg)

hist(disp)

par(opar)

detach(mtcars)


attach(mtcars)

opar= par(no.readonly=TRUE)

par(mfrow=c(2,2))

plot(wt,mpg,main="Scatterplot of wt vs. mpg")

plot(wt,disp,main="Scatterplot of wt vs. disp")

hist(wt,main="Boxplot of wt")

boxplot(wt,main="Boxplot of wt")

par(opar)

detach(mtcars)


函数layout()的调用形势为layout(mat),其中的mat是一个矩阵,它指定了所要组合的多个图形所在位置。

attach(mtcars)

layout(matrix(c(1,1,2,3),2,2,byrow=TRUE))

hist(wt)

hist(mpg)

hist(disp)

detach(mtcar)



下面代码,将一幅图形放在第一行,两幅图放在第二行,但第一行高度是第二行中图形高度的三分之一,并且,右下角图形宽度是左下角图形宽度的四分之一。

attach(mtcars)

layout(matrix(c(1,1,2,3),2,2,byrow=TRUE),widths=c(3,1),heights=c(1,2))

hist(wt)

hist(mpg)

hist(disp)

detach(mtcars)


往期推荐人民日报:痛斥知网!“借鸡生蛋”年入12亿,靠垄断数钱的日子该到头了!
那个做临床回顾性研究的医生, 靠「翻翻病例」发了10篇SCI...
CNS级绘图策略:Graphpad Prism自定义配色方案!
专家级实验设计软件Design-expert最新版,实验不求人!

Tips:点击“阅读原文”领取最新更新资源包!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存