楼主: waterhorse
58 0

[学习分享] ggplot2 绘图入门教程 [推广有奖]

  • 2关注
  • 3粉丝

已卖:123份资源

学科带头人

4%

还不是VIP/贵宾

-

威望
0 级
论坛币
739 个
通用积分
267.3073
学术水平
27 点
热心指数
35 点
信用等级
20 点
经验
131419 点
帖子
1256
精华
0
在线时间
2240 小时
注册时间
2006-10-5
最后登录
2026-11-4

楼主
waterhorse 发表于 2026-10-30 03:41:46 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

R 语言 ggplot2 绘图入门教程

一、什么是 ggplot2?

ggplot2 是 R 语言中非常流行的数据可视化工具包,属于 tidyverse 生态系统。它基于图形语法(Grammar of Graphics),允许用户通过组合不同的图形元素,创建美观且具有专业水准的统计图表。

ggplot2 常用于:

  • 散点图(Scatter Plot)
  • 折线图(Line Plot)
  • 柱状图(Bar Chart)
  • 直方图(Histogram)
  • 箱线图(Boxplot)
  • 分组图与多面板图(Faceted Plot)

本教程使用 R 自带的 mtcars 和 iris 数据集,不需要另外下载数据。

二、安装与加载 ggplot2

首次使用时,需要安装:

install.packages("ggplot2")

安装完成后,每次开启新的 R 会话,只需要运行:

library(ggplot2)

查看内置数据集:

head(mtcars)

str(mtcars)

summary(mtcars)

mtcars 包含 32 辆汽车的相关信息,例如:

变量

含义

mpg

每加仑汽油行驶英里数

wt

汽车重量(千磅)

hp

马力

cyl

汽缸数量

am

变速箱类型(0=自动,1=手动)

三、ggplot2 的基本语法

ggplot2 的核心结构如下:

ggplot(data = 数据集,

       aes(x = 横轴变量, y = 纵轴变量)) +

  geom_图形类型() +

  labs(title = "图表标题",

       x = "横轴名称",

       y = "纵轴名称") +

  theme_minimal()

主要组成部分:

  • ggplot():指定数据集。
  • aes():指定变量与图形属性之间的映射关系。
  • geom_*():选择图形类型。
  • labs():设置标题与坐标轴名称。
  • theme_*():控制图形外观。

特别注意:ggplot2 使用 + 将不同图形元素组合起来。

四、六种常见图形及代码实例

1. 散点图(Scatter Plot)

研究问题:汽车重量与燃油效率之间是否存在关系?

ggplot(mtcars, aes(x = wt, y = mpg)) +

  geom_point(color = "blue", size = 3) +

  labs(

    title = "汽车重量与燃油效率",

    x = "重量(千磅)",

    y = "每加仑英里数"

  ) +

  theme_minimal()

解释: 横轴表示汽车重量,纵轴表示燃油效率。从散点分布可以观察到,重量越大的汽车,通常燃油效率越低。

还可以加入线性回归线:

ggplot(mtcars, aes(x = wt, y = mpg)) +

  geom_point(color = "blue") +

  geom_smooth(method = "lm", se = TRUE) +

  theme_minimal()

其中 method = "lm" 表示使用线性回归,se = TRUE 显示拟合均值的置信区间(默认 95%)。

2. 直方图(Histogram)

研究问题:汽车燃油效率的分布情况如何?

ggplot(mtcars, aes(x = mpg)) +

  geom_histogram(

    binwidth = 3,

    fill = "skyblue",

    color = "black"

  ) +

  labs(

    title = "燃油效率分布",

    x = "MPG",

    y = "汽车数量"

  ) +

  theme_minimal()

解释: 直方图将连续变量划分为若干区间,柱子的高度代表落在该区间内的观测数量。binwidth = 3 表示每个区间宽度为 3 MPG。

3. 柱状图(Bar Chart)

研究问题:不同汽缸数量的汽车分别有多少辆?

ggplot(mtcars, aes(x = factor(cyl))) +

  geom_bar(fill = "steelblue") +

  labs(

    title = "不同汽缸数量的汽车",

    x = "汽缸数量",

    y = "汽车数量"

  ) +

  theme_minimal()

解释: factor(cyl) 将汽缸数量转换为类别变量。geom_bar() 自动计算每个类别的观测数量。

4. 箱线图(Boxplot)

研究问题:不同汽缸数量的汽车,其燃油效率是否存在差异?

