总结
1:散点图plot(x, y),x表示x轴,y表示y轴;plot(x),x表示y轴,下标表示x轴;箱线图plot(f, y),f是因子,y是数值向量;多变量数据散点图plot(df),df是数据框;pairs()可以对矩阵或数据框的各列绘制散布图(作用和plot(df)相似);coplot(Weight ~ Height | Age)绘制出按照年龄段给出的体重与身高的散点图;
在作图函数中,有两类作图函数,一类是高水平作图函数,另一类是低水平作图函数;高水平作图函数指所有的绘图函数均可产生图形,可以有坐标轴,以及图和坐标轴的说明文字等;低水平作图函数是自身无法生成图形,只能在高水平作图函数产生的图形基础上,增加新的图形。
高水平作图函数有:plot, pairs, coplot, qqnorm, qqline, hist, contour等
函数plot()可绘制数据的散点图、曲线图等,有以下四种用法:
(1) plot(x, y)
其中x和y是向量,生成y关于x的散点图,例如:
> X1 <- c(35,40,40,42,37,45,43,37,44,42,41,39)
> X2 <- c(60,74,64,71,72,68,78,66,70,65,73,75)
> plot(X1, X2)
绘制以X1向量的值为横坐标,X2向量的值为纵坐标的散点图,但X1和X2两个向量等长,则对应元素才能绘制图形
(2) plot(x)
> plot(X1)
如果x是时间序列则生成时间序列图形,如果x是向量,则产生x关于下标的散点图,如果x是复数向量,则产生复数的实部与虚部的散点图。
(3) plot(f),plot(f, y)
其中f是因子,y是数值向量。plot(f)生成f的直方图,plot(f, y)生成y关于f水平的箱线图。
例如:利用四种不同的材料(A1, A2, A3, A4)产生出的元件,测得寿命绘制4种箱线图,通过箱线图看设计出的元件的寿命的差异。
A1 = 1600, 1610, 1650, 1680, 1700, 1700, 1780
A2 = 1500, 1640, 1400, 1700, 1750
A3 = 1640, 1550, 1600, 1620, 1640, 1600, 1740, 1800
A4 = 1510, 1520, 1530, 1570, 1640, 1600
> y<-c(1600,1610,1650,1680,1700,1700,1780,1500,1640,1400,1700,1750,1640,1550,1600,1620,1640,1600,1740,1800,1510,1520,1530,1570,1640,1600)
> f<-factor(c(rep(1,7), rep(2,5), rep(3,8), rep(4,6)))
> f
[1] 1 1 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 3 3 3 4 4 4 4 4 4
Levels: 1 2 3 4
#这里设定因子的用意是根据level水平及repeat的个数定义在y向量种对不同数据进行分组,最终进行统计,例如,Levels: 1表示1水平,1 1 1 1 1 1 1重复7次,说明A1组有7个数值,这7个数值倍分在第一个组别,其他组别以此类推。
> plot(f,y)
最后得到4种组别的箱线图
(4) plot(df),plot(~ expr),plot(y ~ expr)
其中df是数据框,y是任意一个对象,expr是对象名称的表达式如(a+b+c)
例如输入学生的年龄、身高和体重构成数据框
> df<-data.frame(Age=c(13,13,14,12,12,15,11,15,14,14,14,15,12,13,12,16,12,11,15), Height=c(56.5,65.3,64.3,56.3,59.8,66.5,51.3,62.5,62.8,69.0,63.5,67.0,57.3,62.5,59.0,72.0,64.8,57.5,66.5),Weight=c(84.0,98.0,90.0,77.0,84.5,112.0,50.5,112.5,102.5,112.5,102.5,133.0,83.0,84.0,99.5,150.0,128.0,85.0,112.0))
> df
Age Height Weight
1 13 56.5 84.0
2 13 65.3 98.0
3 14 64.3 90.0
4 12 56.3 77.0
5 12 59.8 84.5
6 15 66.5 112.0
7 11 51.3 50.5
8 15 62.5 112.5
9 14 62.8 102.5
10 14 69.0 112.5
11 14 63.5 102.5
12 15 67.0 133.0
13 12 57.3 83.0
14 13 62.5 84.0
15 12 59.0 99.5
16 16 72.0 150.0
17 12 64.8 128.0
18 11 57.5 85.0
19 15 66.5 112.0
> plot(df)
> attach(df)
#把数据框中的变量“链接”到内存中,便于数据框数据的调用。
> plot(~Age+Height)
#绘制年龄与身高的散点图
plot还可以作回归诊断图等。
显示多变量数据,可以用下面两个函数,pairs()和coplot()
pairs()可以对矩阵或数据框的各列绘制散布图。
例如:绘制出关于矩阵各列的散布图:
> pairs(df)
#即Age、Height和Weight,对两两个列的数值绘图。对角线的图是呈现180度旋转对称的。
另外一个函数是coplot()。当有三、四个变量时,函数coplot()可以将散点图画的更细致。假设a和b是数值向量,并且c是向量或因子(所有变量具有相同的长度),则
> coplot(a ~ b | c)
绘制出在给定c值下,a关于b的散点图。
以学生的年龄、身高和体重的数据为例。
> coplot(Weight ~ Height | Age)
绘制出按照年龄段给出的体重与身高的散点图。
对于四个变量a,b,c,d,还可以有如下命令:
> coplot(a ~ b | c + d)
即按照c,d划分下,a关于b的散点图。
下面介绍另外一些高水平作图函数qqnorm()、hist()、dotchart()、contour()等。
qqnorm()、qqline()、qqplot(x, y)这三个函数用来绘制QQ图
hist(x)、hist(x, nclass=n)、hist(x, breaks=b, …)其中x胃数值型向量,绘制数据的直方图。
(3) dotchart(x, …)
构造数据x的点图,在点图中,y轴是数据x标记,x轴是数据x的数值,例如:
> VADeaths
····Rural Male Rural Female Urban Male Urban Female
50-54 11.7 8.7 15.4 8.4
55-59 18.1 11.7 24.3 13.6
60-64 26.9 20.3 37.0 19.3
65-69 41.0 30.9 54.6 35.1
70-74 66.0 54.3 71.1 50.0
> dotchart(VADeaths, main="Death Rates in Virginia - 1940")
#y轴是数据x的标记
> dotchart(t(VADeaths), main="Death Rates in Virginia - 1940")
#将表格转置后,原来的x轴是y轴的标记
(4) image(x, y, z, …),contour(x, y, z, …),persp(x, y, z, …)
其中x,y是数值型向量,z是与x和y对应的矩阵(z的行数是x的维数,z的列数是y的维数),image()绘制三维图形的映像,contour()绘制三维图形的等值先,persp()绘制三维图形的表面曲线。
可在绘图中加入一些命令,不断完善图的内容,或增加一些有用的说明。
add = TRUE 表示所绘图在原图上加图,默认值为add = FALSE,即新的图替换原图。
axes = FALSE 表示所绘图没有图形没有坐标轴,默认值为axes = TRUE。
log="x"表示x轴的数据取对数,log="y"表示y轴的数据取对数,log="xy"表示x轴与y轴的数据同时取对数。
type=“p” 绘制散点图 (默认值);
type=“l” 绘制实线;
type=“b” 所有点被实线连接;
type=“o” 实线通过所有的点;
type=“h” 绘制点到x轴的竖线;
type=“s” or “S” 绘制阶梯形曲线;
type=“n” 不绘制任何点或曲线;
xlab=“字符串”,其字符串的内容是x轴的说明;ylab=“字符串”,其字符串的内容是y轴的说明;main=“字符串”,其字符串的内容是图的说明;sub=“字符串”,其字符串的内容是子图的说明。
有时高水平作图函数不能完全达到作图的指标,还需要低水平作图函数对图形予以补充。所有的低水平作图函数所作的图形必须在高水平作图函数所绘图形的基础之上增加新的图形。
低水平作图函数有points(), lines(), text(), abline(), polygon(), legend(), title()和axis()等。
加点函数是points(),其作用是在已有的图上加点,命令points(x, y)的功能相当于命令plot(x, y)。
加线函数是lines(),其作用是在已有图上加线,命令lines(x, y)的功能相当于命令plot(x, y, type=“l”)。
函数text()的作用是在图上加标记,命令格式为
text(x, y, labels, …)
其中x, y是数据向量,labels可以是整数,也可以是字符串,在默认状态下,labels=1:length(x)。例如,需要绘制出(x, y)的散点图,并将所有点用数字标记,其命令为。
> x <- seq(0,2800,400)
> y <- seq(0,2800,400)
> plot(x, y, type="n"); text(x, y)
#点和线都取消只用数字代替
函数abline()可以在图上加直线,其使用方法有四种格式。
(1)abline(a, b)
表示画一条y=a+bx的直线。
(2)abline(h=y)
表示画一条过所有点的水平直线。
(3)abline(v=x)
表示画一条过所有点的竖直直线。
(4)abline(lm.obj)
表示绘制线性模型得到的线性方程。
例如:
> rt<-data.frame(Height=c(56.5,65.3,64.3,56.3,59.8,66.5,51.3,62.5,62.8,69.0,63.5,67.0,57.3,62.5,59.0,72.0,64.8,57.5,66.5),Weight=c(84.0,98.0,90.0,77.0,84.5,112.0,50.5,112.5,102.5,112.5,102.5,133.0,83.0,84.0,99.5,150.0,128.0,85.0,112.0))
> lm.sol<-lm(Weight~Height, data=rt)
> attach(rt)
> plot(Weight~Height); abline(lm.sol)
#得到学生体重与身高的散点图和线性回归直线图
函数polygon()可以在图上加多边形,其使用方法为polygon(x, y, …),以数据的(x, y)为坐标,依次连接所有的点,绘制出一个多边形。
在图上加说明文字、标记或其他内容有两个函数。一个是加图的题目,用法是title(main=“Main Title”, sub=“sub title”, …)
其中主题目加在图的顶部,子题目加在图的底部。另一个是在坐标轴上加标记、说明或其他内容,用法是axis(side, …)
其中side是边,side=1表示所加内容放在图的底部,side=2表示所加内容放在图的左侧,side=3表示所加内容放在图的顶部,side=4表示所加内容放在图的右侧。