R语言基础教程4:柱形图

一、基本柱形图:

从R自带的airquality中获取一些数据做示例:

  1. set.seed(1000)
  2. # 查看 airquality 数据集的基本结构
  3. str(airquality)
  4. ## 'data.frame': 153 obs. of 6 variables:
  5. ## $ Ozone : int 41 36 12 18 NA 28 23 19 8 NA ...
  6. ## $ Solar.R: int 190 118 149 313 NA NA 299 99 19 194 ...
  7. ## $ Wind : num 7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
  8. ## $ Temp : int 67 72 74 62 56 66 65 59 61 69 ...
  9. ## $ Month : int 5 5 5 5 5 5 5 5 5 5 ...
  10. ## $ Day : int 1 2 3 4 5 6 7 8 9 10 ...
  11. # 可以看到“airquality”为数据框类型,有NA值。去掉NA,并把它转成matrix数据:
  12. datax <- as.matrix(na.omit(airquality))
  13. str(datax)
  14. ## num [1:111, 1:6] 41 36 12 18 23 19 8 16 11 14 ...
  15. ## - attr(*, "dimnames")=List of 2
  16. ## ..$ : chr [1:111] "1" "2" "3" "4" ...
  17. ## ..$ : chr [1:6] "Ozone" "Solar.R" "Wind" "Temp" ...
  18. sel <- sample(1:nrow(datax), 5)
  19. y1 <- datax[sel, 1]
  20. y2 <- datax[sel, 2]
  21. y3 <- datax[sel, 3]
  22. labels <- paste("S", 1:length(y1), sep = "")
  23. legs <- c("Ozone", "Solar.R", "Wind")

plot函数绘制散点图和折线图时,我们要使用成对的 x,y 数据来作图, 如果只有提供一个系列的数据,R把它当成y值,x值自动用序号表示;如果type参数设为h,再设置一下线宽和线末端性状就可以得到柱形图:

  1. plot(y1, type = "h", lwd = 15, lend = 2)

R语言基础教程4:柱形图-图片1

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

  1. barplot(y1)

R语言基础教程4:柱形图-图片2

设置其他任何参数的话得到的图形非常朴素,因为R作图的目的主要是进行数据可视化分析,图形没有任何多余的成分对数据分析有好处。初步分析后如果觉得柱形图能用,再做简单美化,设几个参数:y轴范围(ylim)、柱形与边框的偏移量、x轴标签和图形边框:

  1. barplot(y1, ylim = c(0, max(y1) * 1.1), offset = 0, axis.lty = 1, names.arg = labels)
  2. box()

R语言基础教程4:柱形图-图片3

二、多系列柱形图

多系列的柱形图要使用矩阵提供数据,R把矩阵的每一列作为一个数据系列来绘图。

  1. dataxx <- rbind(y1, y2, y3)
  2. ylim <- c(0, max(y1 + y2 + y3) * 1.1)
  3. cols <- terrain.colors(3)
  4. barplot(dataxx, ylim = ylim, offset = 0, axis.lty = 1, names.arg = labels, col = cols)
  5. box()

R语言基础教程4:柱形图-图片4

数据框虽然样子和矩阵差不多,但在这不行。

  1. barplot(as.data.frame(dataxx), ylim = ylim, offset = 0, axis.lty = 1, names.arg = labels,
  2. col = cols)
  3. ## Error: 'height' must be a vector or a matrix

不同数据系列在柱形图上放置的默认方式是堆叠。如果要并排方式就设置beside参数为TRUE。:

  1. ylim <- c(0, max(dataxx) * 1.15)
  2. barplot(dataxx, ylim = ylim, offset = 0, axis.lty = 1, names.arg = labels, col = cols,
  3. beside = TRUE)
  4. box()

R语言基础教程4:柱形图-图片5

柱形图数据的分组方式跟矩阵的行列方式有关,要改变分组方式只需对矩阵用t()函数进行转置即可:

  1. barplot(t(dataxx), ylim = ylim, offset = 0, axis.lty = 1, names.arg = legs,
  2. beside = TRUE, col = terrain.colors(length(labels)))
  3. box()

