前面介绍的主函数plot()主要用于绘制散点图和折线图,绘制其他常见的图形如柱状图、直方图、扇形图和箱形图等可以调用专门的函数。

1 柱状图

绘制基础柱状图的函数是barplot(),其语法结构如下:

barplot(height, width = 1, space = NULL,names.arg = NULL, legend.text = NULL, beside = FALSE,horiz = FALSE, density = NULL, angle = 45,col = NULL, border = par("fg"),main = NULL, sub = NULL, xlab = NULL, ylab = NULL,xlim = NULL, ylim = NULL, xpd = TRUE, log = "",axes = TRUE, axisnames = TRUE,cex.axis = par("cex.axis"), cex.names = par("cex.axis"),inside = TRUE, plot = TRUE, axis.lty = 0, offset = 0,add = FALSE, ann = !add && par("ann"), args.legend = NULL, ...)

基本形态

  • height表示柱形高度,相当于y变量,数据结构为向量或者矩阵;

  • height为向量时,每个元素代表一组;

  • height为矩阵时,矩阵每列数据表示一个大组,每个元素表示一个亚组。

  • beside参数控制大组内亚组的摆放方式;默认值FALSE表示叠加摆放,TRUE表示并列摆放。

  • names.arg表示柱形的组名,相当于x变量,默认省略。

# 使用泊松分布函数生成随机数
set.seed(123)
num <- rpois(12, 6)
mat <- matrix(num, ncol = 3)
lab <- LETTERS[c(1:dim(mat)[2])]
labsub <- t(outer(lab, c(1:dim(mat)[1]), paste0))par(fig = c(0,0.4,0,1))
barplot(mat, names.arg = lab)
par(new = T, fig = c(0.4,1,0,1))
barplot(mat, beside = T, names.arg = labsub)

细节调整

  • width调整柱形宽度;

  • width可根据柱形个数确定向量长度,当长度少于柱形个数时采用循环赋值;

  • 单位宽度根据图形大小而定,因此该参数主要用于控制不同柱形宽度的比例,当长度为1时无意义。

  • space调整柱形间隔。

  • space默认是长度为2的向量,单位间隔为width;

  • 第一个元素为组内间隔,第二个元素为组间间隔;也可以根据柱形个数依次赋值。

par(mfcol = c(1,2))
barplot(mat[,c(1,2)], beside = T, width = c(1,2))
barplot(mat[,c(1,2)], beside = T, width = c(1,2), space = c(0.2, 1.5))

  • density控制柱形内部阴影的密度;

  • angle控制阴影线条的倾斜角度,默认是45度;

  • col控制柱形内部填充颜色;

  • border控制柱形轮廓颜色。

par(mfcol = c(1,2))
barplot(mat, density = c(12,24,36,48), angle = c(-45, 0, 45, 90))
barplot(mat, beside = T, col = c("lightblue", "mistyrose", "lightcyan","lavender"), border = "red")

  • horiz为TRUE时,柱形水平摆放;

  • offset控制柱形高度与横坐标轴的偏移量,默认为0。

  • add为TRUE时,本句命令产生的新图形会直接添加在已存在的图形上,类似图层叠加;

  • 当把barplot()赋值给某变量时,返回的是每个柱形中心线的横坐标并在绘图区绘制出图形;但当plot参数为FALSE时不绘制图形,只返回中心线的横坐标;

  • plot()函数一样,boxplot()也自动继承par()中的参数。

a <- barplot(mat, beside = T, horiz = T, xlim = c(0,20), col = "red", plot = F)
b <- barplot(mat, beside = T, horiz = T, xlim = c(0,20), col = "green", font = 4)
identical(a, b)
bbarplot(num, horiz = T, offset = 10, add = T, col = "lightblue", axes = F)
# 部分输出结果
identical(a, b)
## [1] TRUE
b
##      [,1] [,2] [,3]
## [1,]  1.5  6.5 11.5
## [2,]  2.5  7.5 12.5
## [3,]  3.5  8.5 13.5
## [4,]  4.5  9.5 14.5

barplot()还可以用变量之间的函数形式来指明绘图变量和分组变量,其语法结构如下:

barplot(formula, data, subset, na.action,horiz = FALSE, xlab = NULL, ylab = NULL, ...)
  • formula的基本形式为y ~ x,其中y为绘图变量,x为分组变量,有以下三种形式:

  • y ~ x;

  • y ~ x1 + x2;

  • cbind(y1, y2) ~ x。

  • data为公式中变量所在的数据框或list;

  • 当data中的分组变量控制的分组对应的绘图变量数值不唯一时,需使用subset取data的子集使之唯一;

  • 前面的细节调整参数在该语法结构中仍然适用。

