《R语言实战》第3章—— 图形初阶

3 图形初阶

#屏幕显示图形
attach(mtcars)  #将数据框添加到R的搜索路径中
plot(wt,mpg) #默认散点图
abline(lm(mpg~wt)) #最优拟合曲线
detach(mtcars) #将数据框从搜索路径中移除#保存图形####
setwd('D:/personal_file/R')  #设置工作目录
sink('myput',append = T,split=T) #重定向文本输出
jpeg('mtcars.jpg')  #重定向图形输出
attach(mtcars)  #绑定数据框
plot(wt,mpg)
abline(lm(mpg~wt)) #最优拟合曲线
title('grath')
detach(mtcars) #取消数据框绑定
dev.off()##创建多个窗口####
 #每个窗口显示一个图型
x11() 
dose<-c(20,30,40,50)
drageA<-c(16,20,27,40)
plot(dose,drageA,type='b')
x11()
dose<-c(20,30,40,50)
drageB<-c(15,18,31,40)
plot(dose,drageB,type='b')

3.1图形参数

#有两种方式控制
#方式1:高级绘图函数直接提供optionname=value的键值对
        #这种情况下只对这幅图本身有效,比如使用plot
dose<-c(20,30,40,50)
drageA<-c(16,20,27,40)
plot(dose,drageA,
	 type='b', #表示同时绘制点和线
     lty=2, #指定线条类型
     lwd=2, #线条宽度
     pch=23, #指定绘制点的符号
     col='blue', #线条颜色,指定边框颜色
     bg='red', #填充色
     col.axis='#006405', #坐标轴刻度颜色
     col.lab='#006400') #坐标轴名称颜色  #方式2:通过函数par()来指定这些选项,作用全局
dose<-c(20,30,40,50)
drageA<-c(16,20,27,40)
opar<-par(no.readonly=T) #保存当前图形参数设置。#no.readonly=T是可修改的当前图形参数列表
par(lty=2,pch=23,col='red') #修改默认图形参数
plot(dose,drageA,type='b')
par(opar) #还原初始图形参数设置#例子:使用图形参数控制多个图形外观
dose<-c(20,30,40,50)
drageA<-c(16,20,27,40)
drageB<-c(15,18,31,40)
opar<-par(no.readonly=T)
par(pin=c(2,3))
par(lwd=2,cex=1.5)
par(cex.axis=.75,font.axis=3)
par(mfcol=c(1,2))  #界面分割成1*2个图形区域即是1行2列(按列填充)
plot(dose,drageA,type='b',
     main='a',sub='my grath',#标题、副标题
     pch=22,lty=2,col='red',
     xlab='dosage',ylab='drug response', #坐标轴标签
     xlim=c(10,60),ylim=c(10,50) #x、y坐标轴范围
     ) 
plot(dose,drageB,main='b',type='b',pch=24,lty=6,
     col='blue',bg='green',
     xlab='dosage',ylab='drug response', 
     xlim=c(10,60),ylim=c(10,50))
par(opar)

3.2常用图形设置函数

par(pin=c(4,3),mai=c(1,0.5,1,0.2)) #图形尺寸与边界尺寸
title(main=,sub,xlab=,ylab=) #图形添加标题和坐标轴标签
axis(side=,at=,labels=) #自定义坐标轴,需禁用高级绘图函数自动生成的坐标轴
abline(h=,v=) #参考线
legend(location=,title=,legend=) #图例
text(wt,mpg,row.names(mtcars)) #添加数据标签#3.2.1通过标题函数设置参数
  #title用于默认标题和坐标轴标签被ann=FALSE选项移除的图形中
dose<-c(20,30,40,50)
drageA<-c(16,20,27,40)
plot(dose,drageA,type='b')
title(main='a',col.main='red', #标题、标题颜色
      sub='my grath',col.sub='blue', #副标题、副标题颜色
      xlab='x',ylab='y', #x、y轴
      clo.lab='green',cex.lab=0.75)#3.2.2自定义坐标轴####
#axis()创建自定义坐标轴时应禁用高级绘图函数自动生成的坐标轴

 #例1