R语言基础教程4:柱形图-图片6

三、标题和图例

标题设置还是和散点图一样的,低水平绘图函数仍然有用。图例设置的可以使用分步的方法,使用fill参数设置填充颜色;也可以直接在barplot函数里面通过参数设定而参数:

  1. x <- barplot(dataxx, ylim = ylim, offset = 0, axis.lty = 1, names.arg = labels,
  2. col = cols, beside = TRUE)
  3. box()
  4. legend("topleft", legend = legs, fill = cols, box.col = "transparent")
  5. title(main = "An example of barplot", xlab = "Sample", ylab = "Value")

R语言基础教程4:柱形图-图片7

四、添加柱形图误差线:

误差线绘制首先要确定x,y坐标,但是绘制柱形图时我们只有表示y轴位置的数据系列。怎么办?问题不大。

plot函数是没有返回值的,而barplot函数把柱形图绘制时的x坐标作为返回值。我们前面已经保存了barplot的返回值,看看什么情况:

  1. x
  2. ## [,1] [,2] [,3] [,4] [,5]
  3. ## [1,] 1.5 5.5 9.5 13.5 17.5
  4. ## [2,] 2.5 6.5 10.5 14.5 18.5
  5. ## [3,] 3.5 7.5 11.5 15.5 19.5
  6. dataxx
  7. ## 66 125 17 114 89
  8. ## y1 64.0 78.0 34 9.0 82.0
  9. ## y2 175.0 197.0 307 36.0 213.0
  10. ## y3 4.6 5.1 12 14.3 7.4

x的顺序和绘制柱形图所用数据dataxx的顺序是一样的。

R基本包没有提供误差线绘制的函数,但这完全可以自己做一个,代码很简单,下面用的是arrows函数,也可以用segments函数:

  1. plot.error <- function(x, y, sd, len = 1, col = "black", horiz = FALSE) {
  2. len <- len * 0.05
  3. if (!horiz) {
  4. arrows(x0 = x, y0 = y, x1 = x, y1 = y - sd, col = col, angle = 90, length = len)
  5. arrows(x0 = x, y0 = y, x1 = x, y1 = y + sd, col = col, angle = 90, length = len)
  6. } else {
  7. arrows(x0 = y, y0 = x, x1 = y - sd, y1 = x, col = col, angle = 90, length = len)
  8. arrows(x0 = y, y0 = x, x1 = y + sd, y1 = x, col = col, angle = 90, length = len)
  9. }
  10. }

函数有5个参数,分别设置x, y, 误差值, 误差线宽度,颜色和方向(水平或垂直)。用数据的10%作为误差绘制误差线:

  1. sd <- dataxx * 0.1
  2. for (i in 1:3) plot.error(x[i, ], dataxx[i, ], sd = sd[i, ])

R语言基础教程4:柱形图-图片8

五、barplot的其他参数

很多参数的作用和其他绘图函数,如:main, sub, xlab, ylab, xlim, ylim。但有几个特殊的参数:

axis.lty:用于设置坐标轴线的类型,如果不设置则x轴不绘制

names.arg:设置柱形图下面的标签名

angle:如果柱子内斜线的角度

legend.text:图例的名称。可以在barplot函数里面直接设定。

ncol:设置图例排列的列数,默认为1,即图标竖排。

horiz:横向柱形

如果是横向的柱形图,误差绘制时要注意horiz设为TRUE:

  1. x <- barplot(dataxx, xlim = ylim, offset = 0, axis.lty = 1, names.arg = labels,
  2. col = cols, beside = TRUE, horiz = T)
  3. box()
  4. legend("bottomright", legend = legs, fill = cols, box.col = "transparent")
  5. title(xlab = "Value", ylab = "Sample")
  6. sd <- dataxx * 0.1
  7. for (i in 1:3) plot.error(x[i, ], dataxx[i, ], sd = sd[i, ], horiz = TRUE)

R语言基础教程4:柱形图-图片9

原文来自:http://blog.csdn.net/u014801157/article/details/24372345

 

 

 

 

 

 

 

 

 

发表评论

匿名网友

拖动滑块以完成验证
加载失败