前言
这不是基本图形的说明使用,例如常见的条形图,饼图,直方图等,此内容可以当作快速查阅手册。
条形图
简单条形图
条形图通过函数barplot()
来实现,函数原型如下:
barplot(height, width = 1, space = NULL,
names.arg = NULL, legend.text = NULL, beside = FALSE,
horiz = FALSE, density = NULL, angle = 45,
col = NULL, border = par("fg"),
main = NULL, sub = NULL, xlab = NULL, ylab = NULL,
xlim = NULL, ylim = NULL, xpd = TRUE, log = "",
axes = TRUE, axisnames = TRUE,
cex.axis = par("cex.axis"), cex.names = par("cex.axis"),
inside = TRUE, plot = TRUE, axis.lty = 0, offset = 0,
add = FALSE, ann = !add && par("ann"), args.legend = NULL, ...)
height
:接收一个向量参数,根据向量参数内容绘制图形horiz = TRUE
:设置为TRUE
则图形会生成水平条形图main
:图形标题xlab
:X 轴标签ylab
:Y 轴标签
代码示例:
barplot(trees$Girth,horiz = TRUE,main = '这是标题',
xlab='这是X轴',ylab='这是Y轴')
运行效果:

如果希望标签距离图表更近一些,可以通过额外设置mtext
来增加外边框的文本标签,例如:
barplot(trees$Girth,horiz = TRUE,main = '这是标题',
,ylab='这是Y轴')
mtext('这是X轴',side=1,line = 2)
运行效果:

如果需要绘制的变量是一个因子或者有序型因子,可以直接使用
plot()
绘制垂直条形图
堆砌条形图和分组条形图
如果传入的Height
参数不是向量而是一个矩阵,则绘制的结果是堆砌条形图或者分组条形图。堆砌条形图和分组条形图取决于参数beside=FALSE/TRUE
,如果为TRUE
,则矩阵中的每一列表示一个分组,各列的值将并列而不是堆砌;如果为FALSE
,则矩阵中的每一列都生成图中的一个条形,其高度取决于其值。
代码示例:
opar = par(no.readonly = TRUE)
# 将图形分割成一行两列
par(mfrow=c(1,2))
# 绘制堆砌条形图
barplot(matrix(1:20,4,5))
# 绘制分组条形图
barplot(matrix(1:20,4,5),beside = TRUE)
par(opar)
运行效果:

均值条形图
可以将数据计算出各种平均值,中位值等结果生成相关条形图,代码示例:
barplot(c(summary(trees$Girth)),
names.arg = c('Min.','1st Qu.','Median','Mean','3rd Qu.','Max'),
las=2)
运行效果:

关于文本显示不全问题,可以参考关于R以及Rstudio的相关问题,或者查看下面内容
条形图微调
随着条数的增多,标签可能会重叠或者消失,可以通过如下参数来调整:
cex.names
:(数值型)小于 1 的数值表示缩小标签字体大小names.arg
:(向量)允许自定义标签内容las=2
:旋转字体朝向
棘状图
这是一种特殊的条形图,棘状图对堆砌图进行重缩放,使得每个条形的总值为 1 ,而每一段数据则以比例来呈现。棘状图可以通过vcd
包中的spine()
来绘制,代码示例:
注意:
spine
传递的参数必须是双向表,即table
# 棘状图
library(vcd)
a <- table(trees$Girth,trees$Height)
spine(a)
运行效果:

饼图
饼图随处可见,可以通过函数pie
来创建,其函数原型如下:
pie(x, labels = names(x), edges = 200, radius = 0.8,
clockwise = FALSE, init.angle = if(clockwise) 90 else 0,
density = NULL, angle = 45, col = NULL, border = NULL,
lty = NULL, main = NULL, ...)
x
:(数值型)表示每个扇形所占的面积labels
:(向量/单体取决于X)表示每个扇形的标签
代码示例:
# 饼图
a <- c(1,2,3)
pie(a,labels = c('苹果','西瓜','橘子'))
运行效果:

如果希望实现3D
饼图的效果,则可以使用plotrix
包中的pie3D()
函数来实现,代码示例:
# 3D饼图
library(plotrix)
a <- c(1,2,2.2)
name <- c('苹果','西瓜','橘子')
pie3D(a,labels=name,explode = 0.1)
explode
:表示饼的分离程度
运行效果:

