十分钟入门R语言绘图






十分钟入门R语言绘图

小师妹  生信果  2023-08-01 19:00:09

点击蓝字 关注我们

人类非常善于从视觉呈现中洞察关系。一副精心绘制的图形能够帮助我们从数以千计的零散信息中获得有效的信息。R语言在该领域一直表现非常优秀了,给数据分析师提供了很好的工具。借鉴书籍为《R语言实践》第三章内容,小师妹认为这些基础是理解R是怎样绘图的非常关键。

初步尝试

attach(mtcars)plot(wt,mpg)abline(lm(mpg~wt))title("Regression of MPG on Weight")deattach(mtcars)
#保存到当前工作目录,除了pdf,还可以png()、jpeg()、bmp()等格式的保存pdf("mygraph.pdf")attach(mtcars)plot(wt,mpg)abline(lm(mpg~wt))title("Regression of MPG on Weight")deattach(mtcars)dev.off()

小示例

#为两种药物在五个剂量水平的响应情况。dose <- c(20,30,40,45,60)drugA <- c(16,20,27,40,60)drugB <- c(15,18,25,31,40)#画一个折线图来展示药物A的剂量和响应关系的图plot(dose,drugA,type = "b")#type同时绘制点和线

认识图形中的参数

#可以通过修改参数选项自定义一幅图形的多个特征包括,字体、颜色、坐标轴、标签等等。plot(dose,drugA,type = "b", lty =2,pch = 17)#还可以用par()参数进行彻底的修改,这种好处除非设定的参数值再次被修改,否则在会话结束前都是一直有效。opar <- par(no.readonly = T)#先保存一下初始设置par(lty = 2,pch = 17)plot(dose,drugA,type = "b")par(opar)#还原初始设置的参数符号和线条#pch=指定绘制点的形状;#cex=指定符号大小默认为1,可以设置1.5倍,0.8倍#lty=指定线条的类型;lwd=线条的宽度。plot(dose, drugA, type = "b",lty = 3, lwd = 3, pch = 15,cex = 1.5)

颜色

#颜色#col=默认绘图颜色,可以循环使用#col.axis=坐标刻度文字颜色#col.lab=坐标轴标签颜色#col.main=标题颜色#col.sub=副标题颜色#fg=图形前景色#bg=图形背景色

这里介绍两个非常好用,并且在以后都需要用到的颜色函数。

1、rainbow()函数

2、一个R包RColorBrewer()

文本属性

#cex=相对于默认大小缩放倍数的数值#cex.axis=坐标轴刻度文字的缩放倍数#cex.lab=坐标轴标签(名称)的缩放倍数#cex.main=标题的缩放倍数#cex.sub=副标题的缩放倍数#font=数字,1=常规,2=粗体,3=斜体,4=粗斜体,5=符号字体#font.axis=坐标轴刻度文字的字体样式#font.lab=坐标轴标签的字体样式#font.main=标题字体样式#font.sub=副标题的字体样式#ps=字体磅值#family=绘制文本时采用的字体族可以选择serif、sans、mono尝试以下plot(dose, drugA,type = "b",lty = 2, lwd = 3, pch = 15,cex = 1.5,font.lab=3, cex.lab = 1.5,font.main=4, cex.main=2)

图形尺寸和边界

#pin=以英寸表示的图形尺寸#mai=以数值向量表示的边界大小,单位英寸,顺序为“下左上右”#mar=以数值向量表示的边界大小,单位英分,顺序为“下左上右”

opar <- par(no.readonly = T)#上述讲述的par()参数的设定后,后边的画的图的格式确定,为了画完图后能够返回原来的设置,需要保存以下原有的设置。

par(pin=c(2,3),lwd=2, cex=1.5, cex.axis=.75,font.axis=3)plot(dose,drugA,type = "b", pch=19, lty=2, col="red")plot(dose,drugB,type = "b", pch=23, lty=6, col="blue",bg="green")par(opar)

tips:如果这里不能够理解par()函数,可以尝试以下代码,就可以理解啦~

opar <- par(no.readonly = T)par(pin=c(2,3),lwd=2, cex=1.5, cex.axis=.75,font.axis=3)plot(dose,drugA,type = "b", pch=19, lty=2, col="red")par(opar)plot(dose,drugA,type = "b", pch=19, lty=2, col="red")

添加文本、自定义坐标轴和图例

标题

title()函数为图形添加标签和坐标轴标签。

title(main="main title",sub = "sub title",col.main="red",col.sub="blue", xlab="x-lab",ylab="y-lab")

坐标轴

#side=一个整数,1=下,2=左,3=上,4=右#at=一个数值型向量,表示需要绘制刻度线的位置#labels=一个字符型向量,表示置于刻度线旁边的文字标签#pos=坐标轴线绘制位置的坐标#lty线条类型#col线条和刻度颜色#las标签是否平行=0(平行)=2(垂直)#tck=刻度线的长度,以相对于绘制图区域大小的分数表示,负值在外侧,正值在内侧,0表示禁用刻度,1表示绘制网格线,默认为-0.01axis(side,at=,labels = ,pos = ,lty = ,col = ,las = ,tck = ,.....)x <- c(1:10)y <- xz <- 10/xopar <- par(no.readonly = T)par(mar=c(5,4,4,8)+0.1)#控制边界大小plot(x,y,type = "b",pch=21, lty=3,col="red",ann = F)lines(x,z,type="b",pch=22,col="blue",lty=2)#添加一条线x~z的线axis(2,at=y,labels = y,col.axis = "blue",lty=2)#根据axis(4,at=round(z,digits = 2),col.axis = "blue",las=2,tck = -.01)title("An EXample of Creative Axes", xlab = "X value",ylab = "X/Y",cex.main = 0.75,cex.lab = .7)par(opar)

参考线和图例

abline()函数abline(h=yvalues, v=xvalues)abline(h=c(1,5,7))#在y为1,5,7的位置上添加水平实线abline(v=seq(1,10,2),lty=2,col=”blue”)#在x上添加垂直的蓝色的虚线legend(location,title,legend)#参考线和图例dose <- c(20,30,40,45,60)drugA <- c(16,20,27,40,60)drugB <- c(15,18,25,31,40)opar <- par(no.readonly = T)par(lwd=2,cex=0.75,font.lab=2)plot(dose,drugA,type = "b",pch=15,lty=1,col="red",ylim = c(0,60),main = "DrugA vs DrugB",xlab = "Dose",ylab = "Durg Response")lines(dose,drugB,type ="b", pch = 17, lty = 2,col = "blue")abline(h = 30,lty = 2, lwd = 0.75, col ="grey")legend("toplef",title = "Drug Type",c("A","B"),lty=c(1,2),pch = c(15,17),col = c("red","blue"))par(opar)

现在云生信的画图专版可以完成大部分的绘图,可以尝试以一下

http://www.biocloudservice.com/home.html


今天的分享就到这里啦,如果有什么问题可以和师妹一起讨论~

END