利用R语言绘制直方图

绘制直方图

直方图用于展示连续型数据的分布情况。它将数据划分到一系列等宽的区间(称为"箱"或"组"),然后用条形的高度表示落入该区间内的数据点的频数或频率。

注意: 直方图与条形图不同。条形图用于展示离散型数据,条形之间通常有间隔;而直方图的条形是紧密相邻的,表示数据的连续性。

欢迎大家在评论区留言或私信,交流学习心得或学习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()

出图效果如下:

※※大家在使用的时候遇到任何问题欢迎留言,您的支持是我创作的最大动力。※※

相关推荐
csbysj20203 小时前
React 表单与事件
开发语言
初圣魔门首席弟子3 小时前
c++ bug 函数定义和声明不一致导致出bug
开发语言·c++·bug
IT小农工3 小时前
Word 为每一页设置不同页边距(VBA 宏)
开发语言·c#·word
sali-tec3 小时前
C# 基于halcon的视觉工作流-章42-手动识别文本
开发语言·人工智能·算法·计算机视觉·c#·ocr
csbysj20204 小时前
中介者模式
开发语言
hsjkdhs5 小时前
C++之类的继承与派生
开发语言·c++
lly2024065 小时前
HTML 元素:构建网页的基础
开发语言
低调小一5 小时前
LRU缓存科普与实现(Kotlin 与 Swift)
开发语言·缓存·kotlin