统计软件 R 语言学习笔记 (6) 统计图表
统计软件 R 语言笔记 (6):统计图表
本章介绍了常见的统计图表和其 R 语言实现方法:频数频率图表、条形/柱状图、列联表、饼图;直方图、箱线图、散点图。同时介绍了 R 语言绘图的范式:高级&低级绘图函数、常见参数设置、子图、保存图片的方法。
代码和笔记存储在 GitHub 库 【持续更新中,建议 star!】
1 定性变量的统计图表
1.1 频率/频数表(Frequency Table)
定义:统计各分类出现的次数或比例。
R实现
- 简单频数表:
table()函数
1 | > # 示例:性别频数表 |
- 频率表(百分比):
prop.table()函数
1 | > prop_table <- prop.table(freq_table) * 100 |
注意事项:若数据为数值型但需按分类统计,需先转换为因子:factor(data)。
1.2 条形图/柱状图(Bar Chart)
用途:展示分类变量的频数分布,支持横向/纵向排列。
R实现
- 基础绘图:
barplot()
1 | barplot(freq_table, |
- 堆叠条形图:
barplot(height)当height为矩阵时
1 | # 示例数据 |

ggplot2库
1 | library(ggplot2) |
1.3 列联表(Contingency Table)
定义:分析两个或多个分类变量的交叉分布。
R实现
- 基础方法:
table(var1, var2)或xtabs(~var1 + var2, data)
1 | > # 示例:性别与血型列联表 |
- 添加边际和:
addmargins()
1 | > addmargins(cross_table) |
- 比例表:
1 | > prop.table(cross_table, margin = 1) # 按行计算比例 |
1.4 饼图(Pie Chart)
用途:展示各类别占比(适用于少量分类)。
R实现
- 基础绘图:
pie()
1 | gender <- c("Male", "Female", "Male", "Male", "Female") |

ggplot2库
1 | ggplot(data.frame(gender), aes(x = "", fill = gender)) + |
2 定量变量的统计图表
2.1 直方图(Histogram)
用途:展示连续变量的分布与频数,通过分箱(bin)统计。直方图中,矩形的高度表示每一组的频数或频率,宽度则表示各组的组距,因此其高度与宽度均有意义。
格式
1 | hist(x, breaks = "Sturges", |
| 参数 | 说明 | 默认值 |
|---|---|---|
x |
输入数据,通常为数值型向量。 | 无 |
breaks |
定义直方图的区间划分方式。可以是区间数(如 10)、区间向量(如 c(0, 10, 20))或字符串(如 “Sturges”)。 |
"Sturges" |
freq |
是否显示频数(TRUE)或概率密度(FALSE)。 | NULL |
probability |
是否绘制概率密度图(TRUE)或频数直方图(FALSE)。 | !freq |
include.lowest |
是否包含区间的最小值。 | TRUE |
right |
区间是否右闭合(TRUE)或左闭合(FALSE)。 | TRUE |
col |
填充颜色。 | "lightgray" |
main |
图形标题。 | paste("Histogram of", xname) |
xlim |
x轴范围。 | range(breaks) |
ylim |
y轴范围。 | NULL |
xlab |
x轴标签。 | xname |
ylab |
y轴标签。 | 自动生成 |
axes |
是否绘制坐标轴。 | TRUE |
plot |
是否绘制图形(TRUE)或仅返回计算结果(FALSE)。 | TRUE |
labels |
是否在条形上方显示标签。 | FALSE |
nclass |
区间数的替代参数。 | NULL |
示例
- 基础绘图:
hist()
1 | data <- rnorm(1000, mean = 50, sd = 10) |
1 | # 添加趋势线 |
2.2 箱线图(Boxplot)
用途: 展示数据的中位数、四分位数、离群点,支持分组比较。
格式
| 参数 | 说明 | 默认值 |
|---|---|---|
x |
输入数据,可以是向量、列表或公式(如 y ~ group)。 |
无 |
... |
其他图形参数(如 main, xlab, ylab 等)。 |
无 |
range |
定义异常值的范围(默认为 1.5 倍的四分位距)。 | 1.5 |
width |
箱线图的宽度。 | NULL |
varwidth |
是否根据样本量调整箱线图宽度。 | FALSE |
notch |
是否绘制缺口以比较中位数的显著性。 | FALSE |
outline |
是否显示异常值。 | TRUE |
names |
箱线图的组别标签。 | 自动生成 |
col |
箱线图的填充颜色。 | "lightgray" |
log |
是否对坐标轴取对数。 | "" |
pars |
图形参数的列表(如 boxwex, staplewex, outwex)。 |
list(boxwex = 0.8, staplewex = 0.5, outwex = 0.5) |
ann |
是否绘制坐标轴标签和标题。 | !add |
horizontal |
是否绘制水平箱线图。 | FALSE |
add |
是否将箱线图添加到现有图形中。 | FALSE |
at |
箱线图的位置(用于并排箱线图)。 | NULL |
示例
- 单组箱线图
1 | data <- rnorm(100) |
- 并排箱线图
1 | # 并排箱线图 |
- 带缺口的箱线图(只是为了突出中位数)
1 |
|

~分组绘制
1 | # 使用内置数据集 mtcars |

2.3 散点图(Scatter Plot)两个定量变量
用途:分析两个定量变量的相关性或分布模式。
基础使用
1 | plot(women$height, women$weight) |
下面,借由这个例子,介绍 R 语言绘图的范式。
3 R 语言绘图
3.1 高级 & 低级绘图函数
在R中有两种绘图函数:
- 高级绘图函数:创建一个新的图形,如
histplot。 - 低级绘图函数:在现有的图形上添加元素,对原有图进行补充,如
lines。
3.1.1 高级绘图函数
| 函数名 | 功能描述 |
|---|---|
plot(x) |
以 x 的元素值为纵坐标、以序号为横坐标绘图 |
plot(x,y) |
x 与 y 的二元作图 |
pie(x) |
饼图 |
boxplot(x) |
盒形图(也称箱线图) |
hist(x) |
x 的频率直方图 |
barplot(x) |
x 的值的条形图 |
qqnorm(x) |
正态分位数-分位数图 |
3.1.2 低级绘图函数
| 函数名 | 功能描述 |
|---|---|
points(x, y) |
添加点 |
lines(X, Y) |
添加线 |
text(x, y, labels, ...) |
加标记,在 (x, y) 处添加用 labels 指定的文字 |
abline(a, b) |
加直线,绘制斜率为 b 和截距为 a 的直线 |
abline(h = y) |
加直线,在纵坐标 y 处画水平线 |
abline(v = x) |
加直线,在横坐标 x 处画垂直线 |
abline(lm.obj) |
加直线,画出 lm.obj 确定的回归线 |
legend(x, y, legend) |
加注释,在点 (x, y) 处,说明内容由 legend 给定 |
title() |
加标题,也可添加一个副标题 |
axis(side, vect) |
加坐标轴 |
3.2 参数
3.2.1 共同参数选项
| 选项 | 功能 |
|---|---|
axes=TRUE |
如果是 FALSE,不绘制轴与边框 |
type="p" |
指定图形的类型 |
xlim=, ylim= |
指定轴的显示范围 |
xlab=, ylab= |
坐标轴的标签 |
main= |
主标题 |
sub= |
副标题 |
"p":点
"l":线
"b":点连线
"o":同上,但是线在点上
"h":垂直线
"s":阶梯式,垂直线顶端显示数据
"S":同上,但是垂直线底端显示数据
示例:一些常见参数的用法

示例:不同的点类型 type

3.2.2 其他常用绘图参数
| 选项 | 功能 |
|---|---|
adj |
控制关于文字对齐方式(0-左对齐,0.5-居中对齐,1-右对齐) |
cex |
符号和文字大小:cex.axis, cex.main, cex.axis, cex.main |
col |
颜色: col.axis, col.lab, col.main, col.axis, col.lab, col.main |
font |
文字字体(1-正常,2-粗体,3-斜体,4-粗斜体):font.axis, font.lab, font.main, font.axis, font.lab, font.main |
lwd |
线的宽度 |
lty |
连线的线型(1-实线,2-虚线,3-点线,4-点虚线,5-长虚线,6-双虚线) |
pch |
绘图符号的类型(1到25的整数) |
pty |
绘图区域类型 |
xaxt yaxt |
如果 xaxt="n",设置 x 轴不显示;如果 yaxt="n",设置 y 轴不显示 |
srt |
文字旋转角度 |
特别地,pch 可以传入一个字符串向量,当作图案:
1 | pch_type <- c("*", "a", "A", "?", "1") |
pch = pch_type:图案可以自定义pch_type
3.3 画图面板分割:子图
mfrow 参数:
-
按行顺序填充子面板。
-
语法:
par(mfrow = c(nrow, ncol)),其中nrow是行数,ncol是列数。 -
示例:
par(mfrow = c(2, 2))将绘图窗口分割为 2 行 2 列,共 4 个子面板。
mfcol 参数:
- 按列顺序填充子面板。
- 语法:
par(mfcol = c(nrow, ncol))。
示例:
1 | # 设置绘图面板为 2 行 2 列 |
用
op对象存储par()函数的子图设置,再次使用par(op)即可重置默认设置。否则,之后的绘图会一直按照 最开始par()的设置放置。
3.4 保存图片
3.4.1 png() 保存为 PNG 图片
1 | # 打开 PNG 设备,设置文件名和尺寸 |
参数说明
"my_plot.png":保存的文件名。width和height:图片的宽度和高度(单位:像素)。dev.off():关闭图形设备,保存图片。
3.4.2 pdf() 保存为 PDF 文件
1 | # 打开 PDF 设备,设置文件名和尺寸 |
参数说明
"my_plot.pdf":保存的文件名。width和height:图片的宽度和高度(单位:英寸)。
3.4.3 jpeg() 保存为 JPEG 图片
1 | # 打开 JPEG 设备,设置文件名和尺寸 |
参数说明
quality:图片质量(0-100),值越大质量越高。
3.4.4 dev.copy() 保存当前图片
1 | # 绘制图形 |
适用场景:在已经绘制图形的情况下,直接保存当前图形。
3.4.5 保存多子图面板
如果使用 par(mfrow = c(nrow, ncol)) 绘制了多子图面板,可以直接保存整个面板:
1 | # 打开 PNG 设备 |



