R绘图基础—图形初阶

发布时间 2023-04-16 22:55:54作者: 灯新

《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)