统计软件 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中有两种绘图函数:
- 高级绘图函数:创建一个新的图形,如
hist
plot
。 - 低级绘图函数:在现有的图形上添加元素,对原有图进行补充,如
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 设备 |