利用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()

出图效果如下:

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

相关推荐
卢锡荣8 分钟前
Type-c OTG数据与充电如何进行交互使用应用讲解
c语言·开发语言·计算机外设·电脑·音视频
A懿轩A21 分钟前
【Java 基础编程】Java 变量与八大基本数据类型详解:从声明到类型转换,零基础也能看懂
java·开发语言·python
2301_8112329821 分钟前
低延迟系统C++优化
开发语言·c++·算法
我能坚持多久24 分钟前
D20—C语言文件操作详解:从基础到高级应用
c语言·开发语言
橘子师兄41 分钟前
C++AI大模型接入SDK—ChatSDK封装
开发语言·c++·人工智能·后端
上天_去_做颗惺星 EVE_BLUE1 小时前
Docker高效使用指南:从基础到实战模板
开发语言·ubuntu·docker·容器·mac·虚拟环境
2401_857683541 小时前
C++中的原型模式
开发语言·c++·算法
s1hiyu1 小时前
C++动态链接库开发
开发语言·c++·算法
(❁´◡`❁)Jimmy(❁´◡`❁)1 小时前
CF2188 C. Restricted Sorting
c语言·开发语言·算法
星火开发设计1 小时前
C++ 预处理指令:#include、#define 与条件编译
java·开发语言·c++·学习·算法·知识