- 前言
- 一、直方图hist()参数简介
- 二、hist()参数详解
- 1.breaks
- 2.freq
- 3.probability
- 4.include.lowest
- 5.right
- 6.density,angle
- 7.col,border
- 8.labels
- 9.main, xlab, ylab xlim, ylim
- 10.axes,plot
- 11.nclass
- 12.warn.unused
- 总结
前言
关于R语言的绘图教程满天飞,随便一搜一大堆,做这个系列一方面我想打好基本功,另一方面,方便大家学习,整个系列可能不会有耳目一新的感觉,但我尽量多的运用帮助文档中的参数。
之前已经写过的:
条形图——barplot
今天来学一下直方图函数 hist() 吧。
一、直方图hist()参数简介 **函数:** hist(x, breaks = "Sturges", freq = NULL, probability = !freq, include.lowest = TRUE, right = TRUE, density = NULL, angle = 45, col = "lightgray", 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:数据(不多谈,一个向量,用来绘制直方图的数据) main:直方图标题。(不多谈)
示例数据(随机生成50个正太分布的数据):
a <- rnorm(50,10,5)
默认参数时图片为:
二、hist()参数详解 1.breaks1.breaks为数字向量时(常用):指定直方图在哪些点截断,一定要包含数据的极值,否则会报错
2.breaks为单个数字时:指定直方图有多少个直方(会有偏差)
3.breaks可以为函数或者字符串值,用来计算直方图的断点
代码如下:
par(mfrow = c(1,2)) hist(a,main = "breaks = c(min(a),max(a))",breaks = c(min(a),max(a))) hist(a,main = "breaks = c(min(a),1,max(a))",breaks = c(min(a),1,max(a)))2.freq
freq:设置直方图纵轴时表示频数还是概率密度,FALSE展示概率密度,默认为FALSE
代码如下:
par(mfrow = c(1,2)) hist(a,main = "freq = T",freq = T) hist(a,main = "freq = F",freq = F)3.probability
和freq意义相反,可以和上图比较
代码如下:
hist(a,main = "probability = T",probability = T) hist(a,main = "probability = F",probability = F)4.include.lowest
是否包含最小值(默认为TRUE),默认情况下,直方图绘制时是左开右闭(m,n]的区间,当区间下限是最小值时,include.lowest取false值会报错,当下限不包含最小值时不影响画图。
5.right直方图默认左开右闭区间(m,n],即right=TRUE,若想设置为左闭右开,则right=FALSE。示例数据为:a <- c(1,2,3,5,6,7)。可以发现当TRUE时,缺失的4在(3,4]区间,当FALSE时,缺失的4在[4,5)区间。
代码如下:
a <- c(1,2,3,5,6,7) hist(a,breaks = c(0,1,2,3,4,5,6,7,8),main = "right = T",right = T) hist(a,breaks = c(0,1,2,3,4,5,6,7,8),main = "right = F",right = F)6.density,angle
设置直方图中填充斜线的密度和角度。
例子中发现每两个相邻的区间直方中斜线密度不一样,左右两幅图中的斜线密度不一样。
代码如下:
a <- c(1,2,3,5,6,7) hist(a,breaks = c(0,1,2,3,4,5,6,7,8),main = "density = c(10,50)nangle = 30",density = c(10,50),angle = 30) hist(a,breaks = c(0,1,2,3,4,5,6,7,8),main = "density = c(10,50)nangle = 120",density = c(10,50),angle = 120)7.col,border
设置直方图填充颜色及直方图边框颜色。
因为是从左至右绘制,因此左边的右边框会被右边的左边框会覆盖
代码如下:
a <- c(1,2,3,5,6,7)
hist(a,breaks = c(0,1,2,3,4,5,6,7,8),main = "col = c('red','lightblue')",col = c('red','lightblue'))
hist(a,breaks = c(0,1,2,3,4,5,6,7,8),main = "border = c('lightblue','red')",border = c('lightblue','red'),col = NULL)
8.labels
这个参数就好玩儿了
1.labels=TRUE,这时候每一个直方图上面的数字代表了,频数(左上图)
2.labels为一个字符向量时,相当于在直方图上加注释
- 如果这个这个字符串向量长度大于直方的个数,那么会继续从前往后添加标签直至向量结束(右上图),出现覆盖的情况
- 如果这个字符串向量长度小于直方的个数,那么会继续从向量的开头取读取标签直至所有的直方都有一个标签,也就是循环读取labels向量(右下图)
代码如下:
par(mfrow=c(2,2))
a <- c(1,2,2,5,6,7,6,6,6,7,7)
names(a) <- c('a','b','c','d','e','f','g','h','i','j','k')
hist(a,breaks = c(0,1,2,3,4,5,6,7,8),main = 'labels = T',labels = T,ylim = c(0,max(table(a))+1))
hist(a,breaks = c(0,1,2,3,4,5,6,7,8),main = 'labels = names(a)',labels = names(a),ylim = c(0,max(table(a))+1))
b <- c(1,2,3,4,5,6,7,8)
names(b) <- c('a','b','c','d','e','f','g','h')
hist(b,breaks = c(0,1,2,3,4,5,6,7,8),main = 'labels = names(b)',labels = names(b),ylim = c(0,max(table(b))+1))
hist(b,breaks = c(0,1,2,3,4,5,6,7,8),main = 'labels = names(b)[1:4]',labels = names(b)[1:4],ylim = c(0,max(table(b))+1))
9.main, xlab, ylab xlim, ylim
这里和上一篇barplot教程一样的参数,分别设置标题,x轴、y轴的轴标题和限制(就不演示了)
10.axes,plot和上一篇教程一样,是否显示坐标轴(这里是x轴和y轴,barplot中是纵轴)
plot:即是否显示图
等效于breaks
代码如下:
12.warn.unused目前我还未开发他的实际作用
代码如下:
总结
这篇写的比上一篇短多了,真心不是我懒,谁叫他就这么几个参数。当然了,画图函数绝不仅仅只有这几个参数,还包括par()函数的参数部分也可以放在画图函数中,等把基本绘图函数写完,我就把par()参数详细学一下。
实力有限,如有错误,欢迎大家批评指正