par(mfcol = c(1,2))
barplot(GNP ~ Year, data = longley)d.Titanic <- as.data.frame(Titanic)
d.Titanic
barplot(Freq ~ Class + Survived, data = d.Titanic, subset = Age == "Adult" & Sex == "Male", legend = T, beside = T)
# 部分输出结果
d.Titanic
##    Class    Sex   Age Survived Freq
## 1    1st   Male Child       No    0
## 2    2nd   Male Child       No    0
## 3    3rd   Male Child       No   35
## 4   Crew   Male Child       No    0
## 5    1st Female Child       No    0
## 6    2nd Female Child       No    0
## 7    3rd Female Child       No   17
## 8   Crew Female Child       No    0
## 9    1st   Male Adult       No  118
## 10   2nd   Male Adult       No  154
## 11   3rd   Male Adult       No  387
## 12  Crew   Male Adult       No  670
## 13   1st Female Adult       No    4
## 14   2nd Female Adult       No   13
## 15   3rd Female Adult       No   89
## 16  Crew Female Adult       No    3
## 17   1st   Male Child      Yes    5
## 18   2nd   Male Child      Yes   11
## 19   3rd   Male Child      Yes   13
## 20  Crew   Male Child      Yes    0
## 21   1st Female Child      Yes    1
## 22   2nd Female Child      Yes   13
## 23   3rd Female Child      Yes   14
## 24  Crew Female Child      Yes    0
## 25   1st   Male Adult      Yes   57
## 26   2nd   Male Adult      Yes   14
## 27   3rd   Male Adult      Yes   75
## 28  Crew   Male Adult      Yes  192
## 29   1st Female Adult      Yes  140
## 30   2nd Female Adult      Yes   80
## 31   3rd Female Adult      Yes   76
## 32  Crew Female Adult      Yes   20

2 直方图

直方图是使用原始数据经过统计变换后得到分组的频率或频数绘制的柱状图,实质是离散的密度图。hist()函数会自动进行统计变换,语法结构如下:

hist(x, breaks = "Sturges",freq = NULL, probability = !freq,include.lowest = TRUE, right = TRUE,density = NULL, angle = 45, col = NULL, border = NULL,main = paste("Histogram of" , xname),xlim = range(breaks), ylim = NULL,xlab = xname, ylab,axes = TRUE, plot = TRUE, labels = FALSE,nclass = NULL, warn.unused = TRUE, ...)

基本形态

  • x为原始数据序列;

  • freq为TRUE表示统计频数,probability为TRUE表示统计频率;默认情况下统计频数。

# 使用泊松分布生产随机数
set.seed(123)
num <- rpois(100, 10)
numpar(mfcol = c(1,2))
hist(num)
hist(num, probability = T)
# 部分输出结果
num
##   [1]  8  9 14 10 10 15 11  5  4 13 11 11 10  8 15 11  3  7  6  8  6  8  4  6  6
##  [26]  8  5 12 12 12 12 11  9  9  8  7 12  9 13  7  8  8 12  9 10  9  9 14  9 14
##  [51]  5  6 10 11  8  8  6 11 13 12 11 12  9  9  7  7 11  9  7 10  9 10 11  8 12
##  [76]  9 11 13 11  8 13 13 11 10  8 14  8 16 14  9  6 15 10 13  8  7  7 11  9 14

  • breaks表示分组区间的起始和终止点。有以下几种计算方式:

  • 向量形式,必须保证所有数都包括在向量指定的范围内;

  • 指定分组的数量;

  • 指定算法,包括Sturges(默认)、Scott和FD,具体见grDevices::nclass()函数。

  • right控制分组区间的闭合形式,默认值TRUE表示左开右闭,FALSE表示左闭右开;

  • include.lowest控制首尾两个区间的闭合形式,默认值TRUE表示首尾区间为完全闭合区间,为FASLE表示根据right参数决定左开右闭或左闭右开。

par(mfcol = c(1,2))
hist(num, right = F, breaks = c(0,6,8,10,12,14,20), freq = T)
hist(num, breaks = "Scott")

细节调整参数同barplot()函数

3 扇形图

扇形图(饼图)的绘制函数为pie()。扇形图的实质是极坐标下的频率直方图,但是pie()函数并不会自动进行统计变换。语法结构如下:

pie(x, labels = names(x), edges = 200, radius = 0.8,clockwise = FALSE, init.angle = if(clockwise) 90 else 0,density = NULL, angle = 45, col = NULL, border = NULL,lty = NULL, main = NULL, ...)

基本形态

  • x为统计变换后的频率数据序列,会根据数值大小同比例地转换为百分比。

细节调整

  • 饼图的外轮廓实际上是多边形,边数由edges指定,默认为200;

  • clockwise表示绘制的方向,默认值FALSE表示逆时针;

  • init.angle表示绘制的起始角度,逆时针时默认为0度(3点钟位置),顺时针时默认为90度(12点钟位置);

  • labels用于给扇形图各区域命名。

