上篇《描述统计学之R语言实战1:表格法》主要介绍了如何用R语言实现单变量数据、两个变量数据的表格统计法,本篇将介绍如何使用R语言对单变量数据、两个变量数据进行图形化显示。
单变量的数据统计
条形图和饼图是用来描述已汇总的分类型数据的频数分布、相对频数分布或百分数频数分布的图形方法。
1.在R中导入“50次购买软饮料的样本数据”。
> library(xlsx)
> drink<-read.xlsx('/Users/liuqin/Documents/50次购买软饮料的样本数据.xlsx',1)
> head(drink)
购买记录 饮料类别
1 1 可口可乐
2 2 健怡可乐
3 3 百事可乐
4 4 健怡可乐
5 5 可口可乐
6 6 可口可乐
2.table()函数汇总各类别饮料后,用barplot()函数绘制购买饮料的条形图,条形图可直观的看到各类别饮料受欢迎程度。
> counts<-with(drink,table(饮料类别))
> counts
饮料类别
百事可乐 胡椒博士 健怡可乐 可口可乐 雪碧
13 5 8 19 5
> barplot(counts,main='购买软饮料的条形图',cex.names=0.8,
xlab='软饮料',ylab='频数',family='STKaiti',col='cadetblue1')
3.也可用pie()函数绘制饼图,每一个扇形部分的数值可以是频数、相对频数或百分数频数。一般饼形图不是呈现对比的最佳途径,相对于面积,人们对长度的判断更精确,所以更推荐使用条形图。
> lbls<-paste(names(counts),'\n',counts,sep='')
> pie(counts,labels=lbls,main='购买软饮料的饼图',family='STKaiti')
打点图和直方图是常用的数量型数据的图形汇总方法。
1.在R中导入“年末审计时间的样本数据”。
> time<-read.xlsx('/Users/liuqin/Documents/年末审计时间样本数据.xlsx',1)
> head(time)
客户 年末审计时间.单位.天.
1 1 12
2 2 15
3 3 20
4 4 22
5 5 14
6 6 14
2.使用dotchart()函数创建散点图,横轴是数据的值域,每一个数据值由横轴上的点表示,3个点位于横轴刻度18之上,表明有3次审计时间为18天。散点图能够显示数据的细节,且有利于比较两个或更多变量的数据分布。
> dotchart(time$年末审计时间.单位.天.,cex=0.8,main='审计时间数据的打点图',
xlab='审计时间(天数)',color='darkgreen',pch=19,family='STKaiti')
3.也可使用hist()函数创建直方图,与条形图不同,直方图中邻近的长方形是相互连接的,且直观的提供了数据分布形态的信息。
> hist(time$年末审计时间.单位.天.,col='bisque',xlab='审计时间(天)',
ylab='频数',main='审计时间数据的直方图',family='STKaiti')
两个变量的数据统计
散点图是对两个数量变量间关系的图形表述,趋势图是显示两个变量相关性近似程度的一条直线。
1.在R中导入“音像设备商店的样本数据”。
> data<-read.xlsx('/Users/liuqin/Documents/音像设备商店的样本数据.xlsx',1)
> head(data)
周 广告次数x 销售额y.100美元.
1 1 2 50
2 2 5 57
3 3 1 41
4 4 3 54
5 5 4 54
6 6 1 38
2.plot()函数可绘制样本数据的散点图,广告次数(x)显示在横轴上,销售额(y)显示在纵轴上,散点图表明,广告次数和销售额之间存在正相关性。abline()函数用来添加最佳拟合的线性直线,所有点不在一条直线上,所以不完全是线性关系,其整体关系是正相关的。
> attach(data)
> plot(广告次数x,销售额y.100美元.,main='音像设备商店的散点图和趋势图',
xlab='广告次数',ylab='销售额(100美元)',pch=19,family='STKaiti')
> abline(lm(销售额y.100美元.~广告次数x),col='red',lwd=2,lty=1)
复合条形图和结构条形图(堆积条形图)是比较两个及两个以上变量的图形显示方式。
1.在R中导入“100家洛杉矶饭店的质量等级和餐价样本数据”。
> mydata<-read.xlsx('/Users/liuqin/Documents/100家洛杉矶饭店的质量等级和餐价样本数据.xlsx',1)
> head(mydata)
饭店 质量等级 餐价.美元.
1 1 好 18
2 2 好 22
3 3 好 28
4 4 很好 38
5 5 很好 33
6 6 好 28
2.餐价是一个数量变量,因此需要现将餐价数据分为4个组,然后使用barplot()函数绘制饭店数据的复合条形图,如图所示,随着餐价的增加,“好”的长方形高度在减少,而“优秀”的长方形高度在增加,这表明随着价格的增加,质量等级趋向于更好。
> 餐价<- c("10~19", "20~29", "30~39", "40~49")
> breaks <- c(10,19,29,39,49)
> 餐价<- cut(mydata$餐价.美元., breaks = breaks, labels = 餐价, right = TRUE )
> mytable<-xtabs(~mydata$质量等级+餐价,data=mydata)
> mytable
餐价
mydata$质量等级 10~19 20~29 30~39 40~49
好 13 14 1 0
很好 9 22 17 2
优秀 1 4 9 8
> par(family='STXihei')
> barplot(mytable,main='质量等级和餐价数据的复合条形图',xlab='餐价($)',
ylab='频数',col=c('red','yellow','green'),legend.text=c("好",'很好','优秀'),
beside=TRUE)
4.将barplot()函数中的参数beside=TRUE去掉,得到堆积条形图,与饼图类似可显示每一组餐价中各质量等级饭店的频数分布。
> par(family='STXihei')
> barplot(mytable,main='质量等级和餐价数据的堆积条形图',xlab='餐价($)',
ylab='频数',col=c('red','yellow','green'),legend.text=c("好",'很好','优秀'))
总结如何选择合适的图形
用于展示数据分布的图形显示:
- 条形图:用于展示分类型数据的频数分布和相对频数分布
- 饼形图:用于展示分类型数据的相对频数分布和百分数频数分布
- 打点图:用于展示数值型数据在整个数据范围内的分布
- 直方图:用于展示数值型数据在一个区间组集合上的频数分布
用于进行比较的图形显示:
- 复合条形图:用于两个变量的比较
- 结构条形图(堆积条形图):用于比较两个分类变量的相对频数和百分数频数
用于展示相关关系的图形显示:
- 散点图:用于展示两个数量变量的相关关系
- 趋势图:用于近似散点图中数据的相关关系