R语言绘图:直方图——hist


前言

关于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.breaks

1.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:即是否显示图

11.nclass

等效于breaks

代码如下:

12.warn.unused

目前我还未开发他的实际作用

代码如下:


总结

这篇写的比上一篇短多了,真心不是我懒,谁叫他就这么几个参数。当然了,画图函数绝不仅仅只有这几个参数,还包括par()函数的参数部分也可以放在画图函数中,等把基本绘图函数写完,我就把par()参数详细学一下。

实力有限,如有错误,欢迎大家批评指正

  • 27
    点赞
  • 211
    收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页
评论 1

打赏作者

一口吃两口饭

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值