# 使用泊松分布生产随机数
par(mfcol = c(1,2))
set.seed(123)
num <- rpois(10, 3)
num
pie(num)n <- tapply(num, num, length) # 统计个数
pie(n)pie(n, edges = 10, init.angle = 90, labels = LETTERS[c(1:length(n))])
pie(n, edges = 100, clockwise = T, labels = LETTERS[c(1:length(n))])
# 部分输出结果
num
##  [1] 2 4 2 5 6 0 3 5 3 3

其他细节调整参数同barplot()函数

4 箱形图

箱形图主要用于展示数据分布情况,绘制函数为boxplot(),语法结构如下:

boxplot(x, ..., range = 1.5, width = NULL, varwidth = FALSE,notch = FALSE, outline = TRUE, names, plot = TRUE,border = par("fg"), col = NULL, log = "",pars = list(boxwex = 0.8, staplewex = 0.5, outwex = 0.5),ann = !add, horizontal = FALSE, add = FALSE, at = NULL)

基本形态

箱形图的构成:

  • 箱形中间的横线表示数据序列的中位数,上下边表示上四分位(Q3)和下四分位(Q1);箱形高度为内距(IQR = Q3 - Q1);

  • 箱形外的两个横线表示数据的正常分布范围,与箱形的距离用内距的倍数表示,一般取1.5倍,即上侧横线的位置为Q3 + 1.5*IQR,下侧横线的位置为Q1 - 1.5*IQR;

  • 横线范围外为异常值,使用散点表示。

相应控制参数:

  • x和...代表原始数据序列;

  • range控制箱形外横线的位置,默认值1.5表示距离箱形1.5个内距;

  • outline控制异常值是否显示,默认值TRUE表示显示。

set.seed(123)
num <- rpois(100, 12)
num2 <- rpois(200, 8)par(mfcol = c(1,2))
boxplot(num, range = 1.1)
boxplot(num, num2, range = 1.1, outline = F)

细节调整

  • notch调整箱形形状;

  • width控制多个箱形宽度的比例;

  • varwidth默认值为FASLE,为TRUE时表示箱形宽度与数据量成正比。

par(mfcol = c(1,2))
boxplot(num, num2, notch = T, width = c(2,1))
boxplot(num, num2, notch = T, varwidth = T)

  • boxwex控制箱形和箱形外横线的绝对宽度;

  • staplewex只控制箱形外横线的绝对宽度。

par(mfcol = c(1,2))
boxplot(num, num2, boxwex = c(0.8, 1))
boxplot(num, num2, staplewex = c(0.5, 0.8))

  • at控制箱形的横坐标,可配合add参数使用;

  • horizontal相当于boxplot()的horiz参数;

  • 其他细节调整参数同barplot()函数。

par(mfcol = c(1,2))
boxplot(num, xlim = c(0, 3), ylim = c(2, 20), col = "lightblue")
boxplot(num2, add = T, at = 2, col = "red")boxplot(num, xlim = c(0, 3), ylim = c(2, 20), col = "lightblue", horizontal = T)
boxplot(num2, add = T, at = 2, col = "red", horizontal = T)

barplot()一样,boxplot()也可以使用函数关系制定统计变量和分组变量,语法结构如下:

boxplot(formula, data = NULL, ..., subset, na.action = NULL,xlab = mklab(y_var = horizontal),ylab = mklab(y_var =!horizontal),add = FALSE, ann = !add, horizontal = FALSE,drop = FALSE, sep = ".", lex.order = FALSE)
par(mfcol = c(1,2))
boxplot(mpg ~ cyl, data = mtcars)
boxplot(mpg ~ vs + am, data = mtcars)

5 函数图象

curve()根据根据函数表达式绘制出某区间段的函数图象,语法结构如下:

curve(expr, from = NULL, to = NULL, n = 101, add = FALSE,type = "l", xname = "x", xlab = xname, ylab = NULL,log = NULL, xlim = NULL, ...)
  • expr为数学函数表达式,可以为系统中的函数,也可以为自定义函数;

  • from和to为区间的起始和终止位置;

  • n为绘制图像所用的描点个数,默认值为101个。

par(mfcol = c(1,2))
curve(sin, -2*pi, 2*pi)f <- function(x) x*sin(x)
curve(f, -2*pi, 2*pi)


