axis()

plot()函数中用

axes=FALSE可以取消自动的坐标轴。

box()函数画坐标边框。

axis函数单独绘制坐标轴。

axis的第一个参数取1,2,3,4, 分别表示横轴、纵轴、上方和右方。 axis的参数at为 刻度线位置,labels为标签。

plot(seq(along=d.class$weight), d.class$weight, axes=FALSE,
type='b', lwd=3,
main='身高体重曲线图',
xlab='身高分层', ylab='体重',
col="blue")
box(); axis(2)
axis(1, at=seq(along=d.class$weight), seq(along=d.class$weight))

数学符号:

x <- seq(0, 2*pi, length=200)
y1 <- sin(x)
plot(x, y1, type='l', lwd=2,
axes=FALSE,
xlab='x', ylab='')
abline(h=0, col='gray')
box()
axis(2)
axis(1, at=(0:4)/2*pi,
# 不用数学符号时:labels=c('0', 'pi/2', 'pi', '3pi/2', '2pi'))
labels=c(0, expression(pi/2),
expression(pi), expression(3*pi/2),
expression(2*pi)))

绘图中使用数学符号的演示:

demo(plotmath)

使用demo()函数中展示的绘图数学符号在label中使用时要用expression()包裹。
比如:

a <- c(1,2,3,4,5,6)
b <- a^2
plot(a,b, axes=FALSE, col="blue",xlab = '', ylab = "x轴平方",main="数学符号测试")
box()
axis(2)
axis(1,at=seq(along=a),
labels = c(expression(x^2),
expression(hat(x)),
expression(sum(x[i],i = 1,n)),
expression(integral(f(x)*dx, a,b)),
expression(lim(f(x), x %->%0)),
expression(group("|",x, "|"))
)
)

text()

text()在坐标区域内添加文字。 mtext()在边空处添加文字。

with(d.class, plot(height, weight))
lm1 <- lm(weight ~ height, data=d.class)
abline(lm1, col='red', lwd=2)
# 相关性系数的第一项:截距
a <- coef(lm1)[1]
# 相关性系数的第二项:斜率
b <- coef(lm1)[2]
# 前两个数字代表所要放的文字的坐标
text(52, 145, adj=0, '线性回归:')
text(52, 140, adj=0,
substitute(hat(y) == a + b*x,
))

locator()和identify()

locator()函数在执行时等待用户在图形的坐标区域内点击并返回点击处的坐标。 可以用参数n指定要点击的点的个数。 不指定个数则需要用右键菜单退出。 这个函数也可以用来要求用户点击以进行到下一图形。 如

x <- seq(0, 2*pi, length=200)
y1 <- sin(x); y2 <- cos(x)
plot(x, y1, type='l',
col="red")
lines(x, y2, col="blue")
legend(locator(1), col=c("red", "blue"),
lty=c(1,1), legend=c("sin", "cos"))

locator(1),指定在生成的plots窗口中点击图形的任意位置,摆放图形的lengend,而不用指定一个特定的坐标,这种方法比较适合一般情况。

图形参数

用图形参数可以选择点的形状、颜色、线型、粗细、坐标轴做法、边空、一页多图等。 有些参数直接用在绘图函数内,如plot函数可以用 pch、col、cex、lty、 lwd等参数。 有些图形参数必须使用par()函数指定。

opar <- par(mfrow=c(2,2))
# 大括号考起来表示大括号内的表达式都是with的第二个参数
with(d.class, {hist(height);
boxplot(height);
qqnorm(height); qqline(height);
plot(height); rug(height,side=2)})
par(opar)

一些例子

barplot的横坐标标注太宽时,自动将某些标注省略。 用las=2指定坐标轴刻度标签垂直于坐标轴, 这样x轴的刻度值就变成了纵向的。 注意使用mar参数增加横坐标边空大小。

x <- 1:10
names(x) <- paste(100000 + (1:10))
barplot(x,las=2)

# barplot的一些参数
barplot(d.class$age, names.arg = d.class$name, las=2,col=rainbow(19))

图形参数可以分为如下四类

  • 图形元素控制;
  • 坐标轴与坐标刻度;
  • 图形边空;
  • 一页多图。

图形元素控制

  • pch=16参数。散点符号,取的数。
  • lty=2参数。线型,1为实线,从2开始为各种虚线。
  • lwd=2参数,线的粗细,标准粗细为1。
  • col="red"参数,颜色,可以是数字, 或颜色名字符串如"red""blue"等。用colors()函数查询有名字的颜色。 用rainbow(n)函数产生连续变化的颜色。
