本文涉及的基础图形有条形图、饼图、直方图、核密度图、箱线图、点图。
条形图
条形图通过垂直或水平的条形展示类别变量的分布(频数)。
函数barplot()
调用格式:
barplot(height)
其中,height是一个向量或一个矩阵。
适用条件
- 分类变量
分类
#载入包
library(vcd)
#获取分类变量数据
counts <- table(Arthritis$Improved)
#分类变量
counts
None Some Marked
42 14 28
使用table()函数生成分类变量。
- 简单条形图
如果height为一个向量,则它的值就是确定了各条形的高度。
#简单条形图
barplot(counts,main = 'Simple Bar Plot',xlab = 'Improvement',ylab = 'Fre')
#水平条形图
barplot(counts,main = 'Simple Bar Plot',xlab = 'Improvement',ylab = 'Fre',horiz = TRUE)
简单条形图
水平条形图
加入horiz=TRUE,生成水平条形图。
- 堆砌条形图和分组条形图
如果height是一个矩阵而不是一个向量则绘图结果将是一幅堆砌条形图或分组条形图。
参数 | 描述 |
---|---|
beside | beside=FALSE(默认值),堆砌条形图。矩阵中每列的取值堆砌在同一条形上。 |
beside | beside=TRUE,分组条形图,矩阵中每列的取值表示一个分组。 |
#生成数据
counts <- table(Arthritis$Improved,Arthritis$Treatment)
counts
Placebo Treated
None 29 13
Some 7 7
Marked 7 21
#堆砌条形图
barplot(counts,main = 'Stacked Bar Plot',xlab = 'Treatment',ylab = 'Fre',col = c('red','yellow','green'),legend=rownames(counts))
#分组条形图
barplot(counts,main = 'Grouped Bar Plot',xlab = 'Treatment',ylab = 'Fre',col = c('red','yellow','green'),legend=rownames(counts),beside = TRUE)
堆砌条形图
分组条形图
- 均值条形图
使用数据整合函数生成相关结果,将结果传递给barplot函数,生成表示平均值、中位数、标准差等的条形图。
#生成数据框
states <- data.frame(state.region,state.x77)
#根据地区生成文盲率的平均值
means <- aggregate(states$Illiteracy,by=list(state.region),FUN=mean)
#平均值
means
Group.1 x
1 Northeast 1.000000
2 South 1.737500
3 North Central 0.700000
4 West 1.023077
#将均值从小到大排序
means <- means[order(means$x),]
means
Group.1 x
3 North Central 0.700000
1 Northeast 1.000000
4 West 1.023077
2 South 1.737500
#均值条形图
barplot(means$x,names.arg = means$Group.1)
#添加标题
title('地区平均文盲率')
均值条形图
- 棘状图
棘状图是对堆砌条形图的重缩放,这样每个条形的高度均为1,每一段的高度即表示比例。通过vcd包spine()函数绘制。
#载入包
library(vcd)
#绑定数据集
attach(Arthritis)
counts <- table(Treatment,Improved)
#生成棘状图
spine(counts,main='Spinogram Example')
#解除绑定
detach(Arthritis)
棘状图
饼图
饼图以饼状图展示分类变量组成。
函数pie(x,labels)
其中,x是一个非负数值向量,表示每个扇形的面积。而labels表示各扇形标签的字符型向量。
适用条件
- 分类变量
示例
par(mfrow=c(2,2))
slices <- c(10,12.4,16,8)
lbls <- c('US','Uk','Australia','Germany','France')
pie(slices,labels = lbls,main='Simple Pie Chart')
饼图
直方图
直方图通过将在x轴上将值域分割为一定数量的组,在y轴上显示相应值的频数,展示连续变量的分布。
函数hist(x)
其中x是一个由数据值组成的数值向量。参数freq=FALSE表示根据概率密度而不是频数绘制图形。参数breaks用于控制组的数量。默认生成等距切分。
适用条件
- 连续变量
示例
hist(mtcars$mpg)
直方图
核密度图
核密度估计是用于估计随机变量概率密度函数的一种非参数方法。
核密度图函数
plot(density(x))
其中,x为一个数值向量。
适用条件
- 连续变量的分布
示例
plot(density(mtcars$mpg))
核密度图
箱线图
箱线图通过绘制连续变量的最小值、下四分位数、中位数、上四分位数及最大值,描述连续变量的分布。
函数boxplot()
适用条件
- 连续变量
- 判断数据异常点
分类
- 最简单的箱线图
boxplot(mtcars$mpg,main='Box plot',ylab='Miles per Gallon')
最简单的箱线图
- 分组箱线图
boxplot(formula,data=dataframe)
其中,formula为表达式(y~A,根据分类变量A生成连续变量y的箱线图),data为一个数据框。
参数 | 描述 |
---|---|
varwidth=TRUE | 将使箱线图的宽度与其样本大小的平方根成正比 |
horizontal=TRUE | 可以反转坐标轴的方向 |
notch=TRUE | 可以得到含凹槽的箱线图。两个箱的凹槽互不重叠,则说明它们的中位数有显著差异。 |
boxplot(mpg~cyl,data=mtcars,main='Car Mileage Data',xlab = 'Number of Cylinders',ylab = 'Miles per Gallon')
分组箱线图
小提琴图
小提琴图(violin plot)是箱线图变种。它是箱线图与核密度的结合。通过vioplot包vioplot()函数绘制。
函数vioplot(x1,x2,…,names=,col=)
其中x1,x2,…表示要绘制的一个或多个数值向量
示例
#载入包
library(vioplot)
#绑定数据集
attach(mtcars)
#生成数据
x1 <- mpg[cyl==4]
x2 <- mpg[cyl==6]
x3 <- mpg[cyl==8]
#绘图
vioplot(x1,x2,x3,names = c('4 cyl','6 cyl', '8 cyl'),col = 'gold')
[1] 10.4 33.9
#解除绑定
detach(mtcars)
小提琴图
点图
点图提供一种在简单水平刻度上绘制大量有标签值的方法。通过dotchart()函数实现。
dotchart(x,labels=)
其中x是一个数值向量,labels是由每个点的标签组成的向量。
参数 | 描述 |
---|---|
groups | 选中一个分类变量,对x分组 |
gcolor | 控制不同组标签的颜色 |
示例
dotchart(mtcars$mpg,labels = row.names(mtcars),cex=.7,main = 'Gas Mileage for Car Models',xlab = 'Miles per Gallon')
点图