目录
1、散点图
散点图中,实际数据值由点在图中的位置表示,由plot()负责绘制。plot()函数可以绘制的对象如下:
plot()绘制散点图的方法:
plot(x,y)
例如,使用mlbench包中的Ozone数据集绘制散点图:
install.packages("mlbench")
library(mlbench) #加载mlbench包
data(Ozone) #使用data()命令读入Ozone数据集
plot(Ozone$V8,Ozone$V9)
![](https://img-blog.csdnimg.cn/c64c199417664d29aaaccdf78d8ba04c.png#pic_center)
2、图像选项
图像选项 | 含义 |
---|---|
xlab,ylab | X与Y轴名称 |
main | 图像标题 |
pch | 点的类型 |
cex | 点的大小 |
col | 颜色 |
xlim,ylim | X与Y轴的值范围 |
type | 图像类型,有点(p)、线(l)、点线(b)等 |
2.1 坐标轴名称
plot(x,y,xlab,ylab) #X轴名称设置xlab,Y轴名称设置为ylab
例如:
plot(Ozone$V8, Ozone$V9, xlab = "Sandburg Temperature", ylab = "El Monte Temperature")
![](https://img-blog.csdnimg.cn/9727d1e0aa2547fc8072b63fe2991b49.png#pic_center)
2.2 图形标题
plot(x,y,main) #main设置散点图标题
例如:
plot(Ozone$V8, Ozone$V9, xlab = "Sandburg Temperature", ylab = "El Monte Temperature")
![](https://img-blog.csdnimg.cn/15724746327442ff870364db70028873.png#pic_center)
2.3 点的类型
参数pch可设置为数字或字符。设置为数字0-18表示使用S语言的特殊字符,19-25指R扩展后使用的特殊字符。26-31表示未使用的值,32-127表示ASCII码。运行example(points)命令,查看各pch值代表哪种符号。将参数pch设置为字符,则根据指定字符绘制图形。
plot(x,y,pch) #使用pch指定的点类型绘制X、Y
例如:
plot(Ozone$V8, Ozone$V9, xlab = "Sandburg Temperature", ylab = "El Monte Temperature",
main = "Ozone", pch = 20)
plot(Ozone$V8, Ozone$V9, xlab = "Sandburg Temperature", ylab = "El Monte Temperature",
main = "Ozone", pch = "+")
2.4 点的大小
plot(x,y,cex) #使用cex指定大小的点绘制X、Y。cex的默认值为1。cex设得越小,点就按比例缩小;
#cex设得越大,点就按比例增大。
例如:
plot(Ozone$V8, Ozone$V9, xlab = "Sandburg Temperature", ylab = "El Monte Temperature",
main = "Ozone", cex = .5)
![](https://img-blog.csdnimg.cn/f4752a05bf134916b2b81d0c259c5af5.png#pic_center)
2.5 颜色
使用col指定的颜色绘制X、Y。参数col可以设置为颜色名称、RGB颜色值。将col设置为颜色名称时,只需使用colors()函数返回的颜色名(white、blue、black等)即可。使用RGB设置颜色时,要设置为RGB颜色值,格式为“#RRGGBB"。
plot(x,y,col)
例如:
plot(Ozone$V8, Ozone$V9, xlab = "Sandburg Temperature", ylab = "El Monte Temperature",
main = "Ozone", col="blue")
![](https://img-blog.csdnimg.cn/4a79a247e37e474cb8f4dbe409606ad4.png#pic_center)
2.6 坐标轴的取值范围
plot(x,y,xlim,ylim) #在指定的坐标范围内绘制X、Y,设置的格式为c(最小值,最大值)
例如:
plot(Ozone$V8, Ozone$V9, xlab = "Sandburg Temperature", ylab = "El Monte Temperature",
main = "Ozone", xlim = c(0,100), ylim = c(0,90))
![](https://img-blog.csdnimg.cn/9463582834b040a1b33933038aa0213e.png#pic_center)
2.7 图像类型
根据type指定的图形类型绘制X、Y。设置type时常用的值有p(点)、l(线)、b(点线)、o(点线重叠绘制)、n(不绘制)。同时使用点与线时,选项b与o作用类似。但使用b选项时,点与线相遇处只显示点或线之一。而使用o选项时,会先绘制点图,再在其上重叠绘制线图。使用n选项将不绘制数据,用于初始化新图形。使用n选项时,一般使用lines()、points()等函数绘制数据。
plot(x,y,type)
若想同时绘出点与线,可以设置type=“b”;若想重叠(overlapped)绘制点与线,设置type="o”。这两种点线图类似,它们都绘制点与线,但不同之处在于,使用b选项时,点与线相遇时不重叠;而使用o选项时,先绘制点图,然后在其上重叠绘制折线图,如下所示。
data("cars")
plot(cars)
plot(cars, type="l")
plot(cars, type="o")
plot(cars, type="b")
如图8所示,同一行驶速度往往可能对应2个以上的制动距离,可以使用tapply()函数针对每个speed求dist的平均值,然后使用plot()函数绘制数据图形。
plot(tapply(cars$dist, cars$speed, mean), type = "o", cex = 0.5,
xlab = "speed",ylab = "dist")
![](https://img-blog.csdnimg.cn/a77a94f7cdd44c7ab420a085332dcdf1.png#pic_center)
2.8 线型
使用Ity指定的线型绘制X、Y。可以将lty设置为数字或字符串。设置为数字时,0表示不绘制、1表示实线(默认值)、2表示连字符(-)、3表示点、4表示点与连字符、5表示长连字符、6表示双连字符。也可以设置为字符串,以上线型对应的名称依次为blank、solid、dashed、dotted、dotdash、longdash、twodash。
plot(cars,type="l",lty="dashed")
![](https://img-blog.csdnimg.cn/6358b7a3aefd48188787db2b83963965.png#pic_center)
2.9 图形排列
采用par()函数可以将图形绘制到同一个窗口。
par(mfrow=c(nr,nc)) #以nr行、nc列排列图形
例如:
opar <- par(mfrow=c(1,2))
plot (Ozone$V8, Ozone$V9, xlab="Sandburg Temperature", ylab="El Monte Temperature",
main="Ozone")
plot (Ozone$V8, Ozone$V9, xlab="Sandburg Temperature", ylab="El Monte Temperature",
main="Ozone2")
par(opar)
2.10 抖动
抖动是指向数据值添加若干燥声的方法。通过向数据值添加噪声,使得数据值略微偏移,这样就能避免拥有相同数值的数据在图形中发生多次重叠。
jitter(
x, #待添加噪声的数值向量
# factor、amount用于设置噪声水平,一般不需要直接设置。
# 使用help(jitter)命令查看设置噪声大小的公式
factor=1,
amount=NULL
) # 返回值为已添加噪声的数值向量
Ozone数据集中存在着相同值多次出现的情形,下面以Ozone数据集为例,学习如何向数据添加噪声。Ozone数据集的V6与V7列分别为洛杉矶国际机场的风速与湿度,但这2列的值都是自然数,所以经常出现拥有相同值的问题。比如,下面显示的部分数据中,第3行与第6行风速都为4,第4行与第5行风速都为3。
下列示例中,第一次调用plot)函数绘制图形时使用原始数据,第二次调用plot()函数绘制图形时添加了噪声。如图12所示,添加噪声后,相同数据不再重叠,从图形中更容易掌握数据分布情况。
plot(Ozone$V6,Ozone$V7, xlab="Windspeed", ylab="Humidity", main="Ozone", pch=20, cex=.5)
plot(jitter(Ozone$V6),jitter(Ozone$V7), xlab="Windspeed", ylab="Humidity", main="Ozone",
pch=20, cex=.5)
3、基本图形
3.1 点
points(x,y)
例如:
plot(iris$Sepal.Width,iris$Sepal.Length,cex=.5,pch=20,xlab="width",ylab="length",main="iris")
points(iris$Petal.Width,iris$Petal.Length,cex=.5,pch="+",col="#FF0000")
![](https://img-blog.csdnimg.cn/97e53d34a00b4a9ba8a6dc0dece669c6.png#pic_center)
with(iris,{
plot(NULL,xlim=c(0,5), ylim=c(0, 10),
xlab="width",ylab="length",main="iris",type="n")
points(Sepal.Width, Sepal.Length, cex=.5, pch=20)
points(Petal.Width, Petal.Length, cex=.5, pch="+",col="#FF0000")
})
![](https://img-blog.csdnimg.cn/c7aad4cfefc34dd3b6e381cf0b255dca.png#pic_center)
3.2 折线
lines(x,y)
例如:
x <- seq(0, 2*pi, 0.1)
y <- sin(x)
plot(x, y, cex=.5, col="red")
lines(x,y)
![](https://img-blog.csdnimg.cn/24b32e90a1fe48889e66417050c20a94.png#pic_center)
除此之外,R还提供了多种非参数回归方法,比如lowess()、loess()、ksmooth()、smooth.spline()、earth()等。
例如:
plot(cars)
lines(lowess(cars))
![](https://img-blog.csdnimg.cn/cdad32d3d41041ed991c9066f7c5bc41.png#pic_center)
3.3 直线
abline()函数用于在图形中绘制y=ax+b形式的直线、y=h形式的水平线,以及x=v形式的垂直线。
abline(
# a、b表示直线y=a+bx的截距和矩阵
a = NULL,
b = NULL,
h = NULL, #绘制y=h形式的水平线
v = NULL, #绘制x=v形式的垂直线
reg = NULL, #绘制线性回归模型
...
)
例如:
plot(cars, xlim=c(0,25))
abline(a=-5, b=3.5, col="red")
abline(h=mean(cars$dist),lty=2)
abline(v=mean(cars$speed),lty=2)
![](https://img-blog.csdnimg.cn/1c5cc23de2b3493380c6d86005ef5b82.png#pic_center)
3.4 曲线
curve(
expr, # 函数或表达式
from=NULL, # 区间起点
to=NULL # 区间终点
)
例如:
curve(sin,0,2*pi)
![](https://img-blog.csdnimg.cn/c730e24cf2484b31980d7c27a42678b4.png#pic_center)
3.5 多边形
polygon(x,y)
例如:
m<-lm(dist ~ speed,data=cars)
p<-predict(m,interval="confidence")
x<-c(cars$speed,
tail(cars$speed,1),
rev(cars$speed),cars$speed[1])
y<-c(p[,"lwr"],
tail(p[,"upr"],1),
rev(p[,"upr"]),
p[,"lwr"][1])
plot(cars)
abline(m)
polygon(x, y, col=rgb(.7,.7,.7,.5))
![](https://img-blog.csdnimg.cn/96773b5f13fd4a4e8244535ee390d60e.png#pic_center)
4、字符串
text (
x, # X坐标
y=NULL, # Y坐标
labels=seq_along(x), # 待显示的字符串
# adj与pos选项用于设置文本位置,若不设置,
# 则在给定坐标处准确输出字符串。
# adj选项用于设置文本位置,可以设置值为0或1、长度为2的向量。
# (0,0)表示坐标右上,(0,1)表示右下,(1,0)表示左上,
# (1,1)表示左下。
adj=NULL,
# pos选项也用于设置字符串位置。同时设置pos与adj时,pos设置优先。
#pos值为1,表示在坐标底部输出字符串,为2表示在左侧,为3表示在顶部,为4表示在右侧。
pos=NULL,
...
)
例如:
plot(4:6,4:6)
text(5,5,"X")
text(5,5,"00",adj=c(0,0))
text(5,5,"01",adj=c(0,1))
text(5,5,"10",adj=c(1,0))
text(5,5,"11",adj=c(1,1))
![](https://img-blog.csdnimg.cn/c403839dbb784d00821e223bc0844208.png#pic_center)
![](https://img-blog.csdnimg.cn/fb7e6c3c4a544df68733a5d40baa835f.png#pic_center)
5、识别图形中的数据
图形绘制完成后,调用identify()函数,鼠标光标会变成十字形。将十字形光标置于图形中特定的点上并单击,距离单击点最近的数据上就会显示标签。若想终止鼠标点击,只要关闭图形窗口即可。
identify(
x, #待识别点的x坐标
y=NULL, #待识别点的y坐标
labels=seq_along(x), #识别后,标签根据labe1s指定的值进行输出。
...
)
例如:
plot(cars,cex=.5)
identify(cars$speed,cars$dist)
![](https://img-blog.csdnimg.cn/a836cb50242d4b1d897ea9d86eb5163f.png#pic_center)
6、图例
legend(
x, #X坐标。在x中使用bottomright、bottom、bottomleft、
#left、toplef、top、topright、right、center关键字代替坐标,用于设置图例的显示位置。
y=NULL, # Y坐标
legend, # 待显示的图例
...
)
例如:
plot(iris$Sepal.Width,iris$Sepal.Length,pch=20,xlab="width",ylab="length")
points(iris$Petal.Width, iris$Petal.Length,pch="+",col="#FF0000")
legend("topright",legend=c("Sepal", "Petal"), pch=c(20, 43),
col=c("black", "red"),bg="gray")
![](https://img-blog.csdnimg.cn/1d1a589011e94cacb2d20c21524863b7.png#pic_center)
7、绘制以矩阵形式给出的数据
matplots()、matlines()、matpoints()这3个函数分别与plot()、lines()、points()函数类似,但区别在于,使用它们可以在图形中绘制以矩阵形式给出的数据。它们在函数的调用方式上并无太大差别,只是前3个函数的输入是矩阵。
下面使用matplot()函数绘制cos(x)、sin(x)在[-2π,2π]区间上的图形。如下所示,先调用seq()函数在[-2π,2π]区间内产生x值。
x<-seq(-2*pi,2*pi,0.01)
y<-matrix(c(cos(x),sin(x)),ncol=2)
matplot(x,y,lty=c("solid","dashed"),cex=.2,type="l")
abline(h=0,v=0)
![](https://img-blog.csdnimg.cn/7bf074042eb84e98905320a321c2bc3d.png#pic_center)
8、应用图形
8.1 箱线图
箱线图是一种反映数据分布的图形,中间箱体显示第一下四分位数、中位数上四分位数。 向箱体左右或上下延展的线——又称“箱须”(whisker)——分别代表比“中位数-1.5×1QR”大的数据中的最小值(下边缘,lower whisker)、比“中位数+1.5×IQR”小的数据中的最大值(上边缘,upper whisker)。1QR(四分位差)是Inter Quartile Range的缩写,它是上四分位数与下四分位数的差。图形中显示的点是异常值(outlier),它们代表比下边缘小的数据,或者比上边缘大的数据。
boxplot(
x # 待绘制箱线图的数据
)
boxplot(
formula, # 形式为y ~ grp,其中y是待绘分布的值,grp是分组变量。
# y ~ grp表示按照每个grp对y绘制箱线图。
data=NULL, # 待应用公式的数据框(或列表)
horizontal=FALSE, #若为TRUE,则竖向绘制箱线图;若为FALSE,则横向绘制箱线图。
#若为TRUE,则绘制槽口区间,代表中位数的一种置信区间。
#设置notch=TRUE,绘制2个箱线图,若其槽口区间彼此不重叠,
#则表示两组数的中位数彼此不同。
notch=FALSE,
...
)
# 返回值为列表,保存stats(分布统计值)、n(保存各组观测值数量的向量)、conf(保存notch区间的矩阵)、
# out(异常值)、group(异常值所属分组)、names(保存各分组名称的向量)。
例如:
boxplot(iris$Sepal.Width)
![](https://img-blog.csdnimg.cn/bd10552f3c30472a9cce59290d7cecdc.png#pic_center%29)
(boxstats<-boxplot(iris$Sepal.Width))
ps:文章用于学习
[参考书目] 徐珉久,R语言与数据分析实战,2017