本文概述
这是R教程系列的第一篇文章, 介绍了如何在R中创建自己的直方图的基础知识。将探讨三个选项:R的基本命令, ggplot2和ggvis。这些职位面向需要可访问且易于理解的资源的初级和中级R用户。
使用基本的R命令制作直方图将是本文的主题。你将在本教程中介绍以下主题:
- 什么是直方图?
- 如何使用Basic R制作直方图
想了解更多?在srcmini发现R课程。
什么是直方图?
直方图是数据集分布的直观表示。因此, 直方图的形状是其最明显, 最有用的特征:它使你可以轻松地看到相对大量的数据位于何处, 以及几乎找不到什么数据(Verzani 2004)。换句话说, 你可以看到数据分布中的中间位置, 该中间位置附近数据的距离以及在哪里可以找到异常值。因此, 直方图是了解你的数据的好方法!
但是, 直方图的特定形状到底是什么样的?
简而言之, 直方图由x轴, y轴和不同高度的各种条组成。 y轴显示数据中x轴上的值出现的频率, 而条形图将值的范围或连续类别分组在x轴上。后者解释了为什么直方图在条形图之间没有间隙。
注意, 直方图的条通常被称为” bins”;本教程还将使用该名称。
如何使用Basic R制作直方图
1.向我显示数据
由于直方图需要首先绘制一些数据, 因此可以很好地导入数据集或使用R中内置的数据集。
本教程利用两个数据集:内置的R数据集AirPassengers和一个名为chol的数据集, 它们存储在.txt文件中并可供下载。
在开始使用直方图中的chol之前, 最好借助read.table()函数阅读文本文件:
chol <- read.table(url("http://assets.srcmini02.com/blog_assets/chol.txt"), header = TRUE)
2.熟悉Hist()函数
你可以使用hist()函数简单地制作一个直方图, 该函数计算给定数据值的直方图。你可以将数据集的名称放在该函数的括号之间, 如下所示:
结果为以下直方图:
但是, 如果你只想选择数据框的特定列(例如chol)以制作直方图, 则必须使用hist()函数, 将数据集名称与$符号结合使用, 然后再使用该列名称:
注意, chol数据已经为你加载!
在这段代码中, 你将计算数据帧的列chol中名为chol的数据值的直方图。执行此行代码后, 你将获得以下直方图:
3.将hist()函数提升一个档次
上一节的直方图看起来有些沉闷, 不是吗?
默认的可视化效果通常对理解直方图没有多大帮助。因此, 你需要采取进一步的步骤, 以更好, 更轻松地理解直方图。幸运的是, 这并不太难:R允许使用几种简便快捷的方法来优化图的可视化, 同时仍使用hist()函数。
为了适应直方图, 你只需要向hist()函数添加更多参数, 就像这样:
此代码计算数据集AirPassengers的数据值的直方图, 将其作为”航空乘客的直方图”作为标题, 将x轴标记为” Passengers”, 对垃圾箱给出蓝色边框和绿色, 同时限制x轴从100到700, 将y轴上打印的值旋转1, 并将bin宽度更改为5。
你觉得这串大代码有点不知所措吗?别担心!
以下各节将上述代码块分解为小段, 以查看每个参数(例如main, col, …)的作用。
名称/颜色
你可以通过将main作为参数添加到hist()函数来更改直方图的标题。在这种情况下, 你可以使用标题为”航空旅客的直方图”的航空客机数据集直方图:
如果要调整x轴的标签, 请添加xlab。同样, 你也可以使用ylab标记y轴:
在上面的srcmini Light块中, 你制作了AirPassengers数据集的直方图, 并在x轴和y轴上更改了标签。
如果要更改默认直方图的颜色, 只需添加参数border或col。你可以调整直方图的边框或颜色, 如名称本身一样。在下面的代码块中, 直方图将具有蓝色边框的垃圾箱, 其中绿色填充:
提示:不要忘记将颜色和名称放在””之间。
X和Y轴
通过将xlim和ylim作为参数添加到hist()函数, 更改轴上x和y值的范围:
在上面的代码块中, 直方图的x轴限制为100到700, 而y轴限制为0到30。
请注意, 使用xlim和ylim时, c()函数用于在轴上定界。它有两个值:第一个是开始值;第二个是开始值。第二个是最终值。
你可以通过添加las = 1作为参数来在y轴上旋转标签。 las可以采用以下值:0、1、2或3。
根据选择的选项, 标签的位置将有所不同:如果选择0, 则标签将始终与轴平行(默认设置);否则, 标签将始终与轴平行。如果选择1, 则标签将水平放置。如果要使其垂直于轴, 则选择2;如果要垂直放置, 则选择3。
在这种情况下, 由于将值1传递给las参数, 因此直方图具有水平投影的y值。尝试更改传递给las参数的数量, 然后查看效果!
垃圾箱
你可以通过添加分隔符作为参数以及所需的断点数来更改容器宽度:
上面的srcmini Light块中的代码行的结果直方图有5个断点。
如果你想更好地控制分档之间的断点, 可以通过给它一个断点向量来丰富breaks参数。你可以使用c()函数执行此操作:
换句话说, 作为上述代码的结果的直方图具有bin, 使得它们的范围从100到300、300到500和500到700。
但是, c()函数有时会使你的代码非常混乱。这就是为什么你可以改为添加seq(x, y, z)的原因。 x, y和z的值由你自己确定, 并按出现顺序表示x轴的开始编号, x轴的结束编号以及这些编号出现的间隔。
请注意, 你还可以将两个功能结合在一起:
该直方图在x轴上从100开始, 在200到700的值处, 条带宽度为150。通过查看以下图像或执行srcmini Light块, 来查看这段代码的结果!
提示:尝试seq参数中使用的数字时, 请彻底研究y轴的变化!
请注意, 条形或箱形的不同宽度可能会使人们感到困惑, 并且当你将此技术应用于原始直方图时, 数据中最有趣的部分可能会发现自己没有被突出显示甚至隐藏。因此, 只需尝试一下, 看看最适合你的目的!
额外:概率密度
默认情况下, hist()函数向你显示y轴上某个bin的频率。但是, 如果要查看x轴值间隔出现的可能性, 则需要概率密度而不是频率。因此, 你要询问比例的直方图。你可以通过将freq参数设置为false或将prob参数设置为TRUE来更改此设置:
调用hist()函数创建上述概率密度图后, 你可以随后使用lines()函数将密度曲线添加到数据集中:
请注意, 此函数要求你首先将直方图的prob参数设置为TRUE!
想走得更远吗?
有关可以添加到hist()函数的所有参数的详尽列表, 请查看有关hist()函数的RDocumentation文章。
这是有关使用R创建直方图的三篇文章中的第一篇。下一篇文章涵盖了使用ggplot2创建直方图的内容。