1. 初建图形
R中自带了一些演示图形,通过如下程序可以调用:
demo("graphics")
demo("image")
1.1 图形的创建和保存
1.1.1 图形文件的保存
#图形保存
#保存成 PDF 文件
pdf("R语言在金融中的运用/sink.pdf") #开启语句
plot(1:10,2:11,type="l") #画图
dev.off() #关闭语句,必须有
#保存成 png 文件
png("E:/R CLASS/第一章/code/figure1.png")
plot(1:10,2:11,type="l") #画图
dev.off()
#保存成 jpeg 文件
jpeg("E:/R CLASS/第一章/code/figure1.jpg")
plot(1:10,2:11,type="l") #画图
dev.off()
#保存成 bmp 文件
bmp("E:/R CLASS/第一章/code/figure1.bmp")
plot(1:10,2:11,type="l") #画图
dev.off()
#保存成postscript文件
postscript("dir.ps") #保存为后缀名为.ps文件
1.1.2 图形创建
使用plot()
等函数创建图形时,创建完新图形后会覆盖掉先前的图形。
如果需要同时创建多个图形窗口,并可以随时查看任何一个图形,可以采用以下三种方法:
方法一:利用dev.new()
函数
dev.new()
plot(seq(1,10,2),seq(2,10,2),main="The Title",
xlab="X-axis Label",ylab="Y-axis Label")
dev.new()
plot(c(1:10),c(2:11),main="The Title",xlab="X-axis Label",
ylab="Y-axis Label")
dev.new()效果图
方法二:利用Rstudio右下角的文件功能区中的Plot
窗口操作
方法三:利用dev.cur()
系列函数
可以使用dev.cur()
系列函数中的dev.new()
、dev.next()
、dev.prev()
、dev.set()
和dev.off()
等函数来同时打开多个图形窗口,并选择将哪个发送到对应的窗口中。
2.1 高级绘图函数
- R中有两种绘图函数:
-
高级绘图函数:创建一个新图形,同时覆盖先前的图形,如果有的话。在初始化的图形窗口中设置标度,添加装饰,最后呈现图形。
-
低级绘图函数:在已经存在的图形上添加更多元素。
-
2.1.1 散点图:plot()
函数
1. plot()
函数
plot()
是一个泛型函数,生成图形的对象取决于所绘制对象的类型(class),x相同数据的不同形式在plot()
函数下得到的同样的结果。
png("Picture/Rgraph124.png")
plot(c(1,3,5,7,9),c(2,4,6,8,10),main="The Title",
xlab="X-axis Label",ylab="Y-axis Label")
dev.off()
plot散点图
2. 不同对象下图形
当数据类型本身发生变化时,作为泛型函数,plot()
会得到不同的图形。当plot()
面对的对象是"lm"
时,得到的回归诊断图。可用help(plot.lm)
进行查询。
3 . plot( )函数功能
函数 | 功能 |
---|---|
plot(x) | 以x值为纵坐标,序号为横坐标绘图 |
plot(x,y) | 以x值为横坐标,y值为纵坐标绘制散点图 |
plot(f) | f是一个因子对象,产生f的直方图 |
plot(f,y) | f是一个因子对象,y是数值向量,产生y在f各个水平下的箱线图 |
plot(data.frame) | 产生数据框中各变量的分布图 |
plot(~x1+x2+x3) | 对于形如x1+x2+x3的表列,产生各对象的分布图 |
plot(y~x1+x2+x3) | y可以是任何对象,分别产生y对于x1,x2,x3各对象的图 |
2.1.2 直方图:hist()
函数
直方图通过在x轴上建立一定数量的组别,在y轴上显示对应组别的频数来展示数值向量的分布。
-
hist(x, breaks = "Sturges",freq = NULL, probability = !freq,include.lowest = TRUE, right = TRUE,density = NULL, angle = 45, col = "lightgray", border = NULL,main = paste("Histogram of" , xname),xlim = range(breaks), ylim = NULL,xlab = xname, ylab,axes = TRUE, plot = TRUE, labels = FALSE,nclass = NULL, warn.unused = TRUE, ...)
-
hist()
函数参数说明参数 参数说明 breaks
设置每个柱形的间距,即柱宽,实际上就是x轴的等分数,所以 breaks
越大,柱形宽度越小freq
若为FALSE,表示y轴(柱形高度)为密度而不是频率 probability
若为FALSE,表示y轴是频率而不是频数 xlim
设置横轴范围 ylim
设置纵轴范围 axes
是否需要画坐标轴 plot
是否需要画图 nclass
改变分类数 density
和angle
设置柱形上的斜线密度和角度 border
设置柱形边界的颜色
png("Picture/Rfigure128.png",width=960,height=480)
par(mfrow=c(1,2))
x <- rnorm(1000)
hist(x,breaks=10,xlim=range(x),main="hist of x")
hist(x,breaks=30,xlim=range(x),main="hist of x")
dev.off()
hist函数画正态分布图
2.1.3 低级绘图函数
函数 | 功能 |
---|---|
points() | 添加点 |
lines() | 添加线 |
segments() | 添加线段 |
abline() | 添加直线 |
arrows() | 添加带箭头线段 |
polygon() | 添加封闭多边形 |
text() | 添加文字 |
函数曲线绘制:curve()
和abline()
函数
png("Picture/Rfigure129.png",width=400,height=200)
curve(sin,-2,2,col="red") #第二和第三参数为h
abline(a=0,b=1,col="blue",lty="dashed",lwd=2)
points(0,0,pch=1,lty="dashed",lwd=2)
dev.off()
point() 函数和abline() 函数
通过修改称为图形参数的选项来自定义一幅图形的多个特征(字体、颜色、坐标轴、标签)
2.1 函数par()
一种方法是通过函数par()
来指定这些选项。以这种方式设定的参数值除非被再次修改,否则会在会话结束前一直有效.
par(..., no.readonly = FALSE)
不加参数地执行par()
将生成一个含有当前图形参数设置的列表.
添加参数no.readonly=TRUE
可以生成一个可以修改的当前图形参数列表。
#产生如下数据
dose <- c(20,30,40,45,60)
drugA <- c(16,20,27,40,60)
drugB <- c(15,18,25,31,40)
opar <-par(no.readonlu=TRUE) #复制了一份当前的图形参数
png("Picture/Rp47.png",width = 480,height=480)
par(lty=2,pch=17) #将默认的线条类型修改为虚线,将默认的点符号修改成实心三角
#可以随意多次使用par()函数,上句也可写成
#par(lty=2)
#par(pch=17)
plot(dose,drugA,type="b") #绘制点并用线段连接
dev.off()
par(opar) #还原了原始设置
药物A剂量和响应的折线图
第二种方法是为高级绘图函数直接提供optionname=value
的键值对,这种情况下,指定的选项仅对这幅图形本身有效。通过一下代码作出与的图与上图相同。
plot(dose,drugA,type="b",lty=2,pch=17)
2.2 图形类型
plot()
中参数type
用于调整图片的类型,type
的参数如下表所示
type参数表
参数 | 参数含义 |
---|---|
p | 图片类型为点 |
l | 图片类型为线 |
b | 图片类型为点连线式 |
o | 图片类型为点线式,且线在点上 |
h | 图片类型为垂直线 |
s | 图片类型为阶梯式,垂直线顶端显示数据 |
S | 图片类型为阶梯式,垂直线底端显示数据 |
n | 不显示图形,只画出坐标轴,常与低级绘图函数一起使用 |
graph <- function(x){
plot(c(1:3),c(2:4),type=x,main=paste("type=",x,sep=""))
}
graphv <- Vectorize(graph)
png("Picture/p130_1.png",width=960,height = 480)
par(mfrow = c(2,4))
a <- c("p","l","b","o","h","s","S","n")
graphv(a)
dev.off()
type 参数指定的图形类型
2.3 符号参数
2.3.1 符号类型:pch
参数
参数pch可指定的绘图符号
#绘制类似图形的代码
png("Picture/p131.png",width=960,height = 480)
#绘制底图,将图形类型设置为只显示坐标轴,不显示图形内容,然后axes="F"禁止坐标轴生成
plot(c(0,5.5),c(0,5),type="n",main="pch=",xlab="",ylab="",axes="F",cex.main=2)
i <- 0
while (i<=25) {
j <- trunc(i/5)#i除5后取整
n <- 5-i%%5 #将5减去i除5的余数赋值给n
points(j+1,n,pch=i,cex=2);text(j+0.5,n,i,cex=2)
i <- i+1
}
dev.off()
参数pch可指定的绘图符号
2.4 文本属性
图形参数同样可以用来指定字号、字体和字样。cex用于控制文本大小的参数。字体族和字样可以通过字体选项进行控制。
2.4.1 符号和字符大小:cex
参数
cex
改变符号大小,默认为1,数值表示相对于默认大小的缩放倍数。
png("Picture/p131_2.png",width=960,height = 480)
par(mfrow=c(1,2))
plot(1,1,pch=2,cex=3)
plot(1,1,pch=2,cex=1)
dev.off()
参数cex为3和1时点大小对比
用于指定文本大小的参数表
参数 | 描述 |
---|---|
cex | 表示相对于默认大小缩放倍数的数值。默认大小为1,1.5 表示放大为默认值的1.5 倍,0.5 表示缩小为默认值的50%,等等 |
cex.axis | 坐标轴刻度文字的缩放倍数。类似于cex |
cex.lab | 坐标轴标签(名称)的缩放倍数。类似于cex |
cex.main | 标题的缩放倍数。类似于cex |
cex.sub | 副标题的缩放倍数。类似于cex |
2.4.2 指定字体族、字号和字样的参数:font
参数 | 描述 |
---|---|
font | 整数。用于指定绘图使用的字体样式。1=常规,2=粗体,3=斜体,4=粗斜体,5=符号字体(以Adobe符号编码表示) |
font.axis | 坐标轴刻度文字的字体样式 |
font.lab | 坐标轴标签(名称)的字体样式 |
font.main | 标题的字体样式 |
font.sub | 副标题的字体样式 |
ps | 字体磅值(1 磅约为1/72 英寸)。文本的最终大小为ps*cex |
family | 绘制文本时使用的字体族。标准的取值为serif(衬线)、sans(无衬线)和mono(等宽) |
我们可以轻松设置字号和字体样式,然而字体族的设置却稍显复杂。这是因为衬线、无衬线和等宽字体的具体映射是与图形设备相关的。在Windows系统中,等宽字体映射为TT Courier New,衬线字体映射为TT Times New Roman,无衬线字体则映射为TT Arial(TT代表True Type)。如果对这些映射满意,就可以使用类似于family="serif"这样的参数获得想要的结果。如果不满意,则需要创建新的映射。在Windows中,可以通过windowFont()来创建这类映射。
windowsFonts(
A=windowsFont("Arial Black"),
B=windowsFont("Bookamn Old Style"),
C=windowsFont("Comic Sans Ms")
)
#在执行上述语句之后,即可以使用A、B、C作为family的值
par(family="A") #制定绘图字体
2.5 线条参数
2.5.1 线条类型:lty
参数表
lty 参数 | |
---|---|
lty="solid" | lty=1 |
lty="dashed" | lty=2 |
lty="dotted" | lty=3 |
lty="dotdash" | lty=4 |
lty="longdash" | lty=5 |
lty="twodash" | lty=6 |
lty="blank" | lty=0 |
lty参数指定的图形类型
2.5.2 线条宽度:lwd
参数
lwd参数
默认为1,按倍数来设置宽度。
2.5.3 线条和符号颜色:col参数
col
参数说明表
参数 | 参数说明 |
---|---|
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)
都是表示白色的等价方式。函数
rgb( )
可基于红-绿-蓝三色值生成颜色,而hsv()
则基于色相-饱和度-亮度值来生成颜色。 -
函数
color()
可以返回所有可用颜色的名称。 -
R中有多种用于创建连续型颜色向量的函数:
rainbow()
、heat.colors
、topo.colors()
、cm.colors()
,rainbow(10)可生成10种连续的彩虹色。 -
RColorBrewer(生成颜色配对),使用brewer.pal(n,name)来创建一个颜色值的向量。
library(RColorBrewer) n <- 7 mycolors <- brewer.pal(n,"Set1") #从”set1"中抽取了7种用十六进制表示的颜色 barplot(rep(1,n),col=mycolors)
得到所有可选调色板的列表:
brewer.pal.info
显示产生每个调色板的图形:
display.brewer.all()
-
多阶灰度值可通过
gray()
函数生成,需要通过一个元素值为0和1之间的向量来指定各颜色的灰度。gray(0:10/10)
将生成10阶灰度色par(mfrow=c(1,2)) n <- 10 mycolors <- rainbow(n) pie(rep(1,n),labels = mycolors,col=mycolors) mygrays <- gray(0:n/n) pie(rep(1,n),label=mygrays,col=mygrays)
2.6 图形尺寸与边界尺寸
图形边空
一个单独的图由绘图区域(绘图的点、线等画在这个区域中)和包围绘图区域的边空组成, 边空中可以包含坐标轴标签、坐标轴刻度标签、标题、小标题等, 绘图区域一般被坐标轴包围。

