前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言画图

R语言画图

原创
作者头像
靓且有猫
发布2024-07-21 13:10:24
740
发布2024-07-21 13:10:24
举报
文章被收录于专栏:生信学习

两种方式

一、R自带的plot函数画图

二、ggplot2函数

plot函数

R自带的画图工具,R绘图基础图形系统的核心,plot()函数是一个泛型函数,使用plot时真正被调用的时函数依赖于对象所属的类。

plot(x,y=NULL,type="p",xlim=NULL,ylin=NULL,log = "",main = NULL,sub = NULL,xlab = NULL,ylab = NULL,ann = par("ann"),axes = TRUE,frame.plot = axes,panel.first = NULL,panel.last =NULL,asp =NA,...)

plot函数中有许多横纵坐标,其中x,y指横纵坐标对应的参数

1. 图片的保存

保存图标使用下列函数保存PDF文件,PDF文件可以放大后不会模糊

代码语言:r
复制
pdf("111.pdf")
#作图语句
dev.off()#作图完成后关闭,返回结果

(1)什么参数都不设置的最简单的散点图

代码语言:r
复制
> a <- c(10,15,20,25,30,35)
> b <- c(12,23,34,45,56,67)
> plot(a,b)

2.par()函数图布局

就是Rstudio右下角画图区域,可以设置一个页面多少张图,可以进行布局,默认一张,使用par参数进行设置图布局,par(mfrow=c(行,列))按行按列,par(mfcol= c(行,列)),按列排列

R绘图区域界面公共分为三部分:outer margins、figure region、plot region。一般情况下,R绘图区域没有out margin区域;标签、轴名称和标题在figure region区域;画的线条之类的都在plot region区域

which,在当前图形上绘制边框,参数可以选择plot、figure、inner、outer

col,边框颜色

lwd,边框大小

代码语言:r
复制
> a <- c(10,15,20,25,30,35)
> b <- c(12,23,34,45,56,67)
> par(oma=c(3,3,3,3))#请把注意力方针par函数与box函数上
> lines1 <- plot61 <- plot(a,b,type = "b",pch = 23,col.axis = 2,xlim = c(0,40),ylim = c(5,65),col.main = 2,col.sub = "blue",main="红色框里的为plot区域",sub="plot61")
> lines2 <- lines(c(10,15,20,25,30,35),c(8,16,45,58,69,87),type = "b",pch = 21,col = "red")
> legend("topleft",inset = 0.05,cex = 0.8,title = "lines",c("lines1","lines2"),pch = c(23,21),text.col = 2)
> text(27,60,"lines1",col = "blue")
> text(35,45,"lines2",col = "red")
> box(which = "plot",col = "red",lwd = 2)
> box(which = "inner",col = "black",lwd =4)
> box(which = "figure",col = "blue",lwd =3)
> box(which = "outer",col = "green",lwd =5)

红色框中为plot区域,蓝色内部为plot area区域,蓝色与红色直接为margin区域,绿色与蓝色直接为out margin area区域

par有许多参数,其中与plot部分一样,比如:col,lwd,lty,font,cex等

mfcol,分割画图区域,一个大图分割成几个子图,按列绘制子图

mfrow,分割画图区域,一个大图分割成几个子图,按行绘制子图

mgp,设置标题、做标注名称、坐标轴距离图形边框的距离,默认是标题为3;坐标轴名称为1,坐标轴为0

oma,设置外边界,omc = c(下,左,上,右),例如:oma = c(2,3,4,3),下边距2,左边距3,上边距4,右边距3

代码语言:r
复制
> a <- c(10,15,20,25,30,35)
> b <- c(12,23,34,45,56,67)
> par(oma = c(2,1,2,0.5),col = "blue", mgp = c(2,1,0),bg = "black")
> lines1 <- plot51 <- plot(a,b,type = "b" , pch = 23, col.axis = 2,xlim = c(0,40),ylim =c(5,65),col.main = 2,col.sub = "blue")
> lines2 <- lines(c(5,10,20,25,32,35),c(5,25,35,45,50,55),type = "b",pch = 21,col = "red")
> legend("topleft",inset = 0.05,cex = 0.8,title = "lines" , c("lines1","lines2"),pch = c(23,21),text.col = 2)
> text(27,60,"lines1",col = "blue")
> text(35,45,"lines2",col = "red")

