pan >sample(1:
nrow(datax), 5) y1 <- datax[sel,
1] y2 <- datax[sel, 2] y3 <- datax[sel, 3] labels <-
paste(
'S', 1:
length(y1), sep
=
'') legs <-
c(
'Ozone',
'Solar.R',
'Wind')
plot函数绘制散点图和折线图时,我们要使用成对的 x,y 数据来作图,
如果只有提供一个系列的数据,R把它当成y值,x值自动用序号表示;如果type参数设为h,再设置一下线宽和线末端性状就可以得到柱形图:
plot(y1, type =
'h', lwd = 15, lend =
2)

但绘柱形图的函数较好的函数是barplot,它只使用y值数据,称为高度(height)。说它是y值不合适,如果是横向的柱形图(条形图)就成了x值。
barplot(y1)

设置其他任何参数的话得到的图形非常朴素,因为R作图的目的主要是进行数据可视化分析,图形没有任何多余的成分对数据分析有好处。初步分析后如果觉得柱形图能用,再做简单美化,设几个参数:y轴范围(ylim)、柱形与边框的偏移量、x轴标签和图形边框:
barplot(y1, ylim =
c(0,
max(y1) * 1.1), offset = 0, axis.lty = 1, names.arg =
labels)
box()
二、多系列柱形图
多系列的柱形图要使用矩阵提供数据,R把矩阵的每一列作为一个数据系列来绘图。 dataxx <-
rbind(y1, y2, y3) ylim <-
c(0,
max(y1 + y2 + y3) * 1.1) cols <-
terrain.colors(3)
barplot(dataxx, ylim =
ylim, offset = 0, axis.lty = 1, names.arg = labels, col = cols)
box()
数据框虽然样子和矩阵差不多,但在这不行。
barplot(
as.data.frame(dataxx), ylim =
ylim, offset = 0, axis.lty = 1, names.arg = labels, col =
cols)
## Error: 'height' must be a vector or a matrix
不同数据系列在柱形图上放置的默认方式是堆叠。如果要并排方式就设置beside参数为TRUE。: ylim <-
c(0,
max(dataxx) * 1.15)
barplot(dataxx, ylim = ylim, offset = 0, axis.lty = 1,
names.arg = labels, col = cols, beside =
TRUE)
box()

柱形图数据的分组方式跟矩阵的行列方式有关,要改变分组方式只需对矩阵用t()函数进行转置即可:
barplot(
t(dataxx), ylim = ylim, offset =
0, axis.lty = 1, names.arg = legs, beside =
TRUE, col
=
terrain.colors(
length(labels)))
box()
三、标题和图例
标题设置还是和散点图一样的,低水平绘图函数仍然有用。图例设置的可以使用分步的方法,使用fill参数设置填充颜色;也可以直接在barplot函数里面通过参数设定而参数:
x <-
barplot(dataxx, ylim = ylim, offset = 0,
axis.lty = 1, names.arg = labels, col = cols, beside =
TRUE)
box()
legend(
'topleft', legend = legs, fill =
cols, box.col =
'transparent')
title(main
=
'An example of barplot', xlab =
'Sample', ylab =
'Value')
四、添加柱形图误差线:
误差线绘制首先要确定x,y坐标,但是绘制柱形图时我们只有表示y轴位置的数据系列。怎么办?问题不大。
plot函数是没有返回值的,而barplot函数把柱形图绘制时的x坐标作为返回值。我们前面已经保存了barplot的返回值,看看什么情况:
x
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1.5 5.5 9.5 13.5 17.5
## [2,] 2.5 6.5 10.5 14.5 18.5
## [3,] 3.5 7.5 11.5 15.5 19.5
dataxx
## 66 125 17 114 89
## y1 64.0 78.0 34 9.0 82.0
## y2 175.0 197.0 307 36.0 213.0
## y3 4.6 5.1 12 14.3 7.4
x的顺序和绘制柱形图所用数据dataxx的顺序是一样的。
R基本包没有提供误差线绘制的函数,但这完全可以自己做一个,代码很简单,下面用的是arrows函数,也可以用segments函数:
plot.error <-
function(x, y, sd, len =
1, col =
'black', horiz =
FALSE) { len
<- len * 0.05
if (!horiz) {
arrows(x0 = x, y0 = y, x1 = x, y1 = y - sd, col = col,
angle = 90, length = len)
arrows(x0 = x, y0 = y, x1 =
x, y1 = y + sd, col = col, angle = 90, length = len) }
else {
arrows(x0 = y, y0 = x, x1 = y -
sd, y1 = x, col = col, angle = 90, length = len)
arrows(x0 = y, y0 = x, x1 = y + sd, y1 = x, col = col,
angle = 90, length = len) } }
函数有5个参数,分别设置x, y, 误差值, 误差线宽度,颜色和方向(水平或垂直)。用数据的10%作为误差绘制误差线: sd
<- dataxx * 0.1
for (i
in
1:3)
plot.error(x[i, ], dataxx[i, ], sd = sd[i,
])
五、barplot的其他参数
很多参数的作用和其他绘图函数,如:main, sub, xlab, ylab, xlim, ylim。但有几个特殊的参数:
axis.lty:用于设置坐标轴线的类型,如果不设置则x轴不绘制
names.arg:设置柱形图下面的标签名
angle:如果柱子内斜线的角度
legend.text:图例的名称。可以在barplot函数里面直接设定。
ncol:设置图例排列的列数,默认为1,即图标竖排。
horiz:横向柱形
如果是横向的柱形图,误差绘制时要注意horiz设为TRUE:
x <-
barplot(dataxx, xlim = ylim, offset = 0,
axis.lty = 1, names.arg = labels, col = cols, beside =
TRUE, horiz = T)
box()
legend(
'bottomright', legend = legs, fill
= cols, box.col =
'transparent')
title(xlab =
'Value', ylab =
'Sample') sd <- dataxx * 0.1
for (i
in 1:3)
plot.error(x[i, ], dataxx[i, ], sd = sd[i, ], horiz =
TRUE)