ggplot(mtcars,

       aes(x = factor(cyl),

           y = mpg,

           fill = factor(cyl))) +

  geom_boxplot() +

  labs(

    title = "不同汽缸汽车的燃油效率",

    x = "汽缸数量",

    y = "MPG"

  ) +

  theme_minimal() +

  theme(legend.position = "none")

解释: 箱线图显示中位数、四分位数、须线及可能的异常值。它适合比较不同类别的数值分布。

从 mtcars 数据可以观察到,4 缸汽车的 MPG 通常高于 6 缸和 8 缸汽车。

5. 折线图(Line Plot)

使用另一个 R 内置数据集 economics(由 ggplot2 提供)。

研究问题:美国失业人数如何随时间变化?

ggplot(economics,

       aes(x = date, y = unemploy)) +

  geom_line(color = "red", linewidth = 1) +

  labs(

    title = "美国失业人数变化",

    x = "日期",

    y = "失业人数(千人)"

  ) +

  theme_minimal()

解释: 折线图特别适合分析时间序列数据。geom_line() 将按照横轴顺序连接各个观测点。

6. 分面图(Faceted Plot)

研究问题:不同鸢尾花品种的花瓣长度与宽度之间的关系是否相同?

使用 R 内置的 iris 数据集:

ggplot(iris,

       aes(x = Petal.Length,

           y = Petal.Width)) +

  geom_point(color = "darkgreen") +

  facet_wrap(~ Species) +

  labs(

    title = "不同品种鸢尾花的花瓣特征",

    x = "花瓣长度",

    y = "花瓣宽度"

  ) +

  theme_minimal()

解释: facet_wrap(~ Species) 根据品种将数据分成三个子图,方便比较不同组之间的关系。

五、进阶功能:颜色、大小与主题

ggplot2 可以利用 aes() 将其他变量映射到颜色、点的大小或形状。

例如:

ggplot(mtcars,

       aes(x = wt,

           y = mpg,

           color = factor(cyl),

           size = hp)) +

  geom_point(alpha = 0.7) +

  labs(

    title = "汽车重量、马力与燃油效率",

    x = "重量",

    y = "MPG",

    color = "汽缸数",

    size = "马力"

  ) +

  theme_classic()

这张图同时呈现四个变量:

  • X 轴:汽车重量
  • Y 轴:燃油效率
  • 颜色:汽缸数量
  • 点的大小:马力

特别需要区分以下两种写法:

# 所有点都使用蓝色

geom_point(color = "blue")


# 根据汽缸数量自动分配颜色

geom_point(aes(color = factor(cyl)))

前者设置固定颜色,后者将颜色映射到数据变量。

六、常见函数总结

函数

主要用途

ggplot()

建立绘图对象

aes()

定义变量映射

geom_point()

散点图

geom_line()

折线图

geom_bar()

柱状图

geom_histogram()

直方图

geom_boxplot()

箱线图

geom_smooth()

趋势线或回归拟合

facet_wrap()

按类别创建多个子图

labs()

设置标题和标签

theme_minimal()

使用简洁主题

ggsave()

保存图形文件

例如,保存最近生成的图表:

ggsave(

  filename = "my_plot.png",

  width = 8,

  height = 5,

  dpi = 300

)

七、练习题

练习一:散点图

使用 mtcars 数据,研究汽车马力(hp)与燃油效率(mpg)之间的关系。绘制散点图,加入线性回归线,并解释变量之间的关系。

查看代码提示

练习二:箱线图

比较自动变速箱与手动变速箱汽车的燃油效率是否存在明显差异,并通过箱线图说明。

查看代码提示

练习三:分组分析

使用 iris 数据集,绘制 Sepal.Length 与 Sepal.Width 的散点图,根据 Species 使用不同颜色,并解释三个品种的分布差异。

查看代码提示

八、总结

学习 ggplot2 最重要的是掌握三个基本概念:

  • 数据(Data):使用哪个数据集?
  • 映射(Aesthetics):哪些变量对应 X 轴、Y 轴、颜色或大小?
  • 几何对象(Geometry):使用哪一种图形呈现数据?

掌握这三个概念后,便可以通过增加 labs()、facet_wrap()、theme_*() 等函数,逐步创建更加复杂的统计图形。

对于初学者,建议先熟悉散点图、直方图、柱状图与箱线图,再学习分组绘图、多面板图以及统计模型的可视化。



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-11-4 04:15