直方图是一种统计图表。它将数据分成若干区间,统计每个区间内数据的数量或频率,用矩形条高度表示。能直观展现数据分布特征,如集中趋势、离散程度等。在数据分析、质量控制、市场调研等领域广泛应用,可帮助人们快速了解数据整体形态,为决策提供依据。在 R 语言中可借助特定包绘制。
0x01 使用hist()函数
一、准备数据
为方便演示,这里我们使用R语言的内置数据faithful
进行演示,该数据提供了美国黄石国家公园老忠实间歇泉(Old Faithful geyser)的喷发时间和等待时间的数据。
数据集包含两列:
1.eruptions
:表示老忠实间歇泉的喷发持续时间,以分钟为单位。
2.waiting
:表示两次喷发之间的等待时间,也是以分钟为单位。
二、参数说明
1.hist(x)
:绘制直方图
2.x
:要绘制直方图的数据向量。这是必需的参数。
3.breaks
:指定直方图的分组边界。可以是一个整数,表示组数;也可以是一个向量,指定具体的分组边界。默认情况下,hist()
会自动选择一个合适的组数。
4.col
:直方图的填充颜色。可以是一个颜色名称(如 “blue”、“red” 等),也可以是一个颜色向量,为不同的组指定不同的颜色。
5.border
:直方图边框的颜色。默认情况下,边框颜色与填充颜色相同,但可以通过这个参数进行单独设置。
6.freq
:逻辑值。如果为TRUE
(默认值),则纵坐标表示频数(每个区间内数据的数量);如果为FALSE
,则纵坐标表示频率密度(每个区间内数据的数量除以区间宽度)。
7.xlab
、ylab
:分别指定 x 轴和 y 轴的标签。
8.main
:直方图的标题。
9.axes
:逻辑值。如果为TRUE
(默认值),则绘制坐标轴;如果为FALSE
,则不绘制坐标轴。
10.xlim
、ylim
:分别用于设置 x 轴和 y 轴的取值范围。例如,xlim = c(0, 100)
会将 x 轴的范围限制在 0 到 100 之间。
三、应用示例
hist(faithful$eruptions)
四、美化和调整
#seq(a,b,n)表示从a到b,间隔为n
hist(faithful$waiting,freq = TRUE,breaks = seq(40,100,5),col = "red4",xlab = "waiting of faithful",main = "histogram")
0x02 使用ggplot2包
一、准备数据
假设我们有一个数据框df
,包含一个数值变量value
和一个分类变量group
。
# 创建示例数据
df <- data.frame(value = c(rnorm(100), rnorm(100, mean = 2)),
group = rep(c("A", "B"), each = 100))
二、参数说明
在 R 语言的ggplot2
包中,geom_histogram()
函数用于绘制直方图。以下是其主要参数说明:
1.mapping
:使用aes()
函数设置的映射关系,通常指定要绘制直方图的数据变量,例如aes(x = var)
表示将变量var
映射到 x 轴用于绘制直方图。
2.bins
:指定直方图的组数。可以是一个整数,也可以是一个字符串,如 "scott"
、"fd"
等,这些字符串对应不同的自动确定组数的方法。
3.binwidth
:用于指定直方图中每个区间(bin)的宽度。
4.fill
:直方图的填充颜色。可以是一个颜色名称(如 “blue”、“red” 等),也可以是一个变量,根据变量的值来确定不同的填充颜色。
5.color
:直方图边框的颜色。默认情况下,边框颜色与填充颜色相同,但可以通过这个参数进行单独设置。
6.alpha
:透明度,取值在 0(完全透明)到 1(完全不透明)之间。可以用于调整直方图的透明度,以便更好地观察数据的重叠情况。
7.position
:用于调整直方图的位置,例如position = "dodge"
可以将多个直方图并列放置,position = "stack"
可以将多个直方图堆叠放置。
8.stat
:指定统计变换的类型,默认值为 "bin"
,表示对数据进行分组计数以绘制直方图。可以根据需要选择其他统计变换类型。
五、其他参数
9.na.rm
:逻辑值。如果为TRUE
,则在绘制直方图时忽略缺失值;如果为FALSE
(默认值),则包含缺失值。
三、绘制简单的直方图
使用ggplot()
函数和geom_histogram()
函数来绘制直方图。
library(ggplot2)
ggplot(df,aes(x = value)) +
geom_histogram(binwidth = 0.2)
四、绘制分组直方图
ggplot(df, aes(x = value, fill = group)) +
geom_histogram(binwidth = 0.2)
也可以添加position = "dodge"
参数使不同组的直方图并列显示
ggplot(df, aes(x = value, fill = group)) +
geom_histogram(binwidth = 0.2,position = "dodge")
五、绘制分面网格图
添加使用facet_grid()
函数创建一个分面网格图。
ggplot(df, aes(x = value, fill = group)) +
geom_histogram(binwidth = 0.2) +
facet_grid(group~.)
六、绘制密度直方图
使用y =..density..
参数绘制密度直方图。
ggplot(df, aes(x = value, fill = group)) +
geom_histogram(binwidth = 0.2,aes(y = ..density..))
七、绘制密度直方图+密度曲线
添加使用stat_density()
函数在密度直方图基础上绘制密度曲线。
#position = "identity"表示表示不进行位置调整,直接按照数据的位置绘制直方图,可能会导致不同组的直方图重叠。
#geom = "line" 指定以线条的形式绘制密度曲线。
#aes(colour = group) 将 group 变量映射到线条颜色,不同组的密度曲线将用不同的颜色显示。
ggplot(df, aes(x = value, fill = group)) +
geom_histogram(position = "identity",alpha = 0.7,binwidth = 0.2,aes(y = ..density..)) +
stat_density(geom = "line",position = "identity",aes(colour = group))
八、绘制分面密度直方图+密度曲线
同样我们使用facet_grid()
函数就可以展示我们分面的效果。
ggplot(df, aes(x = value, fill = group)) +
geom_histogram(position = "identity",alpha = 0.7,binwidth = 0.2,aes(y = ..density..)) +
stat_density(geom = "line",position = "identity",aes(colour = group)) +
facet_grid(group~.)