R软件基础2

    科技2022-07-13  123

    一、自定义绘图

    #1初级绘图 oldpar=par(pin=c(5,2),mai=c(0.6,0.6,0.6,0.1))#设置图的尺寸宽5高2和边界,单位:英寸 plot(1:10,1:10,type='n',main='主标题',sub='副标题',xlab='',ylab='', xlim=c(0,15),ylim=c(0,10),frame.plot=TRUE,axes=FALSE, mgp=c(2.3,1,0),cex.main=1,cex.sub=0.8) #plot(x=x轴数据,y=y轴数据,main="标题",sub="子标题",type="线型(p点,l线,o点或线)", #xlab="x轴名称",ylab="y轴名称",xlim = c(x轴范围,x轴范围),ylim = c(y轴范围,y轴范围) #cex.main 标题的缩放倍数。类似于cex;cex.sub 副标题的缩放倍数。类似于cex, #axes=FALSE表示plot不自动生成x,y坐标轴,frame.plot=TRUE需要画作图区域的框线 #mgp默认值为c(3, 1, 0),三个数字分别代表坐标轴标题、刻度值和轴线与绘图边框的距离;) lines(c(1,11),c(8,8),lty=2) lines(c(1,11),c(6,6),lty=3) lines(c(1,11),c(4,4),lty=1) #指定位置输出图例 legend(12.5,10,c("线1","线2","线3"),lty=c(2,3,1),cex=0.75) #x坐标轴(1,2,3,4分别表示底部,左侧,顶部,右侧) axis(1,0:15,labels = 0:15,cex=0.75,padj = -0.5) #y坐标轴,padi表示label偏离刻度线的大致距离 axis(2,0:10,labels = 0:10,cex=0.75,padj = 0.5) #x轴标签右对齐 title(xlab = 'x轴标签',adj=1,mgp=c(2.0,1,0),cex=0.75) #y轴标签右对齐 title(ylab = 'y轴标签',adj=1,mgp=c(2.0,1,0),cex=0.75) #在图形指定位置输出文本 text(7,3,'四周边线以内:作图区域') text(7,2,'四周边线以外:四个边距') par(oldpar)

    #2旋转文本输出 text par(mai=c(0,0,0,0)) plot(-10:10,-10:10,type='n',main='',sub='',xlab='',ylab='',axes=FALSE) for (i in 1:12) { text(0,0,srt=i*30,'统计软件R',adj=1.25,cex=0.85)#产生左侧图 } plot(-10:10,-10:10,type='n',main='',sub='',xlab='',ylab='',axes=FALSE) for (i in 1:12) { text(0,0,srt=i*30,'统计软件R',adj=1.25,cex=0.85)#产生右侧图 }

    #3在作图区域外输出文本metext #side表示文本方位,1,2,3,4对应下边,左边,上边和右边 #adj表示对齐方式,0,0.5,1分别对应左对齐,居中和右对齐 #line表示字符间距 plot(1:100) metext("right margin",side=4,adj=0.5,line=0.5) metext("top margin",side=3,adj=0,line=1)

    #4常规几何平面图 par(mai=c(0.1,0.1,0.1,0.1))#设置图的边界,单位:英寸 plot(-1:1,type='n',main='',sub='',xlim=c(-1,1.2),ylim=c(-0.2,2.5), frame.plot=FALSE,axes=FALSE,cex.sub=1,xlab = '',ylab = '', mgp=c(0.1,0.05,0)) axis(1,at=seq(-1,1),labels = seq(-1,1),pos=0,hadj=1.5,mgp=c(0.6,0.05,0)) axis(2,seq(1,2),labels = seq(1,2),pos=0,mgp=c(0.6,0.4,0),hadj = 1,las=1) #h为水平线的y值,v为垂直线的x值 abline(h=0); abline(v=0);lines(c(-1,0),c(0,2)); text(-0.7,1.5,'y=2x+2');text(-0.2,2.4,'y');text(1.2,-0.2,'x') arrows(0,2.2,0,2.5,length = 0.08);arrows(0.8,0,1.2,0,length = 0.08)

    #5为图形添加网格线 x=seq(-pi,pi,by=0.1) #nx/ny表示在x,y方向上的单元格数 plot(x,sin(x),type='l') grid(nx=4,ny=6,lwd=1,col = 'red')

    #6数学标注 x=seq(-pi,pi,by=0.1) plot(x,sin(x^2)+exp(0.1*x),type='l',main='',ylab='') title(main = expression(y==sin(x^2)+e^(0.1*x)))

    #7指定图形窗口尺寸 win.graph(width = 5,height = 3,pointsize = 8) plot(1:10,11:20) #8打开新的图形窗口 for(i in 1:5) dev.new()#产生一个图形设备 dev.list(); dev.cur(); #dev.list()列出所有图形设备编号,dev.cur()获取当前图形设备编号 dev.set(2);plot(1:10);dev.cur();dev.off() graphics.off()

    二、高级绘图

    1常用绘图函数

    #1常用绘图函数 #plot(f) f如果是因子,则产生直方图 f=as.factor(rbinom(40,9,0.5)) plot(f) #plot(f) f如果是数据框,则产生散点图 df=data.frame(x=rnorm(10),y=rt(10,5),z=rnorm(10,2,4)) plot(df)

    #coplot(expr,data=df)用来显示多元数据之间的条件散点图 #df是数据框变量或者矩阵 df=data.frame(hei=rnorm(50,130,10),wei=rnorm(50,30,9), grade=as.factor(sample(3:6,50,replace = TRUE)), class=as.factor(sample(1:3,50,replace = TRUE))) coplot(wei~hei|grade,data=df) coplot(wei~hei|grade+class,data=df)

    #dotchart(x,...)将绘制数值矩阵x的特殊点图,y轴显示矩阵的行标题 #x轴显示矩阵每列的数值,按列的顺序从左到右,将各列散点图自上而下地绘制到分列点图中 #这个图形特别适合相同分类指标的多组数据的直观比较 #构造一个具有4个指标的6组数据,指标名为A,B,C,D,数据名为group1~group6 n=4 mat=cbind(group1=rnorm(n,80,9),group2=rnorm(n,90,9), group3=rnorm(n,70,4),group4=rnorm(n,85,2), group5=rnorm(n,95,3),group6=rnorm(n,75,4)) rownames(mat)=c('A','B','C','D'); dotchart(mat)

    2条形图

    #2条形图 # barplot(height, width = 1, space = NULL, # names.arg = NULL, legend.text = NULL, beside = FALSE, # horiz = FALSE, density = NULL, angle = 45, # col = NULL, border = par("fg"), # main = NULL, sub = NULL, xlab = NULL, ylab = NULL, # xlim = NULL, ylim = NULL, xpd = TRUE, log = "", # axes = TRUE, axisnames = TRUE, # cex.axis = par("cex.axis"), cex.names = par("cex.axis"), # inside = TRUE, plot = TRUE, axis.lty = 0, offset = 0, # add = FALSE, args.legend = NULL, ...) # density:底纹的密度。默认值为NULL。 # angle:设置底纹的斜率。 # xlim和ylim:设置图形x轴与y轴的范围。 # xlab和ylab:设置x轴与y轴的lable。 # axes:逻辑参数。设置图形是否显示x轴或y轴。 # plot:逻辑参数。设置是否显示条形图。 # beside:逻辑参数。如果FALSE,那么将绘画堆叠式的条形;如果是TRUE,将绘画并列式条形。 # cex.axis:设置坐标轴数值的膨胀率。比如cex.axis=1.5。 # cex.names:设置条形标签(bar labels)的膨胀率。比如cex.axis=1.5. # col:设置条形底纹或者填充颜色。 # border:设置条形边缘颜色。如果设置为NA,则消除了边缘。 # width:设置条形的宽度。 # axis.lty:设置x轴的类型(类似lty)。默认axis.lty=0. # names.arg:设置条形标签(bar labels)。 # horiz:逻辑参数。设置图形是水平或是垂直。 # space:设置各个条形间的宽度。相当于各个条形宽度的一部分。 # axisnames:逻辑参数。设置是否显示条形标签。 # 实例演习: # 使用R软件自带数据VADeaths #低维数据的条形图绘制 d=rbinom(20,10,0.4) barplot(table(d),main = 'barplot(table(d))')

    #多维数据的条形图绘制 barplot(VADeaths,beside = TRUE,main = 'beside=TRUE') barplot(VADeaths,main = 'beside=FALSE')

    3箱线图

    #3箱线图 #一维箱线图 X=rnorm(100);#horizontal表示是否水平绘制,notch表示是否绘制切口形状 boxplot(X) boxplot(X,horizontal = TRUE) boxplot(X,notch=TRUE)

    #多维数据的箱线图 x=matrix(rnorm(100),ncol=4) boxplot(x) boxplot(x,horizontal=TRUE)

    4三维图形显示

    #4三维图形显示 outer(1:3,1:8,FUN="*")#外积运算 outer(1:3,1:8,function(x,y) 0.5*x*y) #自定义函数 # > outer(1:3,1:8,FUN="*")#外积运算 # [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] # [1,] 1 2 3 4 5 6 7 8 # [2,] 2 4 6 8 10 12 14 16 # [3,] 3 6 9 12 15 18 21 24 # > outer(1:3,1:8,function(x,y) 0.5*x*y) #自定义函数 # [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] # [1,] 0.5 1 1.5 2 2.5 3 3.5 4 # [2,] 1.0 2 3.0 4 5.0 6 7.0 8 # [3,] 1.5 3 4.5 6 7.5 9 10.5 12 #利用数据集中的volcano数据绘制image图形 image(t(volcano)[ncol(volcano):1,])#彩色 image(t(volcano)[ncol(volcano):1,],col=grey((0:32)/32))#灰色

    #画等高线图 x=-6:16 contour(outer(x,x),method="edge",vfont=c("sans serif","plain"))

    #3D曲面图 x=seq(-3,3,by=0.2) z=outer(x,x,FUN=function(x,y) exp(-(x^2+y^2)/2)/(2*pi))#二维正态密度图 persp(x,x,z,theta = 30,phi=5,expand = 0.7)

    #3D散点图, 以软件包scatterplot3d中的scatterplot3d()函数为例 attach(mtcars) scatterplot3d(wt,disp,mpg,main='简单3D散点图')

    #对scatterplot3d增加highlight.3d,type,pch等参数,还可以增加回归超平面,使得图形更加直观 par(mfrow=c(1,3))#一个图版显示1行3列 # 其中,通过设定函数par()的各个参数来调整图形 # mfrow=c(2,2) 是画4幅图, # mfrow=c(3,5),是画15幅图, # 例如 par(mfrow=c(2,3)) 一个图版显示2行,3列 scatterplot3d(wt,disp,mpg,highlight.3d=TRUE,type='h',main='简单3D散点图') scatterplot3d(wt,disp,mpg,highlight.3d=TRUE,type='h',pch=16,main='简单3D散点图') my3d=scatterplot3d(wt,disp,mpg,highlight.3d=TRUE,type='h',pch=16,main='简单3D散点图') fit=lm(mpg~wt+disp) my3d$plane3d(fit)

    #可以任意旋转的3D图 #软件包rgl可以将三维数据以3D形式展示,使用鼠标可以任意旋转3D图像 #实现空间数据的全方位透视 #主要使用plot3d()函数 f=function(x,y){ r<-sqrt(x^2+y^2);ifelse(r==0,10,10*sin(r)/r)} open3d() plot3d(f,col=colorRampPalette(c("blue","white","red")),xlab="X", ylab = "Y",zlab = "Sinc(r)",xlim = c(-10,10),ylim = c(-10,10),aspect = c(1,1,0.5))

    5 lattice软件包,提供的函数适用于多变量数据集绘图

    #histogram(~x|y)函数绘制y分类的x直方图 histogram(~iris[,1]|iris[,5],layout=c(3,1))

     

     

     

    X=sample(c('A','B','C'),size = 150,replace = TRUE) #bwplot绘制分组箱线图 bwplot(iris[,5]~iris[,1]|X,layout=c(3,1))

     

    #xyplot绘制二元图 #auto.key = list(corner=c(1,1)表示图例放置在右上角 #type=c('p','smooth')指定图的类型,p表示散点,smooth表示光滑曲线 #groups指定分组变量 xyplot(iris[,2]~iris[,1],auto.key = list(corner=c(1,1)), type=c('p','smooth'),groups = iris[,5])

     

    三、多图及特殊图形

     

     

    Processed: 0.015, SQL: 8