graphics | 基础绘图系统(四)——柱状图、直方图、扇形图、箱形图和函数图象...相关推荐

  1. graphics | 基础绘图系统(五)——plot函数功能再探和低级绘图函数

    plot函数虽然主要用于绘制散点图和折线图,但它实际上是一个比较全能的函数.本篇就介绍如何使用plot函数绘制其他类型的图形.另外,上篇介绍的高级绘图函数如boxplot.barplot等都有参数ad ...

  2. graphics | 基础绘图系统(十)——星形图、四瓣图、马赛克图

    插播消息:最初建的交流群已经无法使用了,新建群的加入方式见次条推送. 本篇是"基础绘图系统"系列推文的最后一篇,我们来介绍三种不常见的图形,对应的绘图函数分别如下: stars() ...

  3. graphics | 基础绘图系统(七)——各式各样的散点图/折线图

    前面已经用了六篇推文系统地介绍了R语言的基础绘图系统的主要函数用法,以及柱状图.直方图.箱形图.扇形图等常见图形的绘制方法,接下来将计划用四篇推文介绍使用基础绘图系统能够绘制的其他各类图形. 本篇介绍 ...

  4. graphics | 基础绘图系统(一)——主函数plot及其参数

    R语言的基础绘图系统主要由基础包graphics提供,它包含了各式的图形绘制函数,如折线图.直方图.箱形图等.本篇主要介绍plot()函数的用法,它主要用于绘制散点图和折线图. plot()函数的语法 ...

  5. graphics | 基础绘图系统(八)——棘状图、符号图、多边形(路径)图、Cohen-Friendly关联图、条件密度图...

    本篇继续介绍基础绘图系统中的几个绘图函数. spineplot() 该函数用于绘制棘状图,有以下两种语法结构: spineplot(x, y = NULL,breaks = NULL, tol.yla ...

  6. graphics | 基础绘图系统(九)——栅格图、点密度图、等高线(填充)图、三维图...

    先插播一则消息:刚建的交流群莫名其妙地被判违规,不仅无法加新人,而且群内的消息可能只能自己看到.先看看过几天能不能解封,不行再另想办法. 本篇是"基础绘图系统"系列的第九篇推文,也 ...

  7. graphics | 基础绘图系统(三)——添加文本标注、坐标轴线和图例

    前面介绍了使用使用高级绘图函数plot()绘制基本图形和使用参数函数par()美化要素.设置布局等.但有时为了表达更丰富的内容,我们还需要添加文本标注以及必要的图例,这些可以使用text().mtex ...

  8. graphics | 基础绘图系统的拼图方法之三:使用mfrow、mfcol参数和layout函数

    R的基础绘图功能是个自成体系的系统,尽管有许多工具包可以"一行代码绘制一幅图",但是小编仍然认为系统地学习基础功能非常重要. 本篇推文是为了补全关于基础绘图系统的拼图功能的介绍,前 ...

  9. graphics | R语言的基础绘图系统(二)—— 绘图参数及par函数

    前篇(graphics | 基础绘图系统(一)--主函数plot及其参数)介绍了基础系统的绘图主函数plot()及其参数.实际上,plot()函数的参数主要由par()提供.不同于plot()函数,p ...

最新文章

  1. springmvc三十:异常处理流程
  2. oracle怎么关闭约束,Oracle约束enable/disablenovalidate
  3. 静态网页和动态网页的区别(转载)
  4. php字符串search,js获取location.search每个查询字符串的值
  5. 汇编语言不带冒号标号的用法
  6. python贪吃蛇毕业设计_【干货|python项目实例——贪吃蛇】- 环球网校
  7. Python程序,辅助微信跳一跳游戏介绍
  8. 再见,Eclipse
  9. 海康威视、大华监控摄像头rtsp地址规则
  10. Oracle 修改 MEMORY_TARGET
  11. Android学习(十三) BroadcastReceiver组件(广播)
  12. C++类的静态成员函数
  13. 学习总结——Postman做http接口功能测试
  14. Attention Mechanisms in Computer Vision: A Survey(四)
  15. 北漂小斌和你分享北京大兴机场3dmax模型
  16. 让电脑说话vbs程序
  17. 诺基亚WP7手机或10月发布 搭载新版系统
  18. Codeforces 1324 D. Pair of Topics(二分)
  19. 斐波那契数列算法c语言实现
  20. 罗技鼠标m590 连接器无法工作

热门文章

  1. Java基础学习总结(172)——手写Java 重试机制
  2. Spring Cloud与微服务学习总结(2)——Spring Cloud相较于Dubbo等RPC服务框架的优势
  3. js 点击闭包_【新年跳槽必备】2020最新(前端原生JS专题)面试题 速领!
  4. cassandra hbase_弥补MySQL和Redis短板:看HBase怎么确保高可用
  5. redis怎么修改_面试官问我Redis事务,还问我有哪些实现方式
  6. linux目录结构来源6,Linux入门基础 #6 Linux系统目录架构
  7. 如何套用模板绘制生产管理流程图
  8. 基于HTML5的Web SCADA工控移动应用
  9. 简析银行业数据中心的特点
  10. HTML5的设计目的是为了在移动设备上支持多媒体