3、main:设置主标题,sub:副标题

代码语言:r
复制
> a <- c(10,15,20,25,30,35)
> b <- c(12,23,34,45,56,67)
> par(oma = c(2,1,2,0.5),col = "blue", mgp = c(2,1,0),bg = "white")
> plot(a,b,main = "主标题位置",sub = "副标题位置")

4、type,指线的类型

tybe= “p” ,点图

tybe= “l” ,线图

tybe= “b” ,同时绘制点和线

tybe= “c” ,仅绘制参数b所示的线

tybe= “o” ,同时绘制点和线,且线穿过点

tybe= “h” ,绘制出点到横坐标轴的垂直线

tybe= “s” ,阶梯图,先横后纵

tybe= “S” ,阶梯图,先纵后横

tybe= “n” ,空图

代码语言:r
复制
> a <- c(10,15,20,25,30,35)
> b <- c(12,23,34,45,56,67)
> par(mfrow=c(2,2)) #表示画图的布是两行两列,只能最多画四个图
> plot2 <- plot(a,b,type = "p",main = "点图",sub = "plot2")
> plot3 <- plot(a,b,type = "l",main = "线图",sub = "plot3")
> plot4 <- plot(a,b,type = "b",main = "点线图",sub = "plot4")
> plot5 <- plot(a,b,type = "c",main = "点图去掉点",sub = "plot5")
代码语言:r
复制
> a <- c(10,15,20,25,30,35)
> b <- c(12,23,34,45,56,67)
> par(mfrow=c(2,2)) #表示画图的布是两行两列,只能最多画四个图
> plot6 <- plot(a,b,type = "o",main = "同时绘制点和线",sub = "plot6")
> plot7 <- plot(a,b,type = "h",main = "绘制出点到横坐标的垂直线",sub = "plot7")
> plot8 <- plot(a,b,type = "s",main = "阶梯图,先横后纵",sub = "plot8")
> plot9 <- plot(a,b,type = "S",main = "阶梯图,先纵后横",sub = "plot9")

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

代码语言:r
复制
> a <- c(10,15,20,25,30,35)
> b <- c(12,23,34,45,56,67)
> par(mfrow=c(2,2)) #表示画图的布是两行两列,只能最多画四个图
> p1 <- plot(a,b,type = "b",pch=5,main = "例1",sub = "点线图")
> p2 <- plot(a,b,type = "b",pch=23,col = "red",bg = 9,main = "例2",sub = "点线图")
> p3 <- plot(a,b,type = "b",pch=6,col = "green",bg = 9,main = "例3",sub = "点线图")
> p3 <- plot(a,b,type = "b",pch="6",col = "green",bg = 9,main = "例3",sub = "点线图")

6、'cex:制定符号的大小,(默认是1)

cex.axis,坐标轴的大小

ces.lab,坐标轴标签的大小

cex.main,主标题的大小

cex.sub,副标题的大小

代码语言:r
复制
> a <- c(10,15,20,25,30,35)
> b <- c(12,23,34,45,56,67)
> par(mfrow=c(1,1)) #表示画图的布是两行两列,只能最多画四个图
> p1 <- plot(a,b,type = "b",pch="*",cex = 2,main = "点线图",sub = "p1")
> p2 <- plot(a,b,type = "b",pch="*",cex.axis = 2,cex.lab = 2,main = "点线图",sub = "p2")

7、Ity制定绘制线条时的类型,lwd:制定线条的粗细

线条类型