边空的大小由mai
参数或mar
参数控制, 它们都是四个元素的向量, 分别规定下方、左方、上方、右方的边空大小, 其中mai
取值的单位是英寸, 而mar
的取值单位是文本行高度。
用于控制图形尺寸和边界大小的参数
参数 | 描述 |
---|---|
pin | 以英寸表示的图形尺寸(宽和高) |
mai | 以数值向量表示的边界的大小,顺序为"下、左、上、右",单位是英寸 |
mar | 以数值向量表示的边界的大小,顺序为"下、左、上、右",单位是英分。默认值是从c(5,4,4,2)+0.1 |
2.7 坐标轴设定与调整
使用参数main
添加标题,参数xlab
添加横坐标轴标签,使用参数ylab
添加纵坐标轴标签,也可通过xlim
、ylim
指定坐标轴范围。
curve(sin,-2,2,col="red",main="sinx",xlab='x')
lty参数指定的图形类型
某些高级绘图函数已经包含了默认的标题和标签,可以通过在plot()
语句或单独的par()
语句中添加ann=FALSE
来移除。
2.7.1 添加标题与坐标轴标签
可以使用title()
函数为图形添加标题和坐标轴标签。调用格式为:
title(main="main title",sub="subtitle",xlab="x-axis label",ylab="y-axis label")
函数title()
中也可以指定其他图形参数(如文本大小、字体、旋转角度和颜色等)。
函数title()
一般来说被用于添加信息到一个默认标题和坐标轴标签被ann=FALSE
选项移除的图形(因为可能发生默认标签与新加标签重叠)
2.7.2 坐标轴
可以使用函数axis()
来创建自定义的坐标轴:
axis(side,at=,labels=,pos=,lty=,col=,las=,tck=,...)
axis参数说明表
参数 | 描述 |
---|---|
side | 一个整数,指定在图形的哪边绘制坐标轴(1=下,2=左,3=上,4=右) |
at | 一个数值型向量,表明刻度线绘制的位置 |
labels | 一个字符型向量,表明置于刻度线旁边的标签(如果为NULL,则将直接使用at 中的值) |
tick | 一个逻辑值,表示是否画出坐标轴线和刻度线,默认为TRUE |
line | 坐标轴距离边距的行数(用于改变所画的图和坐标轴之间的间隔),line=NA表示没有间隔 |
pos | 坐标轴线绘制位置的坐标(即与另一条坐标轴相交位置的值) |
outer | 一个逻辑值,设置坐标轴是否画在外部边距中,outer=FALSE表示把坐标轴画在标准边距中 |
font | 文本的字体样式 |
lty | 坐标轴线和刻度线的类型 |
lwd | 坐标轴的线宽 |
lwd.ticks | 刻度线的线宽 |
tck | 刻度线的长度,以相对于绘图区域大小的分数表示(负值表示在图形外侧,正值表示在图形内侧,0表示禁用刻度,1表示绘制网格线);默认值为-0.01 |
col | 坐标轴的颜色 |
col.ticks | 刻度线的颜色 |
las | 坐标刻度标签的方向。0表示总是平行于坐标轴,1表示总是水平的,2表示总是垂直于坐标轴 |
… | 其他参数 |
在自定义坐标轴时,应当禁用高级绘图函数自动生成的坐标轴。参数axes=FALSE
将禁用全部坐标轴(包括坐标轴框架线,除非添加了frame.plot=TRUE)
.参数xaxt="n"
和yaxt="n"
将分别禁用X轴或Y轴(会留下框架线,只是去除了刻度)。
x <- c(1:10)
y <- x
z <- 10/x
opar <- par(no.readonly = TRUE)
par(mar=c(5,4,4,8)+0.1)
plot(x,y,type="b",pch=21,col="red",yaxt="n",lty=3,ann=FALSE)#绘制x对y的图形
lines(x,z,type="b",pch=22,col="blue",lty=2)#绘制x对1/x的图形
axis(2,at=y,labels = y,col.axis="red",las=2) #绘制y轴
axis(4,at=z,labels=round(z,digits = 2),col.axis="blue",las=2,cex.lab=1,las=2,
cex.axis=0.7,tck=-0.01) #绘制z轴
mtext("y=1/x",side=4,line=3,cex.lab=1,las=2,col="blue") #添加z轴标签
title("An Example of Creative Axes",xlab="X values",ylab="Y=X")
各坐标轴选项的演示
2.7.3 次要刻度线
要创建次要刻度线,需要使用Hmisc包中的minor.tick()
函数。
minor.tick(nx=n,ny=n,tick.ratio=n)
其中,nx和ny分别指定了X轴和Y轴每两条主刻度线之间通过次要刻度线划分得到的区间个数。
tick.ratio
表示次要刻度线相对于主刻度线的大小比例,当前主刻度线长度可以使用par("tck")
获取。
minor.tick(nx=2,ny=3,tick.ratio=0.5) #实现在X轴上每两条刻度线之间添加1条次要刻度线,在Y轴的每两条主刻度线之间添加2条次要刻度线,次要刻度线是主刻度线的一半。
2.8 参考线
函数abline()
可以用来为图形添加参考线,其使用格式为:
abline(h=yvalues,v=xvalues)
abline()
中也可以指定其他图形参数(如线条类型、颜色和宽度)
aline(h=c(1,5,7))
在y为1、5、7的位置添加了水平实线
abline(v=seq(1,10,2),lty=2,col="blue")
在x为1、3、5、7、9的位置添加了垂直的蓝色虚线
也可指定截距和斜率
abline(a=intercept,b=slope)
grid()
函数可在绘图的基础上添加网格,其主要的参数有nx(垂直网格的数目)和ny(水平网格的数目),当设置为NA时表示不绘制网格
png("Picture/Rj144.png",width=480,height = 480)
curve(sin,-2,2,col="grey45",main="Figure",xlab = "x",ylab="sinx")
abline(0,1,col="blue4",lty="dashed",lwd=2)
points(0,0,pch=1,cex=2,col="turquoise4")
grid(nx=5,ny=5,col="grey",lty=2,lwd=2)
dev.off()
添加网格线和标记点
2.9 图例
legend(location,title,legend,...)
图例选项表
参数 | 描述 |
---|---|
location | 有许多方式可以指定图例的位置。可以直接给定图例左上角的x,y坐标, 也可将此参数设置为locator(1) ,然后通过鼠标单击给出图例的位置, 还可以使用关键字"bottom" 、"bottomleft" 、"left" 、 "topleft" 、"top" 、"topright" 、"right" 、 "bottomright" 或"center" 放置图例,如果使用了上述莫个关键 字,那么可以同时使用参数inset= 指定图例向图形内侧移动的大小(以 绘图区域大小的分数表示) |
title | 图例标题的字符串(可选) |
legend | 图例标签所组成的字符型向量 |
fill= | 颜色值组成的向量,为图例创建颜色填充的盒形,(常见于条形图、箱线 图或饼图) |
col= | 颜色值组成的向量,图例标示的是颜色不同的线条 |
pch= | 符号代码组成的向量,用于图例标示的是符号不同的点 |
lwd= 、lty= | 宽度值或类型值组成的向量,用于图例标示的是不同的线条宽度或线条类型 |
angle | 阴影线的角度 |
density | 阴影线的密度 |
bty | 图例边框的类型 |
bg | 图例边框的背景色 |
cex | 指定大小 |
text.col | 指定文本颜色 |
horizen=TRUE | 水平放置图例 |
box.lwd | 边框线的宽度 |
box.lty | 边框线的类型 |
box.col | 边框线的颜色 |
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 = TRUE)
png("Picture/Rplot58.png",width = 480,height = 480)
par(lwd=2,cex=1.5,font.lab=2)
plot(dose,drugA,type="b",pch=15,lty=1,col='red',ylim = c(0,60),
main="Drug A vs. Drug B",
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="gray")
library(Hmisc)
minor.tick(nx=3,ny=3,tick.ratio = 0.5)
legend(20,60,title="Drug Type",c("A","B"),
lty=c(1,2),pch=c(15,17),col=c("red","blue"))
dev.off()
2.10 文本标注
text()
可向绘图区域内部添加文本,而mtext()
则向图形的四个边界之一添加文本:
text(location,"text to place",pos,...)
mtext("text to place",side,line=n,...)
函数text()
和mtext()
选项表
选项 | 描述 |
---|---|
location | 文本的位置参数。可为一对x,y坐标,也可通过指定location为locator(1)使用鼠标交互式地确定摆放位置 |
pos | 文本相对于参数位置的方位。1=下,2=左,3=上,4=右。如果指定了pos,就可以同时指定offset=作为偏移量,以相对于单个字符宽度的比例表示。 |
side | 指定用来放置文本的边。1=下,2=左,3=上,4=右。可以指定参数line=来内移或外移文本,随着值的增加,文本将外移。也可用adj=0将文本向左下对齐,或使用adj=1右上对齐 |
其他常用的选项有cex
、col
和font()
分别用来调整字号、颜色和字体样式)
-
可以利用
locator()
函数来进行快速定位:locator(n,type,...)
:n
表示定位点的个数,每单击一次,将获得一个点的位置type
表示在选择的点绘制指定的图形,默认不绘制
text()
函数也通常用来标示图形中的点。我们只需指定一系列x、y作为位置参数,同时以向量形式指定要放置的文本。x、y和文本标签向量的长度应当相同。
attach(mtcars)
png("Picture/RPlot59.png",width=480,height = 480)
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")
dev.off()
detach(mtcars)
2.11 数学标注
可以利用expression()
函数来添加数学符号
函数plotmath()
可以为图形主体或边界上的标题、坐标轴名称或文本标注添加数学符号。
使用demo(plotmath)
调出下图:
2.12 图形组合
R可以在同一页面开若干个按行、列排列的窗格, 在每个窗格中可以作一幅图。 每个图有自己的内边空, 而所有图的外面可以包一个“外边空”。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G13HiGw0-1635920189233)(D:\Rwork\Picture\img-figpanel.jpg)]
使用函数par()
或layout()
可以组合多幅图形为一幅总括的图形。
2.12.1 利用par()
函数
在par()
函数中使用图形参数mfrow=c(nrows,ncols)
来创建按行填充的、行数为nrows
、列数为ncols
的图形矩阵。mfcol=c(nrows,ncols)
按列填充矩阵。 用oma
指定四个外边空的行数。 用mtext
加outer=T
指定在外边空添加文本。 如果没有outer=T
则在内边空添加文本。
按行两行两列排列:
png("Picture/Rplot62.png",width = 960,height = 960)
attach(mtcars)
opar <- par(no.readonly = TRUE)
par(mfrow=c(2,2))
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)
dev.off()
按列三行一列排列:
png("Picture/RPlot63.png",width = 480,height = 960)
attach(mtcars)
opar <- par(no.readonly = T)
par(mfrow=c(3,1))
hist(wt)
hist(mpg)
hist(disp)
par(opar)
detach(mtcars)
dev.off()
2.12.2 利用layout()
函数
其调用形式为layout(mat)
,其中的mat
是一个矩阵,它指定了所要组合的多个图形所在的位置。
png("Picture/RPlot64.png",width = 960,height = 480)
attach(mtcars)
layout(matrix(c(1,1,2,3),2,2))
hist(wt)
hist(mpg)
hist(disp)
detach(mtcars)
dev.off()
使用函数layout()组合的三幅图形,各列宽度为默认值
-
为了更精确地控制每幅图形的大小,可以有选择地在
layout()
函数中使用widths=
和heights=
两个参数,形式为:widths=各列宽值组成的一个向量
heights=各行高度值组成的一个向量
相对宽度可以直接通过数值指定,绝对宽度(以厘米为单位)可以通过函数lcm()
来指定
#第一行图形是第二行图形高度的1/2,第一列图形的宽度是第二列图形宽度的2倍
attach(mtcars)
layout(matrix(c(1,1,2,3),2,2,byrow = TRUE),widths = c(3,1),heights = c(1,2))
hist(wt)
hist(mpg)
hist(disp)
detach(mtcars)
使用函数layout()组合的三幅图形,各列宽度为默认值
2.12.3 图形布局的精细控制
要通过排布或叠加若干图形来创建单幅的、有意义的图形,需要有对图形布局的精细控制的能力。可以使用图形参数fig=
完成这个任务。
opar <- par(no.readonly = TRUE)
par(fig=c(0,0.8,0,0.8))
plot(mtcars$wt,mtcars$mpg,xlab="Miles Per Gallon",ylab="Car weight")
par(fig=c(0,0.8,0.55,1),new=TRUE)
boxplot(mtcars$wt,horizontal = T,axes=F)
par(fig=c(0.65,1,0,0.8),new=T)
boxplot(mtcars$mpg,axes=F)
mtext("Enhanced Scatterplot",side=3,outer=T,line=-3)
par(opar)
边界上添加了两幅箱线图的散点图
fig
原理:
使用图形参数fig=指定位置
3. 包含多种中文字体的图形
为了使用MS Windows系统字体, 一种办法是安装showtext包。 该包替换画图时的添加文本函数命令, 把文本内容替换成多边形(PDF或PS图)或点阵(点阵图)。
需要的工作:
- 查看Windows的font目录内容,看文件名与字体名的对应关系。 下面的程序中的列表是我的中文Windows 10的部分中文字体。
- 找到自己希望使用的中文字体的文件名。
- 用font.add()命令,增加一套自定义字体family, 一套中可以指定四种:常规(regular), 粗体(bold), 斜体(italic), 粗斜体(bolditalic)
- 程序中调入showtext包并运行
showtext.auto()
命令,这个命令使得文本命令采用showtext包 - 用par(family=)指定自定义的字体family。
- 作图(主要是PDF)。关闭图形设备。
test.chinese <- function(){
require(showtext); showtext.auto()
## 建立文件名到字体名对照表
fmap <- c(
'msyh'='微软雅黑常规',
'msyhbd'='微软雅黑粗体',
'msyhl'='微软雅黑细体',
'simsun'='宋体',
'simfang'='仿宋',
'simkai'='楷体',
'simhei'='黑体',
'SIMLI'='隶书',
'SIMYOU'='幼圆',
'STSONG'='华文宋体',
'STZHONGS'='华文中宋',
'STFANGSO'='华文仿宋',
'STKAITI'='华文楷体',
'STXIHEI'='华文细黑',
'STLITI'='华文隶书',
'STXINGKA'='华文行楷',
'STXINWEI'='华文新魏',
'STCAIYUN'='华文彩云',
'STHUPO'='华文琥珀'
)
fmapr <- names(fmap); names(fmapr) <- unname(fmap)
cat('==== 字体文件名与字体名称对应:\n')
print(fmap)
cat('==== 字体名与字体文件名对应:\n')
print(fmapr)
## 找到某个字体的字体文件
## font.name是字体名称
find.font <- function(font.name){
fname <- fmapr[font.name]
flist0 <- font.files()
flist1 <- sapply(strsplit(flist0, '[.]'), function(it) it[1])
flist0[flist1==fname]
}
ff1 <- find.font('宋体')
ff2 <- find.font('黑体')
ff3 <- find.font('仿宋')
ff4 <- find.font('隶书');
font.add('cjk4',
regular=ff1,
bold=ff2,
italic=ff3,
bolditalic=ff4)
##browser()
pdf('test-chinese.pdf'); on.exit(dev.off())
par(family='cjk4')
plot(c(0,1), c(0,1), type='n',
axes=FALSE, xlab='', ylab='')
text(0.1, 0.9, '正体', font=1)
text(0.1, 0.8, '粗体', font=2)
text(0.1, 0.7, '斜体', font=3)
text(0.1, 0.6, '粗斜体', font=4)
}
test.chinese()
注意:图形参数font=1表示正体, font=2表示粗体, font=3表示斜体, font=4表示粗斜体。
4. 基本图形
4.1 条形图
条形图通过垂直的或水平的条形展示了类别型变量的分布(频数)。函数barplot()
的最简单用法是:
barplot(heigt)
,其中height
是一个向量或一个矩阵。
barplot()
函数参数介绍
参数 | 描述 |
---|---|
height | 向量或矩阵,如果是矩阵,在矩阵前提下若beside=FALSE ,条形分段画出,若beside=TRUE ,条形依次画出 |
width | 向量,表示条形的宽度 |
beside | 逻辑值,设置列应该是分段显示还是依次画出,只有当height 是矩阵时才有用 |
col | 表示线条颜色 |
border | 表示条形边框的颜色 |
main | 字符,标题 |
sub | 字符,副标题 |
xlab | 字符,x轴的标签 |
ylab | 字符,y轴的标签 |
xlim | x轴的范围 |
ylim | y轴的范围 |
horiz | 逻辑值,设置条形的方向,若horiz=FALSE ,条形从左到右垂直排列,若horiz=TRUE ,条形从下到上水平排列 |
legend | 逻辑值,legend=FALSE 表示不添加图例,legend=TRUE 表示添加图例 |
cex.axis | 数值,表示坐标轴标签相对于其他文字的大小 |
cex.names | 数值,表示坐标轴名称相对于其他文字的大小1 |
… | 其他参数 |
4.1.1 简单的条形图
若height
是一个向量,则它的值就确定了各条形的高度,并将绘制一幅垂直的条形图。使用选项horiz=TRUE
则会生成一幅水平的条形图。
library(vcd)
counts <- table(Arthritis$Improved)
counts
opar <- par(no.readonly = TRUE)
png("Picture/Rplot111",width = 960,height = 480)
par(mfrow=c(1,2))
barplot(counts,main = "Simple Bar Plot",
xlab="Improvement",ylab="Frequency")
barplot(counts,main = "Horizontal Bar Plot",xlab="Frequency",
ylab="Improvement",horiz = TRUE)
简单的垂直条形图和水平条形图
若要绘制的类别型变量是一个因子或有序型因子,就可以使用函数plot()
快速创建一幅垂直条形图。
#由于Arthritis$Improved是一个因子,所以plot()可以完成
par(mfrow=c(1,2))
plot(Arthritis$Improved,main="Simple Bar Plot",
ylab="Improved",xlab="Frequency")
plot(Arthritis$Improved,main="Simple Bar Plot",
ylab="Improved",xlab="Frequency",horiz=T)
简单的垂直条形图和水平条形图
4.1.2 堆砌条形图和分组条形图
如果height
是一个矩阵而不是一个向量,则绘图结果将是一幅堆砌条形图或分组条形图。若beside=FALSE
,则矩阵中的每一列都将生成图中的一个条形,各列中的值将给出堆砌子条的高度。若beside=TRUE
,则矩阵中的每一列都代表一个分组,各列中的值将并列而不是堆砌。
library(vcd)
couts <- table(Arthritis$Improved,Arthritis$Treatment)
counts <- table(Arthritis$Improved,Arthritis$Treatment)
counts
par(mfrow=c(1,2),mai=c(1,0.5,1,0.5))
barplot(counts,main="Stacked Bar Plot",xlab="Treatment",ylab="Frequency",col=c("red","yellow","green")
)
barplot(counts,main="Stacked Bar Plot",xlab="Treatment",ylab="Frequency",col=c("red","yellow","green"),
beside=T)
legend("top",rownames(counts),fill=c("red","yellow","green"))
堆砌条形图和水平条形图
4.1.3 均值条形图
可以使用数据整合函数并将结果传递给barplot()
函数,来创建表示均值、中位数、标准差等的条形图。
排序后均值的条形图:
states <- data.frame(state.region,state.x77)
means <- aggregate(states$Illiteracy,by=list(state.region),FUN=mean)
means
# Group.1 x
# 1 Northeast 1.000000
# 2 South 1.737500
# 3 North Central 0.700000
# 4 West 1.023077
means <- means[order(means$x),]
means
# Group.1 x
# 3 North Central 0.700000
# 1 Northeast 1.000000
# 4 West 1.023077
# 2 South 1.737500
barplot(means$x,names.arg=means$Group.1)
lines(means$x,lty=2,lwd=1.2)
title("Mean Illiteracy Rate")
美国各地区平均文盲率排序的条形图
4.1.4 条形图的微调
cex.names
可以用来减小字号,将其指定为小于1的值可以缩小标签的大小。
names.arg
允许指定一个字符向量作为条形的标签名
library(vcd)
png("Picture/R25_114.png",width = 560,height = 480)
par(mar=c(5,8,4,2)) #增加y边界的大小
par(las=2) #旋转条形的标签
counts <- table(Arthritis$Improved)
barplot(counts,main = "Treatment Outcome",
horiz = T,
cex.names=0.8,
names.arg = c("No Improvement","Some Improvement","Marked Improvement"))
dev.off()
微调了标签的垂直条形图
4.1.5 棘状图(spinogram)
棘状图对堆砌2条形图进行了重缩放,这样每个条形的高度均为1,每一段的高度即表示比例,可由vcd
包中的函数spine()
绘制。
attach(Arthritis)
counts <- table(Treatment,Improved)
spine(counts,main="Spinogram Example")
detach(Arthritis)
关节炎治疗结果的棘状图
4. 2 饼图
饼图可以由该函数创建:
pie(x, labels = names(x), edges = 200, radius = 0.8,clockwise = FALSE, init.angle = if(clockwise) 90 else 0,density = NULL, angle = 45, col = NULL, border = NULL,lty = NULL, main = NULL, ...)
pie
函数参数介绍
参数 | 描述 |
---|---|
x | 非负整数向量,表示每个扇形的面积 |
labels | 生成标签的表达式,字符串向量 |
edges | 数值,表示用多少条线段来绘制饼图边框(构成圆的线段数,即多边形的边数) |
radius | 数值,表示饼图的大小(当这个值大于1时,饼图的某个部分会被裁剪掉) 饼图是画在一个方框的中心,方框的边长范围是-1到1。如果标记片的字符串很长,可能需要使用较小的半径 |
clockwise | 逻辑值,表示分块绘制的方向是顺时针还是逆时针(默认逆时针) |
init.angle | 数值,设置分块的起始角度(以度数为单位)的数字。逆时针时默认值为0(即3点钟方向),如果init. clock为true,即顺时针角度默认为90度(即“12点方向”) |
density | 阴影线的密度,以每英寸线为单位。默认值NULL表示没有绘制阴影线。非正密度值也会抑制阴影线的绘制。 |
angle | 阴影线的斜率,以角度(逆时针方向)表示 |
col | 数值,表示每一块的颜色,默认为NULL ,此时使用的是一个6色调色板 |
border | (可能是向量)参数,用于指定绘制每个分块的多边形 |
lty | 表示分块的线条类型 |
main | 标题 |
par(mfrow=c(2,2))
slices <- c(10,12,4,16,8)
lbls <- c("US","UK","Australia","Germany","France")
pie(slices,labels=lbls,main="Simple Pie Chart")
pct <- round(slices/sum(slices)*100)
lbls2 <- paste(lbls,"",pct,"%",sep="")
pie(slices,labels=lbls2,col=rainbow(length(lbls2)),main="3D Pie Chart")
library(plotrix)
pie3D(slices,labels=lbls,explode=0.1,main="3D Pie Chart")
mytable <- table(state.region)
lbls3 <- paste(names(mytable),"\n",mytable,sep="")
pie(mytable,label=lbls3,main="Pie Chart from a Table \n (with sample sizes)")
饼图示例
提供了一种同时展示相对数量和相互差异的方法.
通过plotrix
包中的fan.plot()
函数实现:
fan.plot(x,edges=200,radius=1,col=NULL,align.at=NULL,max.span=NULL,labels=NULL,labelpos=NULL,label.radius=1.2,align="left",shrink=0.02,main="",ticks=NULL,include.sumx=FALSE,...)
参数 | 含义 |
---|---|
x | 作图向量 |
edges | 用来画圆的边数 |
radius | 扇区的半径 |
col | 用来填充扇区的颜色 |
align.at | 在哪里对齐扇区 |
max.span | 以弧度为单位的最大扇形的角度。默认值是缩放x,使其和为2* π \pi π |
labels | 向量,指定放置在扇形弧周围的标签 |
labelpos | 标签的可选圆周位置 |
label.radius | 指定标签将放置在离扇区多远的地方。可能是一个指定了每个标签的半径的向量 |
align | 扇区对齐的位置 |
shrink | 每个连续的扇形区域的半径要收缩多少 |
main | 可选标题 |
ticks | The number of ticks that would appear if the sectors were on a pie chart. Default is no ticks, TRUE gives the number of ticks equal to the integer sum of x, which is fairly sensible if x is a vector of integers. |
include.sumx | 是否将所有x值的总和作为最大扇区 |
library(plotrix)
slices <- c(10,12,4,6,8)
lbls <- c("US","UK","Australia","Germany","France")
png("Picture/R11_1_117.png")
fan.plot(slices,labels=lbls,main="Fan Plot")
dev.off()
国别数据的扇形图
在一幅扇形图中,各个扇子相互叠加,并对半径做了修改,这样所有的扇形就都是可见的.扇形的宽度重要,半径不重要.
4.3 直方图
通过在x轴上将值域分割为一定数量的组,在y轴上显示相应值的频数,展示了连续型变量的分布.
hist(x)
具体参数见2.1.2
par(mfrow=c(2,2))
#1.简单直方图
hist(mtcars$mpg)
#2.指定组数和颜色
hist(mtcars$mpg,
breaks = 12,
col="red",
xlab="Miles Per Gallon",
main="Colored histogram with 12 bins")
#3.添加轴须图
hist(mtcars$mpg,
freq=F,
breaks = 12,
col="#808080",
xlab="Miles Per Gallon",
main="Histogram,rug plot,density curve")
rug(jitter(mtcars$mpg))
lines(density(mtcars$mpg),col="#666666",lwd=2)
#4.添加正态密度曲线和外框
x <- mtcars$mpg
h <- hist(x,
breaks=12,
col="#CCCCCC",
xlab="Miles Per Gallon",
main="Histogram with normal curve and box")
xfit <- seq(min(x),max(x),length=40)
yfit <- dnorm(xfit,mean=mean(x),sd=sd(x))
yfit <- yfit*diff(h$mids[1:2])*length(x)
lines(xfit,yfit,col="#999999",lwd=2)
box()
直方图示例
-
第一幅直方图展示了未指定任何选项时的默认图形,并且显示了默认的标题和坐标轴标签.
-
第二幅直方图中将组数指定为12,使用红色填充条形.
-
第三幅图形叠加了一条密度曲线和轴须图(rug plot).密度曲线是一个核估计,为数据的分布提供了一种更加平滑的描述.轴须图是实际数据值的一种一维呈现方式.如果数据中有很多结(出现相同的值,称为结(tie)),可以使用如下代码将轴须图的数据打散:
rug(jitter(mtcars$mpg,amount=0.01))
这样将向每个数据点添加一个小的随机值(一个 ± a m o u n t \pm amount ±amount之间的均匀分布随机数),以避免重叠的点产生影响.
- 第四幅直方图添加了一条正态曲线和一个将图形围绕起来的盒型.用于叠加正态曲线的代码来源于R-help邮件列表上由Peter Dalgaard发表的建议.盒型是使用
box()
函数生成的.
4.4 核密度图
核密度估计是用于估计随机变量概率密度函数的一种非参数方法.
绘制密度图的方法(不叠加到另一幅图形上方):
plot(density(x))
其中的x是一个数值向量.可以使用lines()
函数在一幅已经存在的图形上叠加一条密度曲线.
png("Picture/R11_1_120.png",height = 480,width=960)
par(mfrow=c(2,1))
d <- density(mtcars$mpg)
plot(d)
plot(d,main = "Kernel Density of Miles Per Gallon")
#将曲线修改为蓝色,并使用实心灰色填充曲线下方区域
polygon(d,col="#666666",border = "#00FFFF")
rug(mtcars$mpg,col="brown")
dev.off()
核密度图
polygon()
函数根据顶点的x和y坐标(本例中由density()
函数提供)绘制了多边形.
可比较的核密度图
sm
包中的sm.density.compare()
函数可向图形叠加两组或更多的核密度图,从而用于比较组间差异.
使用格式为:sm.density.compare(x,factor)
其中的x是一个数值型向量,factor是一个分组变量.
library(sm)
attach(mtcars)
#创建分组因子
cyl.f <- factor(cyl,levels=c(4,6,8),
labels=c("4 cylinder","6 cylinder","8 cylinder"))
#绘制密度图
sm.density.compare(mpg,cyl,xlab="Miles Per Gallon")
title(main="MPG Distributin by car Cylinders")
#添加图例
colfill <- c(2:(1+length(levels(cyl.f))))
legend(30,0.17,levels(cyl.f),fill=colfill)
detach(mtcars)
按汽缸个数划分的各车型每加仑汽油行驶英里数的核密度图
4.5箱线图
又称为盒须图,通过绘制连续型变量的五数总括,即最小值、下四分位数(第25百分位数)、中位数(第50位百分数)、上四分位数(第75位百分位数)以及最大值,描述了连续型变量的分布.箱线图能够显示出可能为离群点(范围 ± 1.5 × I Q R \pm1.5\times IQR ±1.5×IQR以外的值, I Q R IQR IQR表示四分位距,即上四分位数与下四分位数的差值)的观测.
boxplot(mtcars$mpg,main="Box plot",ylab="Miles per Gallon")
生成下图.
含手工标注的箱线图
默认情况下,两条须的延伸极限不会超过盒型各端加1.5倍四分位距的范围.此范围以外的值将以点来表示.
执行boxplot.stats(mtcars$mpg)
即可输出用于构建图形的统计量.
4.5.1 使用并列箱线图进行跨图比较
箱线图可以展示单个变量或分组变量.使用格式为:
boxplot(formula, data = dataframe, ..., subset, na.action = NULL, xlab = mklab(y_var = horizontal), ylab = mklab(y_var =!horizontal), add = FALSE, ann = !add, horizontal = FALSE, drop = FALSE, sep = ".", lex.order = FALSE)
其中formula
是一个公式,dataframe
代表提供数据的数据框(或列表).
公式y~A
将为类别型变量A的每个值并列地生成数值型变量y的箱线图.
公式y~A*B
则将为类别型变量A和B所有水平的两两组合生成数值型变量y的箱线图.
添加参数varwidth=TRUE
将使箱线图的宽度与其样本大小的平方根成正比.
参数horizontal = TRUE
可以反转坐标轴的方向.
在以下代码中,我们使用并列箱线图重新研究了四缸、六缸、八缸、发动机对每加仑汽油行驶的公里数的影响.
boxplot(mpg~cyl,data=mtcars,main="Car Mileage Data",
xlab = "Number of Cylinders",
ylab = "Miles Per Gallon")
不同汽缸数量车型油耗的箱线图
箱线图灵活多变,通过添加notch=TRUE
,可以得到含凹槽的箱线图.若两个箱的凹槽互不重叠,则表明它们的中位数有显著的差异.
boxplot(mpg~cyl,data=mtcars,
col="#D3D3D3",
notch=TRUE,
varwidth=T,
main="Car Mileage Data",
xlab = "Number of Cylinders",
ylab = "Miles Per Gallon")
不同汽缸数量车型油耗的含凹槽箱线图
可以为多个分组因子绘制箱线图.以下代码为不同缸数和不同变速箱类型的车型绘制了每加仑汽油行驶英里数的箱线图.同样地,这里使用参数col
为箱线图进行着色.注意颜色的循环使用.在本例中,共有六幅箱线图和两种指定的颜色,所以颜色将重复使用3次.
# 两个交叉因子的箱线图 --------------------------------------------------------------
#创建汽缸数量的因子
mtcars$cyl.f <- factor(mtcars$cyl,
levels=c(4,6,8),
labels=c("4","6","8"))
#创建变速箱类型的因子
mtcars$am.f <- factor(mtcars$am,
levels=c(0,1),
labels=c("auto","standard"))
#生成箱线图
boxplot(mpg ~ am.f*cyl.f,
data=mtcars,
col=c("#9DAC3F","#B0A9DF"),
main="MPG Distribution by Auto Type",
xlab="Auto Type",ylab="Mile Per Gallon")
不同变速箱类型和汽缸数量车型油耗的箱线图
4.5.2 小提琴图(violin plot)
小提琴图是箱线图和核密度图的结合.可以使用vioplo包中的vioplot()
函数来绘制.其使用格式为:
vioplot(x1,x2,...,names=,col=)
其中x1,x2,...
表示要绘制的一个或多个数值向量(将为每个向量绘制一幅小提琴图).参数names
是小提琴图中标签的字符向量,而col
是一个为每幅小提琴图指定颜色的向量.
library(vioplot)
attach(mtcars)
x1 <- mpg[cyl == 4]
x2 <- mpg[cyl == 6]
x3 <- mpg[cyl == 8]
vioplot(x1,x2,x3,
names=c("4 cyl","6 cyl","8 cyl"),
col="#77ADE1")
#注意,vioplot()函数要求将要绘制的不同组分离到不同的变量中
title("Violin Plots of Miles Per Gallon",ylab="Miles Per Gallon",
xlab="Number of Cylinders")
detach(mtcars)
汽车数量和每加仑汽油行驶英里数的小提琴图
小提琴图基本上是核密度图以镜像的方式在箱线图上的叠加.在图中,白点是中位数,黑色盒型的范围是下四分位点到上四分位点,细黑线表示须.外部形状即为核密度估计.
4.6 克里夫兰点图(点图)
点图提供了一种在简单水平刻度上绘制大量有标签值的方法.可以使用dotchart()
函数创建点图,格式为:
dotchart(x,labels=)
其中的x
是一个数值向量,而labels
则是由每个点标签组成的向量.可以通过添加参数groups
来选定一个因子,用以指定x
中元素的分组方式.如果这样做,则参数gcolor
可以控制不同组标签的颜色.cex
可以控制标签的大小.
dotchart(mtcars$mpg,labels=row.names(mtcars),cex=1.2,
main="Gas Mileage for Car Models",
xlab="Miles Per Gallon")
每种车型每加仑汽油行驶英里数的点图
点图在经过排序并且分组变量被不同的符号和颜色区分开的时候最有用.
# 分组、排序、着色后的点图 ------------------------------------------------------------
#根据每加仑汽油行驶英里数(从低到高)对数据框mtcars进行排序,结果2保存为数据框x
x <- mtcars[order(mtcars$mpg),]
#将数值向量cyl转换为一个因子
x$cyl <- factor(x$cyl)
#添加一个字符型向量(color)到数据框x中,根据cyl的值,取不同的颜色值
x$color[x$cyl == 4] <- "#D1E3F5"
x$color[x$cyl == 6] <- "#8B97A3"
x$color[x$cyl == 8] <- "#B1CDA1"
dotchart(x$mpg,
labels=row.names(mtcars),#各数据点的标签取自数据框的行名(车辆型号)
cex=1.2,
group=x$cyl,#数据点根据汽缸数量分组
gcolor = "black",#数字4、6、8以黑色来显示
color = x$color,#点和标签的颜色向量来自向量color
pch=19,
main="Gas Mileage for Car Model\n grouped by cylinder",
xlab="Miles Per Gallon"
)
各车型依汽缸数量分组的每加仑汽油行驶英里数点图
<br> <!--换行-->
汽车数量和每加仑汽油行驶英里数的小提琴图<!--标题-->
</center>
小提琴图基本上是核密度图以镜像的方式在箱线图上的叠加.在图中,白点是中位数,黑色盒型的范围是下四分位点到上四分位点,细黑线表示须.外部形状即为核密度估计.
4.6 克里夫兰点图(点图)
点图提供了一种在简单水平刻度上绘制大量有标签值的方法.可以使用dotchart()
函数创建点图,格式为:
dotchart(x,labels=)
其中的x
是一个数值向量,而labels
则是由每个点标签组成的向量.可以通过添加参数groups
来选定一个因子,用以指定x
中元素的分组方式.如果这样做,则参数gcolor
可以控制不同组标签的颜色.cex
可以控制标签的大小.
dotchart(mtcars$mpg,labels=row.names(mtcars),cex=1.2,
main="Gas Mileage for Car Models",
xlab="Miles Per Gallon")
每种车型每加仑汽油行驶英里数的点图
点图在经过排序并且分组变量被不同的符号和颜色区分开的时候最有用.
# 分组、排序、着色后的点图 ------------------------------------------------------------
#根据每加仑汽油行驶英里数(从低到高)对数据框mtcars进行排序,结果2保存为数据框x
x <- mtcars[order(mtcars$mpg),]
#将数值向量cyl转换为一个因子
x$cyl <- factor(x$cyl)
#添加一个字符型向量(color)到数据框x中,根据cyl的值,取不同的颜色值
x$color[x$cyl == 4] <- "#D1E3F5"
x$color[x$cyl == 6] <- "#8B97A3"
x$color[x$cyl == 8] <- "#B1CDA1"
dotchart(x$mpg,
labels=row.names(mtcars),#各数据点的标签取自数据框的行名(车辆型号)
cex=1.2,
group=x$cyl,#数据点根据汽缸数量分组
gcolor = "black",#数字4、6、8以黑色来显示
color = x$color,#点和标签的颜色向量来自向量color
pch=19,
main="Gas Mileage for Car Model\n grouped by cylinder",
xlab="Miles Per Gallon"
)
各车型依汽缸数量分组的每加仑汽油行驶英里数点图