绘制直方图
直方图用于展示连续型数据的分布情况。它将数据划分到一系列等宽的区间(称为"箱"或"组"),然后用条形的高度表示落入该区间内的数据点的频数或频率。
注意: 直方图与条形图不同。条形图用于展示离散型数据,条形之间通常有间隔;而直方图的条形是紧密相邻的,表示数据的连续性。
欢迎大家在评论区留言或私信,交流学习心得或学习R的过程中遇到的问题。感谢大家的支持和关注,您的支持是我创作的最大动力。
目录
1.mtcars数据集介绍
mtcars(Motor Trend Car Road Tests)是R语言中最经典的内置数据集之一,包含了32辆汽车在1974年左右的性能测试数据。这个数据集源自1974年的《Motor Trend》杂志,常用于统计教学和数据分析演示。
mtcars数据集包含11个数值变量:
主要性能指标:
mpg: Miles/(US) gallon - 油耗(英里/加仑)
cyl: Number of cylinders - 气缸数
disp: Displacement (cu.in.) - 排量(立方英寸)
hp: Gross horsepower - 马力
传动系统:
drat: Rear axle ratio - 后轴比率
wt: Weight (1000 lbs) - 重量(千磅)
qsec: 1/4 mile time - 1/4英里加速时间
发动机和变速箱:
vs: Engine (0 = V-shaped, 1 = straight) - 发动机类型
am: Transmission (0 = automatic, 1 = manual) - 变速箱类型
gear: Number of forward gears - 前进档位数
carb: Number of carburetors - 化油器数量
c
#加载并查看数据
data("mtcars")
head(mtcars)
返回结果如下:
2.利用hist函数绘制简单的直方图
- 最简单的直方图
c
# 查看数据的前几行
head(mtcars$mpg)
# 绘制最简单的直方图
hist(mtcars$mpg)
出图效果如下:
- 更美观的直方图
利用内置参数,自定义直方图。
c
hist(mtcars$mpg,
main = "汽车油耗分布直方图",
xlab = "每加仑英里数 (mpg)",
ylab = "频率密度",
col = "lightblue",
border = "black",
freq = FALSE, # 使用密度而不是频数
breaks = 10) # 大致分为10个箱
出图效果如下:
为了让分布的形状更明显,或者与理论分布进行比较,我们可以在直方图上添加曲线。
c
# 1. 绘制直方图 (必须设置 freq=FALSE)
hist(mtcars$mpg,
main = "带密度曲线的直方图",
xlab = "每加仑英里数 (mpg)",
col = "lightgreen",
border = "black",
freq = FALSE)
# 2. 计算并添加密度曲线
lines(density(mtcars$mpg), col = "red", lwd = 2) # lwd 控制线条粗细
# 3. (可选) 添加图例
legend("topright", legend = "密度曲线", col = "red", lty = 1, lwd = 2)
出图效果如下:
添加均值和正态分布曲线
c
# 计算均值和标准差
mean_mpg <- mean(mtcars$mpg)
sd_mpg <- sd(mtcars$mpg)
# 绘制直方图
hist(mtcars$mpg,
main = "与正态分布比较",
xlab = "每加仑英里数 (mpg)",
col = "lightyellow",
freq = FALSE)
# 添加正态分布曲线
curve(dnorm(x, mean = mean_mpg, sd = sd_mpg),
col = "darkblue", lwd = 2, add = TRUE)
# 添加一条垂直的均值线
abline(v = mean_mpg, col = "red", lwd = 2, lty = 2)
# 添加图例
legend("topright",
legend = c("数据密度", "正态分布", "均值"),
col = c("black", "darkblue", "red"),
lty = c(1, 1, 2),
lwd = c(1, 2, 2))
出图效果如下:
3.利用ggplot2绘制直方图
ggplot2的出图效果要更好,但操作更复杂。
首先要安装和加载ggplot2,它的语法结构与基础 R 完全不同,但逻辑更清晰。
c
install.packages("ggplot2") # 如果还没安装的话
library(ggplot2)
一个简单的案例如下:
c
ggplot(mtcars, aes(x = mpg)) +
geom_histogram()
出图效果如下:
自定义制图:
c
ggplot(mtcars, aes(x = mpg)) +
geom_histogram(binwidth = 2, # 设置箱宽
fill = "steelblue", # 填充色
color = "white", # 边框色
alpha = 0.8) + # 透明度 (0-1)
labs(title = "使用ggplot2绘制的直方图",
subtitle = "mtcars数据集",
x = "每加仑英里数 (mpg)",
y = "频数") +
theme_minimal() # 使用一个简洁的主题
出图效果如下:
在 ggplot2 中,可以使用 geom_density() 叠加密度曲线。
c
ggplot(mtcars, aes(x = mpg)) +
geom_histogram(aes(y = ..density..), # 注意这里y轴的映射
binwidth = 2,
fill = "steelblue",
color = "white",
alpha = 0.5) +
geom_density(color = "red", size = 1) + # 添加密度曲线
labs(title = "ggplot2: 直方图与密度曲线",
x = "每加仑英里数 (mpg)",
y = "密度") +
theme_minimal()
出图效果如下:
※※大家在使用的时候遇到任何问题欢迎留言,您的支持是我创作的最大动力。※※