代码语言:r
复制
> a1 <- c(12,22,32,42,52,62)
> b1 <- c(12,22,32,42,52,62)
> par(mfrow = c(3,2))
> A <- plot(a1,b1,type = "b",pch = "&",lty = 1,main = "lty=1 实线")
> B <- plot(a1,b1,type = "b",pch = "&",lty = 2,main = "lty=2 实线")
> C <- plot(a1,b1,type = "b",pch = "&",lty = 3,main = "lty=3 实线")
> D <- plot(a1,b1,type = "b",pch = "&",lty = 4,main = "lty=4 实线")
> E <- plot(a1,b1,type = "b",pch = "&",lty = 5,main = "lty=5 实线")
> F <- plot(a1,b1,type = "b",pch = "&",lty = 6,main = "lty=6 实线")

线条粗细使用lwd参数,直接用数字表示粗细

代码语言:r
复制
> a1 <- c(12,22,32,42,52,62)
> b1 <- c(12,22,32,42,52,62)
> par(mfrow = c(2,2))
> A <- plot(a1,b1,type = "b",pch = "&",lty = 1,main = "lty=1 lwd= 1 实线",lwd=1)
> B <- plot(a1,b1,type = "b",pch = "&",lty = 2,main = "lty=2 lwd= 2 实线",lwd=2)
#使用col设置线条颜色
> C <- plot(a1,b1,type = "b",pch = "&",lty = 1,main = "线条颜色为Blue",col = "blue",lwd = 1.5)
> D <- plot(a1,b1,type = "b",pch = "&",lty = 1,main = "线条颜色为粉红色",col = 2,lwd =2)

