可视化数据有时可以帮助人们更好地理解它。作为一个数据分析平台,R提供了一些高级绘图功能。在这篇文章中,你将学习如何使用内置的绘图函数创建一些常见的可视化。具体来说,你将学习如何创建
- 折线图
- 散点图
- 饼图
让我们开始吧。

在 R 中绘制图表
照片来源:Jason Coudriet。部分权利保留。
概述
本文分为两部分,分别是
- 绘制函数
- 绘制数据框
绘制函数
让我们考虑R中最基本的绘图函数。要创建一个带有单个点的图,你可以简单地使用
1 |
plot(2,3) |

绘制一个点
你可以在RStudio中自动看到这个图。如果你在R shell或脚本中运行它,你需要将图形保存到图片中,如下所示
1 2 3 |
png("myplot.png") plot(2,3) dev.off() |
plot()
函数参数是点的x和y坐标。如你所知,R中的单个数字只是一个包含一个元素的向量。因此,将函数以两个较长向量的x-y坐标形式绘制出来是很直观的。
1 2 3 |
x <- seq(from=0, to=20, by=0.05) y <- sin(x) + 1.5*cos(2*x) plot(x,y) |

绘制函数
在上面,x
是从0到20的向量,而y
是x
的函数。请注意,sin()
和cos()
函数将它们的参数视为弧度。绘图是按照向量指定的点的形式。
事实上,你可能想自定义这个图。首先,你可能会注意到上面使用的绘图使用了相当大的圆圈来标记点。你可以使用cex
参数(默认值为1)来控制这些点的大小。例如,这里是如何让点变小
1 |
plot(x, y, cex=0.1) |

用cex=0.1绘图
你可以为图添加标题或标注轴。所有这些都有相应的参数。例如
1 2 3 |
plot(x, y, main="绘制函数", sub="plot函数演示", xlab="弧度", ylab="值") |

带标签和标题的图
请注意,主标题和副标题分别位于图的上方和下方。
你也可以选择将函数以线条而不是点的形式绘制出来。你也可以考虑以不同的比例尺绘制。下面是如何做到这些
1 |
plot(x, y, type="l", asp=1) |

R中的折线图
type控制绘图类型。有时你也会发现“b
”(both)很有用,因为它可以在同一图上同时显示点和线。你应该参考plot函数的文档来查找所有可能的绘图类型。
参数“asp
”是关于纵横比的。这并不是控制整个图的纵横比,而是控制x轴和y轴之间的比例。将asp=2
设置为x轴上的两个单位将与y轴上的一个单位具有相同的宽度。
绘制数据框
为了说明,让我们考虑R自带的iris数据集。
iris数据集是一个分类数据集。它有“Species”列作为鸢尾花种类的标签。如果数据不平衡,这对于分类建模来说是一个问题。检查iris数据集是否平衡的一个简单方法是在饼图中显示标签
1 |
pie(table(iris$Species)) |

R中的饼图
上面的饼图显示三个标签分布均匀(因为每个都有相同大小的切片)。
table()
函数接受一个标签向量,并以表格形式返回每个唯一标签的计数。然后pie()
函数将计数显示为饼图。pie()
函数中有一些参数可以让你自定义输出。你应该参考文档以获取更多详细信息。
由于我们可以使用iris$Sepal.Length
的语法从数据框中提取一列到向量中,因此使用plot()
函数很容易将两列绘制成散点图。
1 |
plot(iris$Sepal.Length, iris$Sepal.Width) |

iris数据集中两列的散点图
类似地,如果你的数据框有一列排序的值,你可以使用plot()
函数创建折线图。请注意,将随机排序的值传递给plot()
函数进行折线图绘制不会产生好的可视化效果。
你也应该知道,上面的绘图有时可以这样写
1 |
plot(iris$Sepal.Width ~ iris$Sepal.Length) |
波浪号(~
)的使用强调了关系,就像 $y = x$。换句话说,你可以互换使用plot(x,y)
和plot(y ~ x)
。
然而,由于iris数据集是一个分类数据集,上面的绘图可能不是很有帮助。更好地说明两列之间关系的方法如下:
1 2 3 |
plot(iris$Sepal.Length, iris$Sepal.Width, pch=23, cex=0.5, bg=c("red","green","blue")[unclass(iris$Species)]) |

显示iris数据集中分类的散点图
参数pch
用于在散点图中将填充的菱形作为标记。标记的填充颜色使用bg
指定。如果省略pch
参数,默认标记是空心圆,在这种情况下你应该使用col
参数来着色。
根据分类结果为标记分配不同颜色的方法是设置一个向量。这个向量是用以下方式创建的:
1 |
c("red","green","blue")[unclass(iris$Species)] |
其中c("red","green","blue")
部分是创建一个字符串向量,而iris$Species
是类标签(R中的“factor”类型)。unclass()
函数将类标签转换为整数(1、2或3),然后用它来索引前面的向量。生成的向量应该与iris$Species
的长度相同,这样它就可以匹配散点图中的标记数量。
如果你运行以下代码
1 |
plot(iris$Species, iris$Sepal.Length, cex=0.5) |
你将得到一个箱须图,如下所示

箱须图
这是R的一个魔力,当你将连续值与离散标签绘制时,将生成箱须图来显示值范围。
最后,当你获得新数据集时,一个方便的“第一个绘图”应该是散点图矩阵。
1 |
pairs(iris, cex=0.5, col=c("red","green","blue")[unclass(iris$Species)]) |

散点图矩阵
这是一种自动为你提供所有可能的散点图的方法。从那里你可以判断数据框中的某些列是否相关。你可以从那里设计你的数据建模策略。
进一步阅读
您可以从以下来源了解有关上述主题的更多信息:
网站
- R 手册:https://cran.r-project.cn/manuals.html
- R基础图形:一本详细的傻瓜指南,作者:Susan E Johnston: https://sejohnston.com/2013/08/30/base-graphics-in-r-a-detailed-idiots-guide/
总结
在这篇文章中,你学习了如何在R中创建可视化。具体来说,你学习了
- 如何创建函数样本并绘制该函数
- 如何绘制数据框中的现有数据,如饼图或散点图
暂无评论。