colors()
## 657种颜色
  • font=2参数,字体,一般font=1是正体,2是粗体, 3是斜体,4是粗斜体。
  • adj=-0.1指定文本相对于给定坐标的对齐方式。 取0表示左对齐,取1表示右对齐,取0.5表示居中。 此参数的值实际代表的是出现在给定坐标左边的文本的比例。
  • cex=1.5 绘点符号大小倍数,基本值为1。

坐标轴与坐标刻度

  • mgp=c(3,1,0) 坐标轴的标签、刻度值、坐标轴线 到实际的坐标轴位置的距离,以行高为单位。 经常用来缩小坐标轴所占的空间, 如mgp=c(1.5, 0.5, 0)

  • lab=c(5,7,12) 提供刻度线多少的建议, 第一个数为x轴刻度线个数, 第二个数为y轴刻度线个数, 第三个数是坐标刻度标签的字符宽度。

  • las=1 坐标刻度标签的方向。 0表示总是平行于坐标轴, 1表示总是水平, 2表示总是垂直于坐标轴。

  • tck=0.01 坐标轴刻度线长度,以绘图区域大小为单位1。

  • xaxs="s", yaxs="e": 控制x轴和y轴标刻度的方法。

    "s"(即standard)或"e"(即extended) 的时候数据范围控制在最小刻度和最大刻度之间。 取"e"时如果有数据点十分靠近边缘轴的范围会略微扩大。

    取值为"i"(即internal)或"r"(此为缺省) 使得刻度线都落在数据范围内部,而"r"方式所留的边空较小。

    取值设为"d"时会锁定此坐标轴, 后续的图形都使用与它完全相同的坐标轴, 这在要生成一系列可比较的图形的时候是有用的。 要解除锁定需要把这个图形参数设为其它值。

坐标轴与坐标刻度

  • mgp=c(3,1,0) 坐标轴的标签、刻度值、坐标轴线 到实际的坐标轴位置的距离,以行高为单位。 经常用来缩小坐标轴所占的空间, 如mgp=c(1.5, 0.5, 0)

  • lab=c(5,7,12) 提供刻度线多少的建议, 第一个数为x轴刻度线个数, 第二个数为y轴刻度线个数, 第三个数是坐标刻度标签的字符宽度。

  • las=1 坐标刻度标签的方向。 0表示总是平行于坐标轴, 1表示总是水平, 2表示总是垂直于坐标轴。

  • tck=0.01 坐标轴刻度线长度,以绘图区域大小为单位1。

  • xaxs="s", yaxs="e": 控制x轴和y轴标刻度的方法。

    "s"(即standard)或"e"(即extended) 的时候数据范围控制在最小刻度和最大刻度之间。 取"e"时如果有数据点十分靠近边缘轴的范围会略微扩大。

    取值为"i"(即internal)或"r"(此为缺省) 使得刻度线都落在数据范围内部,而"r"方式所留的边空较小。

    取值设为"d"时会锁定此坐标轴, 后续的图形都使用与它完全相同的坐标轴, 这在要生成一系列可比较的图形的时候是有用的。 要解除锁定需要把这个图形参数设为其它值。

图形边空

边空的大小由mai参数或mar参数控制, 它们都是四个元素的向量, 分别规定下方、左方、上方、右方的边空大小, 其中mai取值的单位是英寸, 而mar的取值单位是文本行高度。

opar <- par(mar=c(2,2,1,0.5), 
mgp=c(0.5, 0.5, 0), tck=0.005)
with(d.class, plot(height, weight,
xlab='', ylab=''))

par(opar)

一页多图

一页多图用mfrow参数或mfcol参数规定。 用oma指定四个外边空的行数。 用mtext加outer=T指定在外边空添加文本。 如果没有outer=T则在内边空添加文本。 如

opar <- par(mfrow=c(2,2),
oma=c(0,0,2,0))
with(d.class, {hist(height);
boxplot(height);
qqnorm(height); qqline(height);
plot(height); rug(height,side=2)})
mtext(side=3, text='身高分布', cex=1.5, outer=T)

par(opar)

图形输出

PDF输出

# pdf函数
pdf(file='fig-pdf-test.pdf', height = 10/2.54,
width = 10/2.54, family = 'GB1')
plot(d.class$height, d.class$weight,
xlab = '身高', ylab = "体重" ,main = "体重与身高的关系")
# 关闭当前设备并生成输出文件
dev.off()

- family
the font family to be used, see postscript. Defaults to “Helvetica”.

PNG输出

png(file='fig-pnd-test.png', height = 1920, width = 1080)
with(d.class, plot(height, weight, main = "体重与身高的关系"))
dev.off()

jpeg输出

jpeg(file='fig-jpeg-test.jpg')
with(d.class, plot(height, weight, main = "体重与身高的关系"))
dev.off()

类似地, 用bmp()函数启用BMP图形设备,用postscript()函数启用PostScript图形设备。