x<-c(1:10)
y<-x
#y2<-x+1
z<-10/x
opar<-par(no.readonly=T)
par(mar=c(5,4,4,8)+0.1)
plot(x,y,type='b',
     pch=21,col='red',lty=5,bg='green',
     yaxt='n',ann=F #禁用Y轴(去除刻度留下框架线)
     ) 
lines(x,z,type='b',pch=22,col='blue',lty=2,bg='green')
#lines(x,y2,type='b',pch=22,col='orange',bg='green',lty=2)
axis(2,at=x,labels=x,col.axis='red',las=2) #添加自定义坐标轴
axis(4,at=z,labels=round(z,digits = 2),
     col.axis='blue',las=2,
     cex.axis=0.75,tck=-0.01)
mtext('y=10/x',side=4,line=3,las=2,col='blue') #在图形边界添加文本
abline(h=c(2,4,6,8)) #添加水平参考线
abline(v=seq(1,10,2),lty=2,col='blue') #添加垂直参考线
minor.tick(nx=3,ny=3,tick.ratio = 0.5) #添加次要刻度线
title(main='my data',xlab='x',ylab='y=x')
par(opar) #例2
dose<-c(20,30,40,50)
drageA<-c(16,20,27,40)
drageB<-c(15,18,31,40)
opar<-par(no.readonly=T)
par(lwd=2,cex=1,font.lab=2)
plot(dose,drageA,type='b',
     main='drug a vs b',
     pch=15,lty=1,col='purple',
     xlab='dosage',ylab='drug response',
     ylim=c(0,60))
lines(dose,drageB,type='b',pch=17,lty=2,col='plum')
abline(h=c(30),lwd=1.5,lty=2,col='gray')
minor.tick(nx=3,ny=3,tick.ratio = 0.5) #添加次要刻度线
legend('topright',inset=0.02,legend=c('A','B'),  #添加图例
       lty=c(1,2),pch=c(15,17),col=c('purple','plum'))
par(opar)#3.2.3添加图形标签####
attach(mtcars)
plot(wt,mpg,main='my data',
     xlab='weight',ylab='mileage',
     pch=18,col='blue')
text(wt,mpg,
     row.names(mtcars), #数据标签名称,无此项显示数值
     cex=0.6,pos=4,col='black')
detach(mtcars)

3.3颜色

#可以控制图形、坐标轴、标题等颜色
  #创建多阶连续彩虹型颜色
n<-10
mycolors<-rainbow(n)
pie(rep(1:n),labels=mycolors,col=mycolors)
  #创建多阶连续灰度色
n<-10
mygrays<-gray(0:n/n)
pie(rep(1:n),labels=mygrays,col=mygrays)
par(pin=c(4,3),mai=c(1,.5,1,.2))#使用brewer.pal(n,name)创建有颜色值的向量
n<-7
mycolors<-brewer.pal(n,'Set1')
barplot(rep(1,n),col=mycolors)

3.4创建多幅图的组合图

#3.4.1使用par()
   #par(mfrow=c(nrows,ncols))表示按行填充
   #par(mfcol=c(nrows,ncols))表示按列填充

attach(mtcars)
opar<-par(no.readonly = TRUE)
par(mfrow=c(2,2)) #2行2列排4幅图
plot(wt,mpg,main='A')
plot(wt,disp,main='B')
hist(wt,main='C')
boxplot(wt,main='D')
par(opar)
detach(mtcars) #3.4.2使用layout()
attach(mtcars)
layout(matrix(c(1,1,2,3),2,2,byrow=T)
       #,widths=c(3,1),heights=c(1,2)
       )  #一幅图被置于第一行,另两幅图被置于第二行
hist(wt,col='red')
hist(mpg,col='blue')
hist(disp,col='green')
detach(mtcars)#3.5图形布局精确控制fig####
opar<-par(no.readonly = TRUE)
par(fig=c(0,0.8,0,0.8)) #设定散点图绘图区域
attach(mtcars)
plot(wt,mpg,xlab = "miles per callon",ylab = "Car Weight")
 #fig=默认新建一幅图形,在添加一幅图到一幅现有图形上时,
  #请设定参数new=TRUE
par(fig=c(0,0.8,0.55,1),new=TRUE)
boxplot(wt,horizontal = TRUE,axes=FALSE)
par(fig=c(0.65,1,0,0.8),new=TRUE)
boxplot(mpg,axes=FALSE)
detach(mtcars)