col,默认的绘图颜色(有些函数可以有不同操作),比如:某些函数可以接受一个含有颜色的向量,并自动循环,使用col = c("blue”,“white”)绘制三条线时,第一条为蓝色,第二条为白色,第三条为蓝色

col.axis,坐标轴刻度文字颜色

col.lab,坐标轴标签颜色

col.main,标题颜色

col.sub,副标题颜色

fg,图形的前景色

bg,图形的背景色

代码语言:r
复制
> a <- c(10,15,20,25,30,35)
> b <- c(12,23,34,45,56,67)
> par(mfrow= c(3,2))
> plot11 <- plot(a,b,type = "b",pch = "$",col.axis = 2,main = "坐标轴刻度颜色为红",sub = "plot11")
> plot12 <- plot(a,b,type = "b",pch = "$",col.lab = 2,main = "坐标轴标签颜色为红",sub = "plot12")
> plot13 <- plot(a,b,type = "b",pch = "$",col.main = 2,main = "标题颜色为红",sub = "plot13")
> plot14 <- plot(a,b,type = "b",pch = "$",col.sub = 2,main = "副标题颜色为红",sub = "plot14")
> plot15 <- plot(a,b,type = "b",pch = "$",fg = 2,main = "图形前景颜色为红",sub = "plot15")
> plot16 <- plot(a,b,type = "b",pch = 23,bg = 2,main = "点的类型23,背景色为红",sub = "plot16")

8、坐标轴标签

使用xlab与ylab参数设置横纵坐标

代码语言:r
复制
a <- c(10,15,20,25,30,35)
b <- c(12,23,34,45,56,67)
par(mfrow= c(2,1))
plot17 <- plot(a,b,type = "b",pch = "#",xlab = "横坐标标签",col.axis = 6,col.main = 2,main = "设置横坐标轴标签举例",sub = "plot17")
plot18 <- plot(a,b,type = "b",pch = "#",ylab = "纵坐标标签",col.lab = 6,col.main = 2,main = "设置横坐标轴标签举例",sub = "plot18")

9、坐标轴范围

使用xlim与ylim参数设置坐标轴范围

代码语言:r
复制
> a <- c(10,15,20,25,30,35)
> b <- c(12,23,34,45,56,67)
> par(mfrow= c(3,1))
> plot19 <- plot(a,b,type = "b",pch = "*",xlim = c(0,40) ,col.axis = 6,col.main = 2,main = "设置横坐标轴范围后图例",sub = "plot19")
> plot20 <- plot(a,b,type = "b",pch = "*",ylim = c(5,65) ,col.axis = 6,col.main = 2,main = "设置纵坐标轴范围后图例",sub = "plot20")
> plot19 <- plot(a,b,type = "b",pch = "*",xlim = c(0,40),ylim = c(5,65) ,col.axis = 6,col.main = 2,main = "设置横纵坐标轴范围后图例",sub = "plot21")

10、字体设置

使用font参数设置字体,font =1,表示常规字体,2,表示粗体,3表示斜体,4表示粗斜体,5表示符号字体

font.axis,坐标轴字体

font.lab,坐标轴标签字体

font.main,主标题字体

font.sub,副标题字体

family,字体家族:“serif”表示衬线,“sans”表示无衬线,“mono”表示等宽

代码语言:r
复制
> par(mfrow= c(3,1))
> a2 <- c(1,2,3,4,5)
> b2 <- c(1,2,3,4,5)
> plot22 <- plot(a2,b2,type = "b",pch = "*",font.axis =4,xlab ="横坐标a2",ylab = "纵坐标b2",col.main = 4,main = "坐标轴字体",sub = "plot22")
> plot23 <- plot(a2,b2,type = "b",pch = "*",font.lab =4,xlab ="横坐标a2",ylab = "纵坐标b2",col.main = 4,main = "坐标轴标签字体",sub = "plot23")
> plot24 <- plot(a2,b2,type = "b",pch = "*",font.main =4,xlab ="横坐标a2",ylab = "纵坐标b2",col.main = 4,main = "主标题字体",sub = "plot24")
代码语言:r
复制
> plot25 <- plot(a2,b2,type = "b",pch = "*",font.sub =4,xlab ="横坐标a2",ylab = "纵坐标b2",col.main = "green",main = "副标题字体",sub = "plot25")
> plot26 <- plot(a2,b2,type = "b",pch = "*",family ="serif",xlab ="横坐标a2",ylab = "纵坐标b2",col.main = "green",main = "有衬线",sub = "plot26")
> plot27 <- plot(a2,b2,type = "b",pch = "*",family ="sans",xlab ="横坐标a2",ylab = "纵坐标b2",col.main = "green",main = "无衬线",sub = "plot27")
> plot28 <- plot(a2,b2,type = "b",pch = "*",family ="mono",xlab ="横坐标a2",ylab = "纵坐标b2",col.main = "green",main = "等宽",sub = "plot28")

11、title()函数

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

注意:添加标题与标签是在原基础上添加的,如果原先有标提或标签,新加入的会与之重叠,所以在要加入的标签或标题之前,吧原标签或标题删除,也可以直接赋空值

代码语言:r
复制
> par(mfrow= c(3,1))
> a2 <- c(1,2,3,4,5)
> b2 <- c(1,2,3,4,5)
> plot29 <- plot(a2,b2,type = "b",pch = "*")
> title(main = "这是标题",sub = "这是副标题",xlab = "标签1",ylab = "标签2")
> plot30 <- plot(a2,b2,type = "b",pch = "*",xlab = "",ylab = "")
> title(main = "这是标题",sub = "这是副标题",xlab = "标签1",ylab = "标签2")

12.abline()函数添加线

在原有基础上添加线,可以使用abline()函数abline(a,b,h=x,v=x),a表示截距,b表示斜率,h表示与横坐标平行的线,v表示与纵坐标平行的线

代码语言:r
复制
> par(mfrow= c(2,1))
> a2 <- c(10,15,20,25,30,35)
> b2 <- c(12,23,27,44,56,63)
> plot31 <- plot(a2,b2,type = "b",pch = "*",col = "yellow",xlim = c(0,40),ylim = c(5,65),col.main = 2,col.sub = "red",main = "水平线",sub = "plot31")
> abline(h=c(20,35,55),v=c(15,25),col = "red")
> plot32 <- plot(a2,b2,type = "b",pch = "*",col = "yellow",xlim = c(0,40),ylim = c(5,65),col.main = 2,col.sub = "red",main = "截距为20,斜率为1",sub = "plot32")
> abline(a = 20,b=1,col = "red")

13.lines()函数在现有图形上添加线

lines()函数lines(x,y=NULL,type= "i",....)

代码语言:r
复制
a2 <- c(10,15,20,25,30,35)
b2 <- c(12,23,27,44,56,63)
plot33 <- plot(a2,b2,type = "l",pch = "*",col = "green",xlim = c(0,40),ylim = c(5,65),col.main = 2,col.sub = "red",main = "添加线",sub = "plot33")
lines(c(5,10,20,25,32,35),c(5,25,35,45,50,55),type = "b",col = "blue")

#14. layout() 函数图布局

使用layout()函数划分绘图页面,将一张绘图页面类似矩阵划分为多个区域,可设置某图形的特定行高与列宽

layout(mat,widths = rep.int(1,ncol(mat)),heights= rep.int(1,nrow(mat))...)

layout.show(n=1)

lcm(x)

mat为矩阵,用于划分绘图窗口,矩阵里0表示此位置不画图,非零元素从1开始,必须为整数值,非0元素的大小就是绘图顺序,比如1,3,2,先画1,后画2,后画3;widths设置上列的款,绝对宽度用lcm()指定,相对宽度用数值设置。heights设置行高度,用法与widths是一样的,n指要绘制图形的数量

代码语言:r
复制
> a <- c(10,15,20,25,30,35)
> b <- c(12,23,34,45,56,67)
> layout(matrix(c(1,1,2,1,1,3),2,3,byrow = T))#设置画图区域及顺序
> lines1 <- plot51 <- plot(a,b,type = "b",pch = 23,col = "blue",col.axis = 2,xlim = c(0,40),ylim = c(5,65),col.main = 2,col.sub = "red",main = "添加文字",sub = "plot51")
> lines2 <- lines(c(5,10,20,25,32,35),c(5,25,35,45,50,55),type = "b",pch = 21,col = "blue")
> legend("topleft",inset = 0.05,cex = 0.4,title = "lines",c("lines1","lines2"),pch = c(23,21),text.col = 2)
> text(27,60,"lines1",col = "green")
> text(35,45,"lines2",col = "yellow")


> plot49 <- plot(a,b,type = "l",pch = 23,col = "blue",xlim = c(0,40),ylim = c(5,65),col.main = 2,col.sub = "red",main = "关键字为center图9",sub = "plot49")
> lines(c(5,10,20,25,32,35),c(5,25,35,45,50,55),type = "b",pch = 21,col = "red")
> legend("center",inset = 0.05,cex = 0.4,title = "图例",c("线1","线2"),pch = c(23,21),text.col = 2)


> plot50 <- plot(a,b,type = "l",pch = 23,col = "blue",xlim = c(0,40),ylim = c(5,65),col.main = 2,col.sub = "red",main = "添加线",sub = "plot50")
> lines(c(5,10,20,25,32,35),c(5,25,35,45,50,55),type = "b",pch = 21,col = "red")
> legend("bottomleft",inset = 0.05,cex = 0.4,title = "图例",c("线1","线2"),pch = c(23,21),text.col = 2)

15.添加图例

使用legend()函数添加图例

legend(x,y = NULL,legend,col = par("col"),border = "black",lty ,lwd,pch,text.width = NULL,text.col = par("col"),text.font = NULL,plot =TRUE,inset = 0,title.col = text.col1...)

参数有很多,可以自行摸索

图例有许多关键字防止图例位置,如果用了关键词还可以使用inset参数设置图例向图形内侧移动的大小,用绘图取余数的大小分数表示,cex设置图例字体大小

代码语言:r
复制
> a <- c(10,15,20,25,30,35)
> b <- c(12,23,34,45,56,67)
> layout(matrix(c(1,2,3,4),2,2))#列排,安装矩阵排法画图,2行2列
> plot41 <- plot(a,b,type = "l",pch = 23,col = "blue",xlim = c(0,40),ylim = c(5,65),col.main = 2,col.sub = "red",main = "关键字bottom,图1",sub = "plot41")
> lines(c(5,10,20,25,32,35),c(5,25,35,45,50,55),type = "b",pch = 21,col = "red")
> legend("bottom",inset = 0.05,cex = 0.4,title = "图例",c("线1","线2"),pch = c(23,21),text.col = 2)
> plot42 <- plot(a,b,type = "l",pch = 23,col = "blue",xlim = c(0,40),ylim = c(5,65),col.main = 2,col.sub = "red",main = "关键字bottomleft,图2",sub = "plot42")
> lines(c(5,10,20,25,32,35),c(5,25,35,45,50,55),type = "b",pch = 21,col = "red")
> legend("bottomleft",inset = 0.05,cex = 0.4,title = "图例",c("线1","线2"),pch = c(23,21),text.col = 2)
> plot43 <- plot(a,b,type = "l",pch = 23,col = "blue",xlim = c(0,40),ylim = c(5,65),col.main = 2,col.sub = "red",main = "关键字left,图3",sub = "plot43")
> lines(c(5,10,20,25,32,35),c(5,25,35,45,50,55),type = "b",pch = 21,col = "red")
> legend("left",inset = 0.05,cex = 0.4,title = "图例",c("线1","线2"),pch = c(23,21),text.col = 2)
> plot45 <- plot(a,b,type = "l",pch = 23,col = "blue",xlim = c(0,40),ylim = c(5,65),col.main = 2,col.sub = "red",main = "关键字topleft,图4",sub = "plot45")
> lines(c(5,10,20,25,32,35),c(5,25,35,45,50,55),type = "b",pch = 21,col = "red")
> legend("topleft",inset = 0.05,cex = 0.4,title = "图例",c("线1","线2"),pch = c(23,21),text.col = 2)

16.在图上添加文字

使用text()函数可在图形上任意位置添加文字

在图上标上线条名称

代码语言:r
复制
lines1 <- plot51 <- plot(a,b,type = "b",pch = 23,col = "blue",col.axis = 2,xlim = c(0,40),ylim = c(5,65),col.main = 2,col.sub = "red",main = "添加文字",sub = "plot51")
lines2 <- lines(c(5,10,20,25,32,35),c(5,25,35,45,50,55),type = "b",pch = 21,col = "blue")
legend("topleft",inset = 0.05,cex = 0.8,title = "图例",c("线1","线2"),pch = c(23,21),text.col = 2)
text(27,60,"lines1",col = "green")
text(35,45,"lines2",col = "yellow")

在无法准确获取图片坐标的情况下,可以使用函数locator()获取精准坐标,只需要运行下面的代码,后再图片上点击想获取的坐标位置,会返回坐标结果

代码语言:r
复制
> locator(1)

17.R的撤销图片操作

使用recordlot()与replayplot()函数保存与撤销操作:

代码语言:r
复制
> chetu <- recordPlot() #记录plot1绘制的图,chetu是随便设置的
> text(1)#加上文字,不一定是text,还可以是函数,只要再图上
> replayPlot(chetu) #撤回上一步操作

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • plot函数
  • 1. 图片的保存
  • 2.par()函数图布局
  • 3、main:设置主标题,sub:副标题
  • 4、type,指线的类型
  • 5、pch:制定绘制点时使用的符号
  • 6、'cex:制定符号的大小,(默认是1)
  • 7、Ity制定绘制线条时的类型,lwd:制定线条的粗细
  • 8、坐标轴标签
  • 9、坐标轴范围
  • 10、字体设置
  • 11、title()函数
  • 12.abline()函数添加线
  • 13.lines()函数在现有图形上添加线
  • 15.添加图例
  • 16.在图上添加文字
  • 17.R的撤销图片操作
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档