#图形初阶
setwd(dir=“D:/Rcode”)#设置操作空间的路径
attach(mtcars)#对数据框进行绑定
plot(wt,mpg)
abline(lm(mpg~wt))
title(“Regression of MPG on weight”)
detach(mtcars)#对数据框解除绑定
#这里我们自己写一个数据框
year<-c(2019:2010)
major<-paste(“c”,1:10)
set.seed(123)#设置随机种子。设置了随机种子每次的随机数时相同的。
Pscore<-sample(40:50,10,replace=T)#replace=T表示产生的是整数
Escore<-sample(50:60,10,replace=T)
result<-data.frame(year,major,Pscore,Escore)
result
attach(result)
plot(Pscore,Escore)
abline(lm(Escore~Pscore))
title(“regression of Escore on Pscore”)
detach(result)
pdf(“result.pdf”)#图片保存为pdf格式
jpeg(“result.jpg”)#图片保存为jpg格式
attach(result)
plot(Pscore,Escore)
abline(lm(Escore~Pscore))
title(“regression of Escore on Pscore”)
detach(result)
dev.off()
#通过plot()或者boxplotz()
#来创建一幅新图形时,通常会覆盖掉先前的图形。
#防止图形被覆盖的方法
dev.new()#每次画图的时候新开一个窗口
plot(Pscore,Escore)
#3.2一个简单的例子,描述的是病人对两种药物不同剂量的响应
dose<-c(20,30,40,45,60)
drugA<-c(16,20,27,40,60)
drugB<-c(15,18,25,31,40)
#把这部分数据合成一个数据框
mark<-data.frame(dose,drugA,drugB)
dev.new()
p1<-plot(dose,drugA,type=“o”)#type 有多个选项:b是线条+点,p表示加点
#还有o,s,h,n类型可以分别跑一下看看
jpeg(“p1.jpg”)
?plot
#3.3图形参数
#通过par()函数对图形参数的指定
dev.new()
??par()
opar<-par(no.readonly=T)#no.readonly=T这一步使得图形参数可改
par(lty=“dashed”,pch=8)#参数lty的设置:可以用数字,
#也可以用字符串,设置对应的规则如下
#lty(0=blank, 1=solid (default), 2=dashed,
#3=dotted, 4=dotdash, 5=longdash, 6=twodash)
#or as one of the character strings
#“blank”, “solid”, “dashed”, “dotted”,
#“dotdash”, “longdash”, or “twodash”,
plot(dose,drugA,type=“b”)
par((opar))
#pch设置不同的图形
#cex设置par图形大小
#lwd设置线条的粗细,默认值=1
dev.new()
plot(dose,drugA,type=“b”,lwd=4,pch=8,cex=4)
#method 2
dev.new()
par(no.readonly=T,lty=6,lwd=3,pch=7,cex=2)
plot(dose,drugA,type=“b”)
#3.3.2颜色参数的设置
#col默认的绘图颜色
#col.axis坐标轴刻度文字的颜色
#col.lab 坐标轴标签的颜色
#col.main标题颜色
#col.sub 副标题颜色
#fg 图形的前景色
#bg 图形的背景色
#在R中,可以通过颜色下标,颜色名称,十六进制的颜色值,
#RGB值或HSV来指定颜色
#col=1,col=“white"col=”#FFFFFF"col=rgb(1,1,1)和col=hsv(0,0,1)
#以上均是白色的不同表示方法
colors()#用于返回所有的可用颜色的名称
#R语言的在线图图表网站
#http://rearch.stowers-institute.org/efg/R/Color/Chart
#R中还有很多创建连续性颜色向量的函数:包括rainbow()
#heat.colors(),terrain.colors(),topo.colors()以及cm.colors()
install.packages(“RColorBrewer”)
#RColorBrewer可以创建吸引人的颜色配对
library(RColorBrewer)
n<-7
mycolors<-brewer.pal(n,“Set1”)
barplot(rep(1,n),col=mycolors)
brewer.pal.info
#文本属性
#cex对数值和标签等进行缩放
#cex.axis 更改坐标轴刻度的缩放倍数
#cex.lab 坐标轴标签的缩放倍数
#cex.main 坐标轴标题的缩放倍数
#cex.sub 坐标轴副标题的缩放倍数
#font 更改字体的样式
#3.3.4图形尺寸与边界尺寸
#pin以英寸表示的图形
#mai以数值向量表示边界大小,顺序为下左上右,单位为英寸
#mar以数值向量表示边界大小,顺序为下左上右,单位为英分
par(pin=c(4,3),mai=c(1,.5,1,2))#参数设置
dose<-c(20,30,40,45,60)
drugA<-c(16,20,27,40,60)
drugB<-c(15,18,25,31,40)
setwd(dir=“D:/Rcode”)
dev.new()
opar<-par(no.readonly=T)
par(pin=c(2,3),mai=c(1,.5,1,2))
par(lwd=2,cex=1.5)##lwd设置线条的粗细,默认值=1
par(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”)
#pch设置散点图形,lty设置线条类型
par(opar)
#3.4添加文本,自定义坐标轴和图例
dev.new()
plot(dose,drugA,type=“b”,
col=“red”,lty=3,pch=9,lwd=2,
main=“Clinical Trials for Drug A”,
sub=“This is hypothetical data”,
xlab=“Dosage”,ylab=“Drug Response”,
xlim=c(0,60),ylim=c(0,70))
#这里的xlab,ylab设置的坐标轴标题,xlim和ylim设置了x与y轴的范围。
#3.4.1也可以使用title()函数为图形添加标题人和坐标轴标签
#调用格式为
#3.4.2坐标轴
#可以利用axis()创建坐标轴
#side一个整数,表示在图形的哪边绘制坐标轴(1=下,2=左,3=上,4=右)
#at 一个数值型向量,表示需要绘制刻度线的位置
#labels 一个字符向量,表示至于刻度线旁边的文字标签(如果为NULL,直接用at
#中的标签)
#pos坐标轴线绘制位置的坐标(即与另一条坐标轴相交位置的值)
#lty线条类型
#col线条与刻度线颜色
#las 标签平行(las=0)或垂直(las=1)于坐标轴
x<-c(1:10)
y<-x
z<-10/z
opar<-par(no.readonly=T)
par(mar=c(5,4,4,8)+0.1)
plot(x,y,type=“b”,
pch=21,col=“red”,
yaxt=“n”,lty=3,ann=F)
lines(x,z,type=“b”,pch=22,col=“blue”,lty=2)
dose<-c(20,30,40,45,60)
drugA<-c(16,20,27,40,60)
drugB<-c(15,18,25,31,40)
mark<-data.frame(dose,drugA,drugB)
attach(mark)
n1<-par(no.readonly=T)
#颜色part
dev.new()
plot(dose,drugA,type=“b”,xlab=“dose”,ylab=“drugA”,col.axis=“red”,
col.lab=“blue”,fg=“green”,bg=“pink”,
main=“point figure”, sub=“dose”,col.main=“red”,
col.sub=“blue”)
#文本属性font必须是整数
#font中1=常规,2=粗体,3=斜体,4=粗斜体,5=符号字体
plot(dose,drugA,type=“b”,xlab=“dose”,ylab=“drugA”,font.axis=2,
font.lab=2,font.main=2,font.sub=2,
col.axis=“red”,
col.lab=“blue”,fg=“green”,bg=“pink”,
main=“point figure”, sub=“dose”,col.main=“red”,
col.sub=“blue”)
#缩放cex
plot(dose,drugA,type=“b”,xlab=“dose”,ylab=“drugA”,font.axis=2,
font.lab=2,font.main=2,font.sub=2,
cex.lab=2,cex.main=4,cex.sub=0.5,cex.axis=2,
col.axis=“red”,
col.lab=“blue”,fg=“green”,bg=“pink”,
main=“point figure”, sub=“dose”,col.main=“red”,
col.sub=“blue”)
#3.4.1标题函数的使用
#title()
dev.new()
dose<-c(20,30,40,45,60)
drugA<-c(16,20,27,40,60)
drugB<-c(15,18,25,31,40)
plot(dose,drugA,type=“b”,pch=9,lty=2,lwd=2)
title(main=“Clinical Trials for Drug A”,
sub=“This is hypothetical data”,
cex.main=2.5,cex.sub=1.5,cex.lab=0.5,
xlab=“Dosage”,ylab=“Drug Response”,
col.main=“red”,col.sub=“blue”,
col.lab=“blue”)#只能是col.lab而不能是col.xlab
#坐标轴函数的使用
#axis()的使用
setwd(dir=“D:/Rcode”)
#side是一个整数,1=下,2=左,3=上,4=右
#at一个数值型向量,表示需要绘制刻度线的位置
#lables一个字符型向量,表示置于刻度线旁边的文字标签
#pos坐标抽绘制位置的坐标
#lty线条类型
#col线条和刻度线的颜色
#las,tck等
#实际的案例
dev.new()
x<-c(1:10)
y<-x
z<-10/x
Epar<-par(no.readonly=T)#生成一个可供修改的图形参数列表
par(mar=c(5,4,4,8)+0.1)
plot(x,y,type=“b”,
pch=21,col=“red”,
yaxt=“n”,lty=3,ann=F)
lines(x,z,type=“b”,pch=22,col=“blue”,lty=2)
axis(4,at=z,labels=round(z,digits=2),
col.axis=“blue”,las=2,cex.axis=0.7,tck=-0.01)
mtext(“y=1/x”,side=4,line=3,cex.lab=1,las=2,col=“blue”)
title(“An Example of Creative Axes”,
xlab=“X values”,
ylab=“Y=X”)
par(Epar)
#3.4.3参考线
#函数abline()用于添加参考线
abline(h=c(1,5,7))
#表示在y为1,5,7的位置添加了水平实线
#3.4.4图例
#legend()函数可以用于添加图例
#location指定图例位置
#title图例标题的字符串
#legend图例标签组成的字符型向量
#图例的实例
dev.new()
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=1.5,font.lab=2)#lwd表示线条的粗细
plot(dose,drugA,type=“b”,
pch=15,lty=1,col=“red”,ylim=c(0,60),
main=“DrugA vs. DrugB”,
xlab=“Drug Dosage”,ylab=“Drug Response”)
lines(dose,drugB,type=“b”,
pch=17,lty=2,col=“blue”)
abline(h=c(30),lwd=1.5,lty=2,col=“grey”)
library(Hmisc)
install.packages(“Hmisc”)
minor.tick(nx=3,ny=3,tick.ratio=0.5)
legend(“topleft”,inset=.05,title=“Drug Type”,c(“A”,“B”),lty=c(1,2),
pch=c(15,17),col=c(“red”,“blue”))
par(opar)
#3.4.5文本标注
#可以通过text()和mtext()函数将文本添加到图形上。
#text()可向绘制文本内添加文本
#mtext()则是向图形的四个边界之一添加文本
#案例
dev.new()
attach(mtcars)
plot(wt,mpg,
main=“Mileage vs. Car Weight”,
xlab=“Weight”,ylab=“Mileage”,
pch=18,col=“blue”)
text(wt,mpg,
row.names(mtcars),
cex=0.6,pos=4,col=“red”)
detach(mtcars)
#示例2
dev.new()
opar<-par(no.readonly=T)
par(cex=2)
plot(1:7,1:7,type=“n”)
text(3,3,“Example 1”)
text(5,5,“Example 2”)
text(6,6,“Example 3”)
par(opar)
#3.4.6数学标注
#plotmath()可以实现为图形主题或边界上添加数学符号
#3.5图形的组合
#par()函数和layout()函数可以实现将多幅图组合为一幅图
#案例实战
dev.new()
attach(mtcars)
opar<-par(no.readonly=T)
par(mfrow=c(2,2))#创建图形排列的行列mfrow=c(nrows,ncols)
plot(wt,mpg,main=“Scatterplot of wt vs. mpg”)
plot(wt,disp,main=“Scatterplot of wt vs. disp”)
hist(wt,main=“Histogram of wt”)
boxplot(wt,main=“Boxplot of wt”)
par(opar)
detach(mtcars)
#示例2
attach(mtcars)
opar<-par(no.readonly=T)
par(mfrow=c(3,1))
hist(wt)
hist(mpg)
hist(disp)
par(opar)
detach(mtcars)
#layout()函数
#layout(mat),mat是一个矩阵,规定了每个图形的位置
#示例3
dev.new()
attach(mtcars)
layout(matrix(c(1,1,2,3),2,2,byrow=T))
hist(wt)
hist(mpg)
hist(disp)
detach(mtcars)
#matrix(c(1,1,2,3),2,2,byrow=T)
#为了更加精确地控制每一幅图的大小,可以有选择地在layout()函数中
#使用widths和heights=两个参数
dev.new()
attach(mtcars)
layout(matrix(c(1,1,2,3),2,2,byrow=T),widths=c(3,1),heights=c(1,2))
hist(wt)
hist(mpg)
hist(disp)
detach(mtcars)
#图形布局的精细控制
dev.new()
opar<-par(no.readonly=T)
par(fig=c(0,0.8,0,0.8))
plot(mtcars w t , m t c a r s wt,mtcars wt,mtcarsmpg,
xlab=“Miles Per Gallon”,
ylab=“Car Weight”)
par(fig=c(0,0.8,0.55,1),new=T)
boxplot(mtcars w t , h o r i z o n t a l = T , a x e s = F ) p a r ( f i g = c ( 0.65 , 1 , 0 , 0.8 ) , n e w = T ) b o x p l o t ( m t c a r s wt,horizontal=T,axes=F) par(fig=c(0.65,1,0,0.8),new=T) boxplot(mtcars wt,horizontal=T,axes=F)p