R语言系统教程(八):绘图命令
- 8.1 高水平绘图函数
- 8.1.1 plot()函数
- 8.1.2 显示多变量数据
- 8.1.3 显示图形
- 8.2 高水平绘图中的命令
- 8.2.1 图中的逻辑命令
- 8.2.2 数据取对数
- 8.2.3 type
- 8.2.4 图中的字符串
- 8.3 低水平绘图函数
- 8.3.1 加点与线的函数
- 8.3.2 在点处加标记
- 8.3.3 在图上加直线
- 8.3.4 在图上加标记、说明或其他内容
R语言的作图函数分为两类,第一类是高水平作图函数,可以自行产生图像,可以有坐标轴,以及图和坐标轴的说明文字等,而所谓低水平作图函数是指自身无法生成图形,只能在高水平作图函数的基础上,增加新的图形。
8.1 高水平绘图函数
高水平作图函数有:plot()、pairs()、coplot()、qqnorm()、qqline()、hist()和contour()等。其中qqnorm()、qqline()、hist()等函数。
8.1.1 plot()函数
plot()函数是用的最多的绘图函数之一,可绘制数据的散点图、曲线图,plot()函数有以下四种使用方法。
- plot(x, y)
其中x和y向量,生成y关于x的散点图。 - plot(x)
其中x是一个时间序列,生成时间序列图形;如果x是向量,产生其关于下标的散点图,如果x是复向量,则绘制实部与虚部的散点图。 - plot(f) plot(f, y)
其中f是因子,y是数值向量,第一种格式生成f的直方图;第二种格式生成y关于f水平的箱线图。
> 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)))
> plot(f, y)
4. plot(df) plot( ~ expr) plot(y ~ expr)
其中df是数据框,y是任意对象,expr是对象名称的表达式
> 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))
> plot(df)
> attach(df)
The following objects are masked from df (pos = 3):
Age, Height, Weight
The following objects are masked from df (pos = 4):
Age, Height, Weight
> plot(~Age+Height)
> plot(Weight~Age+Height)
Hit <Return> to see next plot: return
plot()的用法远不止于此,会在后面慢慢介绍到。
8.1.2 显示多变量数据
R中提供了两个非常有用的函数,一个是pairs(),当数据为矩阵或数据框时,可以绘制出各列的散布图
> pairs(df)
另一个是coplot(),当有三四个变量时,其可以把散点图画的更详细,例如,假设a和b为数值向量,c为向量或因子,则colplot(a~b|c)可以给出c值下,a关于b的散点图,见下例
coplot(Weight ~ Height | Age)
对于四个变量,还可有colplot(a~b|c + d),即按c和d划分下,a关于b的散点图。
8.1.3 显示图形
qqnorm(),qqline(),qqplot()以及hist()等函数在上一期有所介绍,现在我们看一下其他几个函数。
dotchart()函数可以构造数据的点图,在此点图中,y轴是数据x标记,x轴是数据x的数值。例如数据集VADeaths给出了Virginia州在1940年的人口死亡率
> 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")
> dotchart(t(VADeaths), main = "Death Rates in Virginia - 1940")
image(x, y, z, …)
contour(x, y, z, …)
persp(x, y, z, …)
其中x,y是数值型向量,z是与x,y大小对应的矩阵(
z的行数等于x的长度,z的列数等于y的长度),image()函数绘制出三维图形,contour绘制三维图形的等值线,persp()函数绘制三维图形的表面曲线。
以参考资料中给的某山区数据为例:
> x<-seq(0,2800, 400)
> y<-seq(0,2400,400)
> z = scan()
1: 1180 1320 1450 1420 1400 1300 700 900
9: 1230 1390 1500 1500 1400 900 1100 1060
17: 1270 1500 1200 1100 1350 1450 1200 1150
25: 1370 1500 1200 1100 1550 1600 1550 1380
33: 1460 1500 1550 1600 1550 1600 1600 1600
41: 1450 1480 1500 1550 1510 1430 1300 1200
49: 1430 1450 1470 1320 1280 1200 1080 940
57:
Read 56 items
> Z<-matrix(z, nrow=8)
> contour(x, y, Z, levels = seq(min(z), max(z), by = 80))
> persp(x, y, Z)
改变观察角度:
> persp(x, y, Z, theta = 30, phi = 45, expand = 0.7)
> image(x, y, Z)
再补充一个例子:
> x<-y<-seq(-2*pi, 2*pi, pi/15)
> f<-function(x,y) sin(x)*sin(y)
> z<-outer(x, y, f)
> contour(x,y,z,col="blue")
> persp(x,y,z,theta=30, phi=30, expand=0.7,col="lightblue")
> image(x, y, z)
8.2 高水平绘图中的命令
在第一部分讲的绘图命令中还可以加一些(参数),不断完善图的内容,或增加一些有用的说明。
8.2.1 图中的逻辑命令
add = TRUE 表示所绘制的图像在原图上加图,默认FASLE
axes = FASLE 表示所绘制图像没有坐标轴,默认TRUE
8.2.2 数据取对数
log = “x” 表示x轴的数据取对数,log = “y” 表示y轴的数据取对数,log = “xy” 表示x轴与y轴的数据同时取对数。
8.2.3 type
type = “p”,绘制散点图(默认);
type = “l”,绘实线;
type = “b”,both;
type = “c”,lines part alone of “b”;
type = “o”,overplotted;
type = “h”,histogram;
type = “s”,阶梯型;
type = “n”,no plotting;
8.2.4 图中的字符串
xlab:对x轴的说明
ylab:字符串
main:图的说明
sub:对子图的说明
8.3 低水平绘图函数
有时高水平的作图函数并不能完全达到作图的指标,需要低水平的作图函数对图形予以补充,所有的低水平作图函数所作的图形必须是在高水平作图函数所绘图形的基础上,增加新的图形。
常用低水平作图函数有points(),lines(),text(),abline(),polygon(),legend(),title()和axis()。
8.3.1 加点与线的函数
points(),其作用是在已有图上加点,lines(),其作用是在已有图上加线。
8.3.2 在点处加标记
函数text()的作用是在图上加标记,命令格式为:
text(x, y, labels, … )
其中x和y是数据向量,labels可以是整数,也可以是字符串,默认labels = 1 : length(x)
8.3.3 在图上加直线
abline()可以在图上加直线,其常见的使用方法有四种格式。
- abline(a, b) 绘制y = a + bx的直线
- abline(h = y) 画过所有点的水平直线
- abline(v = x) 画过所有点的竖直直线
- abline(lm.obj) 表示绘制线性模型得到的线性方程
函数polygon()可以在图上加多边形,其使用方法为
polygon(x, y, … ) 依次连接所有的点,绘制一多边形
8.3.4 在图上加标记、说明或其他内容
title(main = " ", sub = " "),用以添加主题目和子题目,其中主题目加载图的顶部,子题目加在图的底部。
axis(side, … ),用以在坐标轴上加标记、说明或其他内容,其中side是边,表示将内容放置的内容,side = 1 表示图的底部,side = 2 表示图的左部,side = 3 表示图的顶部,side = 4 表示图的右侧。