如上图,在不标注标签数值的情况下,我们的肉眼获取无法区分"西瓜"和"橘子"的大小区别,这个时候可以使用扇形图。它是通过plotrix
包中的fan.plot()
函数来实现的。代码示例:
# 3D饼图
library(plotrix)
a <- c(1,2,2.2)
name <- c('苹果','西瓜','橘子')
fan.plot(a,labels=name)
运行效果:

直方图
直方图是一种类似于条形图的图,它通过将X轴的值连续起来,然后Y值显示其高度,通过函数hist()
函数来创建,函数原型如下:
hist(x, breaks = "Sturges",
freq = NULL, probability = !freq,
include.lowest = TRUE, right = TRUE, fuzz = 1e-7,
density = NULL, angle = 45, col = "lightgray", border = NULL,
main = paste("Histogram of" , xname),
xlim = range(breaks), ylim = NULL,
xlab = xname, ylab,
axes = TRUE, plot = TRUE, labels = FALSE,
nclass = NULL, warn.unused = TRUE, ...)
x
:数据值freq
:(布尔值)当值为FLASE
表示根据概率密度而不是频数绘制图形breaks
:用于控制组的数量
在定义直方图中的单元时,默认将生成等距切分。代码示例:
# 直方图
par(mfrow=c(1,3))
# 普通直方图
hist(trees$Girth)
# 概率密度直方图
hist(trees$Girth,freq = FALSE)
# 添加密度曲线
hist(trees$Girth,freq = FALSE)
lines(density(trees$Girth))
运行效果:

density(x)
:生成密度数据
核密度图
核密度图时用于估计随机变量密度概率的一种非参数方法,绘制核密度图的方法为:
plot(density(x))
代码示例:
# 核密度图
opar <- par(no.readonly = TRUE)
par(mfrow=c(1,2))
# 基本和密度图
plot(density(trees$Girth),main='核密度图')
# 颜色填充核密度图
plot(density(trees$Girth),main='核密度图')
polygon(density(trees$Girth),col = 'black')
par(opar)
polygon
:绘制指定值下的多边形区域,可以理解为填充指定区域
运行效果:

核密度可以通过分组来比较组间的差异,可以通过使用sm
包中的sm.density.compare()
来实现,具体方法和实现效果自行查询,此处不做说明。
箱线图
箱线图又称为盒须图,通过绘制连续型变量的五数总括,即最小值,下四分位数(第25百分位数),中位数(第50百分位数),上四分位数(第75百分位数)以及最大值,描述了连续型变量的分布。
通过函数boxplot
来实现,函数原型如下:
boxplot(formula, data = NULL, ..., subset, na.action = NULL,
xlab = mklab(y_var = horizontal),
ylab = mklab(y_var =!horizontal),
add = FALSE, ann = !add, horizontal = FALSE,
drop = FALSE, sep = ".", lex.order = FALSE)
代码示例:
# 箱线图
boxplot(trees$Girth)
运行效果:

可以通过boxplot.stats(x)
来输出用于构建图形的统计量。
并列箱线图
可以通过传入参数的时候传入如下格式的参数即可:
boxplot(并列数据1~并列数据2)
具体用法和实现效果自行查询,此处不做说明
小提琴图
有一种特殊的箱线图,它结合了核密度图,形成了新的图形即小提琴图。
可以通过vioplot
包中的vioplot()
函数来绘制,函数原型如下:
vioplot(x, use.cols = TRUE, ...)
代码示例:
# 小提琴图
library(vioplot)
vioplot(trees$Girth)
运行效果:

关于小提琴图的更多说明,请自行查询
点图
点图顾名思义,在图中根据数据绘制大量的点,可以通过dotchart()
函数来实现,其函数原型如下:
dotchart(x, labels = NULL, groups = NULL, gdata = NULL, offset = 1/8,
ann = par("ann"), xaxt = par("xaxt"), frame.plot = TRUE, log = "",
cex = par("cex"), pt.cex = cex,
pch = 21, gpch = 21, bg = par("bg"),
color = par("fg"), gcolor = par("fg"), lcolor = "gray",
xlim = range(x[is.finite(x)]),
main = NULL, xlab = NULL, ylab = NULL, ...)
labels
:用来指点每个点的标签
代码示例:
# 点图
dotchart(trees$Girth)
运行效果:

End
关于 R 的基本图形如上所示,其更多的自定义参数可以查询官方文档,或者自行网络查询。
Q.E.D.