R语言学习系列18图形元素.docx
《R语言学习系列18图形元素.docx》由会员分享,可在线阅读,更多相关《R语言学习系列18图形元素.docx(24页珍藏版)》请在冰豆网上搜索。
R语言学习系列18图形元素
18.图形元素
目录:
一.函数plot
二.颜色
三.点
四.文字
五.线条
六.图例
七.坐标轴
八.子图
九.图形保存
正文:
R语言具有强大的图形可视化功能,可以逐条输入语句构建图形元素(颜色、点、线、文字、及图例等),逐渐完善图形特征,直到得到想要的效果。
图形元素的显示可以用图形函数和par函数的绘图参数来改良,也可以用绘制图形元素的基础函数来控制。
一、函数plot()
绘制二维散点图,基本格式为:
plot(x,y=NULL,type="p",xlim=NULL,ylim=NULL,
log="",main=NULL,sub=NULL,xlab=NULL,ylab=NULL,
ann=...,axes=TRUE,frame.plot=axes,...)
其中,
x,y为坐标值,要求长度相同;
type指定图形的类型,默认为"p"(圆圈的点),"l"表示线,"b"表示点线,"c"表示挖去点的线,"o"穿过点的线,"s"和"S"表示两种阶梯形,"h"表示像直方图的竖线;
xlim设定x轴的范围;
ylim设定y轴的范围;
log="x"或"y"或"xy",设置坐标值用e的幂次形式显示;
main设定主标题;
sub设定副标题;
xlab设定x轴标签;
ylab设定y轴标签;
ann设置是否显示标题和坐标轴标签;
axes设置是否显示坐标轴;
frame.plot设置是否显示图形区域的外边框
二、颜色
1.绘图参数col用来设置图形元素的颜色
R语言自带657种颜色,用函数colors()可显示它们的名字。
R语言提供了固定调色板函数palette()包括8种颜色(可自定义,用palette("default")恢复默认),则用数字1~8表示相应的颜色。
palette()#默认包含的8种颜色
[1]"black""red""green3""blue""cyan""magenta""yellow""gray"
设置图形颜色的例:
attach(mtcars)
plot(wt,mpg,col="red")
points(wt[cyl==6],mpg[cyl==6],col=3)
points(wt[cyl==8],mpg[cyl==8],col=4)
cl=c("red","green","blue")
legend(5,35,c(4,6,8),pch=1,col=cl,bty="n")
detach(mtcars)
注:
若设定颜色的整数>8,将取余。
2.生成渐变颜色
R语言提供了一系列渐变颜色的生成函数,用来控制颜色值逐步变化。
(1)RGB模型(红绿蓝混合)
rgb(red,green,blue,alpha,max)
将RGB颜色转化为16进制数值;max指定最大值255或1;red,green,blue在[0,max]中取值;alpha为透明度,0表示完全透明,取max值表示完全不透明;
例如,rgb<-rgb(red=255,green=1:
255,blue=0,max=255)
生成"#FF0100""#FF0200"…"#FFFF00"共255个颜色值,依次使用它们实现渐变效果。
(2)彩虹色(赤橙黄绿青蓝紫)
rainbow(n,start,end,alpha)
(3)高温、白热化(红黄白)
heat.colors(n,start,end,alpha)
(4)地理图形(绿黄棕白)
terrain.colors(n,start,end,alpha)
(5)蓝青黄棕
topo.colors(n,start,end,alpha)
(6)青白粉红
cm.colors(n,start,end,alpha)
其中,n设定产生颜色的数目;start和end设定该类颜色的一个子集,生成的颜色将从该子集中产生;alpha为透明度。
(7)RColorBrewer包提供的3套配色方案
col=brewer.pal(n,name)
n为颜色数目(≥3);name为颜色组名。
用
display.brewer.all(type=...)
设定调色方案:
“seq”表示连续型(连续渐变);“div”表示极端型(用深色表示两端,浅色表示中间,可用来标记数据的离群点);“qual”表示离散型(生成一系列彼此差异比较明显的颜色,常用来标记分类数据)。
cl=brewer.pal(3,"Dark2")#使用RColorBrewer包配色方案
par(mfrow=c(1,1))
plot(wt,mpg,col=cl[1])
points(wt[cyl==6],mpg[cyl==6],col=cl[2])
points(wt[cyl==8],mpg[cyl==8],col=cl[3])
legend(5,35,c(4,6,8),pch=1,col=cl,bty="n")
cl=rainbow(3)#使用rainbow函数配色
plot(wt,mpg,col=cl[1])
points(wt[cyl==6],mpg[cyl==6],col=cl[2])
points(wt[cyl==8],mpg[cyl==8],col=cl[3])
legend(5,35,c(4,6,8),pch=1,col=cl,bty="n")
pie(rep(1,12),col=rainbow(12))
三、点
用函数points()在画布中添加点,基本格式为:
points(x,y,pch=…,cex=…,bg=…,font=…,lwd=…)
其中,
x,y为点的坐标位置;
pch指定点的样式,取0~25或"*","."等符号:
cex设定点的大小,默认为1(不缩放),小于1表示缩小,大于1表示放大;
col设定点边框填充的颜色;
bg设定点内部填充的颜色,仅限21~25号样式的点;
font设置字体,默认为1表示正常字体,2表示粗体,3表示斜体,4表示粗斜体;
lwd设置点边框的宽度,默认为1(不缩放),小于1表示缩小,大于1表示放大
attach(mtcars)
head(mtcars,3)
mpgcyldisphpdratwtqsecvsamgearcarb
MazdaRX421.061601103.902.62016.460144
MazdaRX4Wag21.061601103.902.87517.020144
Datsun71022.84108933.852.32018.611141
cyl<-as.factor(cyl)
cyl
[1]66468684466888888444488884448684
Levels:
468
plot(wt,mpg,col="white")
as.integer(cyl)
[1]22123231122333333111133331113231
points(wt,mpg,pch=as.integer(cyl),col=as.integer(cyl))
legend(5,35,c(4,6,8),pch=1:
3,col=1:
3,bty="n")
detach(mtcars)
或者使用绘图参数改变点的样式,结果是一样的:
plot(wt,mpg,pch=as.integer(cyl),col=as.integer(cyl))
legend(5,35,c(4,6,8),pch=2:
4,col=2:
4,bty="n")
四、文字
文字属性参数:
cex设定字体大小,默认为1(不缩放),小于1表示缩小,大于1表示放大;
col设定字体颜色;
font设置字体样式,默认为1表示正常字体,2表示粗体,3表示斜体,4表示粗斜体。
1.函数title()——给图形添加标题
基本格式为:
title(main=...,sub=...,xlab=...,ylab=...,
outer=FALSE,...)
其中,
main为主标题,sub为副标题,xlab为x轴标题,ylab为y轴标题,它们的值都是列表list(text,font=,col=,cex=,…);
outer,默认为FALSE,设置是否把标题在图形区域外面显示。
实例:
plot(c(0:
5),col="white",xlab="",ylab="")
title(main=list("主标题",cex=1.5),sub=list("副标题",cex=1.2),xlab="x轴标题",ylab="y轴标题")
2.函数text()——向图形任意位置添加文字
基本格式为:
text(x,y=NULL,labels=...,cex=1,col=NULL,font=NULL,...)
其中,x,y设定文字的位置;labels为文字内容。
实例:
plot(c(0:
5),col="white")
text(3,2,labels="font=4:
粗斜体字体",font=4,cex=1.5)
3.函数mtext()——向图形的四条边上添加文字
基本格式为:
mtext(text,side=3,line=0,cex=NA,col=NA,font=NA,...)
其中,
text为文字内容;
side设置哪一条边,1表示下,2表示左,3表示上,4表示右;
line设置文字与图形边缘的距离,默认为0
实例:
mtext("side=1:
下边",side=1,line=2);
mtext("side=2:
左边",side=2,line=2)
mtext("side=3:
上边",side=3);
mtext("side=4:
右边",side=4)
cyl=as.factor(cyl)
plot(wt,mpg,col="white",xlab="",ylab="")
text(wt,mpg,cyl,col=as.integer(cyl)+1)
title(main=list("MilesperGallonvs.WeightbyCylinder",cex=1.5),xlab="Weight",ylab="MilesperGallon")
#或者通过绘图参数实现相同的效果
plot(wt,mpg,pch=as.character(cyl),col=as.integer(cyl)+1,xlab="Weight",ylab="MilesperGallon",main="MilesperGallonvs.WeightbyCylinder",cex.main=1.5)
五、线条
线条属性参数:
lty设置线条样式,用数字表示:
lwd设置线条粗细,默认为1(正常宽度),小于1(变细),大于1(变粗)。
1.函数lines()——绘制曲线
基本格式为:
lines(x,y,type="l",lty=,lwd=,col=,...)
其中,x,y为点的坐标位置。
实例:
lines(x,y,lwd=1.5,lty=1,col="red")
plot(c(-4,4),c(-1,10),col="white")
x<-seq(-3,3,0.1)
y<-x^2
lines(x,y,lwd=1.5,lty=1,col="red")
2.函数abline()——绘制直线
基本格式为:
abline(a,b,h,v,reg=,coef=,lty=,lwd=,col=,...)
其中,
a为截距,b为斜率,即y=a+bx;
h为绘制水平线的纵轴值,v为绘制垂直线的横轴值;
reg和coef可用来提取线性回归的结果绘制直线,例如
z<-lm(dist~speed,data=cars)
plot(cars)
abline(reg=z)#同abline(z),也同下句:
abline(coef=coef(z))
实例:
plot(c(0:
10),col="white")
abline(h=c(3,5))
abline(v=c(4,7,9),lty=2,col="blue")
abline(a=2,b=1,lwd=1.5,col="red")
3.函数segment()——绘制线段
函数arrows()——绘制带箭头的线
基本格式为:
segments(x0,y0,x1,y1,lty=,lwd=,col=…)
arrows(x0,y0,x1,y1,angle=,length=,lty=,lwd=,col=…)
其中,
x0,y0为起点坐标,x1,y1为终点的坐标;
angle设置箭头与线段之间的夹角;
length设置箭头的长度。
实例:
plot(c(0:
10),col="white")
segments(2,1,4,8)
arrows(4,0,7,3,angle=30,lty=2,col="red")
arrows(4,2,7,5,angle=60,col="green")
4.函数grid()——给图形添加网格线
基本格式为:
grid(nx=,ny=nx,col="lightgray",lty="dotted",
lwd=,equilogs=TRUE)
其中,
nx设置水平网格的数目,ny设置垂直网格的数目;
euilogs默认为TRUE,表示当坐标取对数后,仍使用等距的网格线,若为FALSE表示根据对数函数使用不等距网格线。
实例:
plot(c(0:
10),col="white")
grid(nx=4,ny=8,lwd=1,lty=2,col="blue")
5.函数rug()——添加坐标轴须(小竖线),标示出相应坐标轴上的变量数值的具体位置,坐标轴须的分布意味着该变量的分布。
基本格式为:
rug(x,ticksize=0.03,side=1,lwd=,col=,...)
其中,
x为向量,给出坐标轴须的位置;
ticksize为坐标轴须的长度;
side指定坐标轴须位置,1表示x轴,2表示y轴,3表示顶端,4表示右端;
实例:
set.seed(123)
x<-rnorm(500)
plot(density(x))
rug(x,col="blue")
综合绘图的例:
attach(mtcars)
#mpg归一化
smpg=(mpg-min(mpg))/(max(mpg)-min(mpg))
plot(wt,smpg,ylab="mpg归一化")
lines(density(wt),col="red")#添加核密度曲线
arrows(1.8,0.05,1.5,0.1,angle=10,cex=0.5)
text(2,0.05,"核密度曲线",cex=0.6)
#添加回归线
abline(lm(smpg~wt),lty=2,col="green")
arrows(2,0.5,2,0.7,angle=10,cex=0.5)
text(2,0.45,"回归线",cex=0.6)
#wt与mpg负线性相关,添加最大最小值线段来表示该关系
segments(min(wt),max(smpg),max(wt),min(smpg),lty=3,col="blue")
arrows(3,0.8,2.5,0.76,angle=10,cex=0.5)
text(3.3,0.8,"最大最小值线段",cex=0.6)
grid(nx=4,ny=5,lty=2,col="grey")
detach(mtcars)
用plot函数使用图形参数,也可以分别绘制:
plot(density(wt),col="red")#核密度曲线
plot(wt,fitted(lm(smpg~wt)),type="l",lty=2,col="green")#回归线
plot(seq(min(wt),max(wt),length=100),seq(max(smpg),min(smpg),length=100),type="l",lty=3,col="blue")#最大最小值线
六、图例
图例一般放在图形的空白区域,用来标识每种图形符号分别代表什么,使用legend函数实现,基本格式为:
legend(x,y,legend,fill=NULL,col=,border="black",
lty,lwd,pch,bty="o",bg=,ncol=1,horiz=FALSE,
title=NULL,xpd,...)
其中,
x,y设置图例的位置(默认为左上角),也可使用“bottomright”、“bottom”、“bottomleft”、“left”、“topleft”、“top”、“topright”、“right”、“center”;
legend为字符向量,表示图例中的文字;
fill设置填充颜色;
col设置图例中点或线的颜色;
border设置边框颜色;
horiz设置图例的排列方式,默认FALSE(垂直排列),TRUE为水平排列;
ncol设置图例的列数目,若horiz=TRUE,该项无意义;
pch设置图例中点的样式,取值0~25;
lty设置图例中线的样式,取值0~6;
bg设置图例的背景颜色;
bty设置图例框的样式,默认“o”表示显示边框,“n”表示无边框;
xpd设置是否在区域外放置图例,默认FALSE;
title设置图例标题。
实例可参考【一、颜色】中的例。
七、坐标轴
设置主坐标轴(x轴,y轴)的范围和刻度标记,以及副坐标轴(右侧纵坐标)的相关属性,使用axis函数实现,基本格式为:
axis(side,at=NULL,labels=TRUE,tick=TRUE,
pos=,xlim=,ylim=,outer=FALSE,font=,col=,
lty="solid",lwd=1,lwd.ticks=,col.ticks=,axes=TRUE,
las=,xhat=,yhat=,xaxs=,yaxs=,...)
其中,
side表示哪个坐标轴,1,2,3,4分别表示下,左,上,右;
at设置坐标轴各刻度标记的位置;
labels设置坐标值各刻度的名称(与at参数一致);
tick设置是否画出坐标轴;
pos设置原点坐标;
xlim,ylim设置坐标轴范围,c(from,to);
outer设置是否将坐标轴绘制在图形区域之外;
font设置刻度标记的字体:
1正常,2粗体,3斜体,4粗斜体;
lty设置坐标轴的样式:
0不画线,1实线,2虚线,3点线;
lwd设置坐标轴的宽度:
1正常,小于1变细,大于1变粗;
lwd.ticks和col.ticks分别设置刻度线的宽度和颜色;
las设置标签是否平行于坐标轴:
0平行于坐标轴,1水平,2垂直于坐标轴,3竖直;
axes设置是否显示坐标轴;默认TRUE显示坐标轴;
xhat,yhat设置坐标值样式,默认“s”标准样式,“n”隐藏x或y轴;
xaxs,yaxs坐标轴长度,默认“r”数据范围再扩大4%,“1”原始数据范围。
实例:
plot(c(1:
12),col="white",xaxt="n",yaxt="n",ann=FALSE)#绘制空白画布,不要坐标轴
axis(1,at=1:
12,col.axis="red",labels=c("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"))
axis(2,at=seq(1,12,length=10),col.axis="red",labels=1:
10,las=2)
axis(3,at=seq(1,12,length=7),col.axis="blue",cex.axis=0.7,tck=-.01,labels=c("Mon","Tues","Wed","Thu","Fri","Sat","Sun"))
axis(4,at=seq(1,12,length=10),col.axis="blue",cex.axis=0.7,tck=-.01,labels=round(seq(0,1,length=10),1),las=2)
八、子图
要在一张画布上放置m×n个子图,可以用函数par和layout实现。
1.函数par()
该函数可以设置大多数绘图全局参数。
子图相关的参数:
mfrow/mfcol=c(m,n),把画布分为m×n份(m行n列),mfrow表示逐行从左到右作图,mfcol表示逐列从上到下作图;
mai/mar=c(b,l,t,r),设置图形边距,四个数分别为下、左、上、右边距,mai以英寸为单位,mar以行为单位;
mgp设置坐标轴位置,3维数值向量,分别为标题、刻度标签、刻度的位置;
oma设置外边界宽度,类似mar,默认为c(0,0,0,0)
实例:
mfrow1=par(mfrow=c(2,3))#将图形按2行3列排列
for(iin1:
6){
plot(c(1:
i),main=paste("I'mimage:
",i))
}
#改变图形边距
mar1<-par(mar=c(4,5,2,3))
for(iin1:
6){
plot(c(1:
i),main=paste("I'mimage:
",i))
}
par(mar1)#去除par()函数mar参数的设置mar1
#改变外边界宽度
oma1=par(oma=c(4,5,2,3))
for(iin1:
6){
plot(c(1:
i),main=paste("I'mimage:
",i))
}
par(oma1)#去除par()函数oma参数的设置oma1
#改变坐标轴位置
mgp1=par(mgp=c(1,2,3))
for(iin1:
6){
plot(c(1:
i),main=paste("I'mimage:
",i))
}
par(mgp1)#去除par()函数mgp参数的设置mgp1
par(mfrow1)#去除par()函数mfrow参数的设置mfrow1
2.函数layout()
该函数可以不均等地分割画布,基本格式为:
layout(mat,widths=rep.int(1,ncol(mat)),
heights=rep.int(1,nrow(mat)),respect=FALSE)
其中