网站添加关键词,推荐做素菜的网站,网站百度突然不收录,如何快速建设网站文章目录 前言列联表条形图及其变种---单式条形图条形图及其变种---帕累托图条形图及其变种---复式条形图条形图及其变种---脊形图条形图及其变种---马赛克图饼图及其变种---饼图饼图及其变种---扇形图直方图茎叶图箱线图小提琴图气泡图总结 前言
本篇文章是对数据可视化的补充… 文章目录 前言列联表条形图及其变种---单式条形图条形图及其变种---帕累托图条形图及其变种---复式条形图条形图及其变种---脊形图条形图及其变种---马赛克图饼图及其变种---饼图饼图及其变种---扇形图直方图茎叶图箱线图小提琴图气泡图总结 前言
本篇文章是对数据可视化的补充文章。 列联表
跳转至该篇博客 跳转至该篇博客
在上面两篇博客中对单变量和双变量的列联表进行了实例展示下面是对三维列联表进行实例。 行变量为被调查者所属社区和性别列变量为态度的三维列联表
load(C:/example/ch2/example2_1.RData)
mytable1-ftable(example2_1);mytable1生成行变量为被调查者性别和态度列变量为社区的三维列联表
mytable2-ftable(example2_1,row.varsc(性别,态度),col.var 社区)
mytable2为列联表mytable2增加边际和
ftable(addmargins(table(example2_1$性别,example2_1$态度,example2_1$社区)))将列联表mytable2转化为百分比表
ftable(addmargins(prop.table(table(example2_1$性别,example2_1$态度,example2_1$社区)))*100)函数ftablex…用于产生扁平化列联表。参数x为一个列表、数据框或列联表对象。ftablex按x中变量的原始排列顺序列表将最后一个变量作为列变量如 mytable1. ftablexrow.varscol.var)可以改变变量的列表方式如mytable2。
例题 一家购物网站连续120天的销售额数据。生成一张频数分布表观察销售额的分布特征。 首先确定组数。组数的多少与数据本身的特点及数据的多少有关。组数的确定方法有多种。设组数为K根据 Sturges提供的方法确定组数。K1lg(n)/lg(2)当然这只是个大概数具体的组数可根据需要做适当调整。本例共有120个数据组数K1lg120/lg28或使用R函数 nclass. Sturgesexample2_2$销售额得K8为便于理解这里分为12组。 其次确定各组的组距。组距可根据全部数据的最大值和最小值及所分的组数来确定。即组距最大值一最小值÷组数。对于本例数据最大值为272最小值为161则组距272-161÷129.25。为便于计算组距宜取5或10的倍数因此组距可取10。为避免数据被遗漏第一组的下限应低于最小数值最后一组的上限应高于最大数值。 最后统计出各组的频数即得频数分布表。在统计各组频数时恰好等于某一组上限的变量值一般不算在本组内而算在下一组即一个组的数值x满足a≤xba为下限值b为上限值 round_any( )函数可以将向量数据近似到任意指定的精度。 生成频数分布表的R代码如下所示
load(C:/example/ch2/example2_2.RData)
vector2_2-as.vector(example2_2$销售额)
library(plyr)
count-table(round_any(vector2_2,10,floor))
count-as.numeric(count)
pcount-prop.table(count)*100
cumsump-cumsum(pcount)
name-paste(seq(160,270,by10),-,seq(170,280,by10),sep)
gt-data.frame(频数count,频数百分比pcount,累积频数百分比cumsump,row.namesname)
round(gt,4)#函数roundx digits是对数据x按digit照指定的精度改变输出的小数位.本例将输出结果保留4位小数.使用“cut”函数将【例2—2】分成间隔为10的组不用考虑组数有了间隔组数自然就确定了
load(C:/example/ch2/example2_2.RData)
vector2_2-as.vector(c(example2_2$销售额))
d-table(cut(vector2_2,breaks10*(16:28),rightFALSE))
dd-data.frame(d)
percent-dd$Freq/sum(dd$Freq)*100
cumsump-cumsum(percent)
df-data.frame(dd,percent,cumsump)
library(reshape)
mytable-rename(df,c(Var1分组,Freq频数,percent频数百分比,cumsump累积频数百分比))
mytable函数cutx breaks righttruedig.ab3中x为数值向量。 breaks为要分的组数。例如breaks5表示分成5组 breaks10*510表示将50~100之间的数据分成间隔为10的组。一般 breaksk*(x1x2表示以k为组的间隔kx1应小于等于数据集的最小值kx2应大于数据集的最大值。而且k与x1、k与x2之间应为整数倍的关系。默认 rightTRUE表示封闭上限即含上限值设定 rightFALSE则表示不封闭上限即不含上限值。dig.lab3表示分组标签默认保留3位数值可根据需要设定要保留的数值位数。
条形图及其变种—单式条形图
例题2-1
load(C:/example/ch2/example2_1.RData)
count1-table(example2_1$社区)
count2-table(example2_1$性别)
count3-table(example2_1$态度)
par(mfrowc(1,3),maic(0.7,0.7,0.6,0.1),cex0.7,cex.main0.8)
bar-barplot(count1,xlab频数,ylab社区,horizTRUE,xlimc(0,1.2*max(count1)),main(a)水平条形图,col2:5)
text(bar,count1,labelscount1,pos4,adjc(0,0.5))
bar-barplot(count2,xlab性别,ylab频数,colc(gray40,gray80),ylimc(0,1.2*max(count2)),main(b)垂直条形图)
text(bar,count2,labelscount2,pos3,col2)
bar-barplot(count3,xlab态度,ylab频数,ylimc(0,1.1*max(count3)),col2:3,main(c)垂直条形图)
text(bar,count3/2,labelscount3,pos3,col4)函数 barplot( height…)创建条形图。参数 height为向量、矩阵、数据框或表格x1ab设置x轴标签y1ab设置y轴标签 horizTRUE绘制水平条形图col设置图形颜色main为图形增加主标题sub为图形。 条形图及其变种—帕累托图
帕累托图( Pareto plot)是以意大利经济学家V. Pareto的名字命名的它是按各类别的频数多少排序后绘制的条形图。帕累托图可以看作简单条形图的一个变种利用该图很容易看出哪类频数出现得多哪类频数出现得少。以例2-1的社区为例绘制帕累托图的R代码和结果如下所示
# load(C:/example/ch2/example2_1.RData)
count1-table(example2_1$社区)
par(maic(0.7,0.7,0.1,0.7),cex.8)
x-sort(count1,decreasingT)
bar-barplot(x,xlab社区,ylab频数,colrainbow(4),ylimc(0,1.2*max(count1)))
text(bar,x,labelsx,pos3,col1)
####了解即可
y-cumsum(x)/sum(x)
par(newT)
plot(y,typeb,lwd1.5,pch15,axesFALSE,xlab,ylab,main)
axis(4)
mtext(累积频率,side4,line3,cex.8)
mtext(累积分布曲线,line-2.5,cex.8,adj0.75)条形图及其变种—复式条形图
load(C:/example/ch2/example2_1.RData)
mytable1-table(example2_1$态度,example2_1$社区)
par(mfrowc(2,2),cex0.6)
bar1-barplot(mytable1,xlab社区,ylab频数,ylimc(0,16),colc(red,green),legendrownames(mytable1),args.legendlist(x12),besideTRUE,main(a)社区并列条形图)
text(bar1,mytable1,labelsmytable1,pos3,col1)
bar2-barplot(mytable1,xlab社区,ylab频数,ylimc(0,30),colc(red,green),legendrownames(mytable1),args.legendlist(x4.8),main(b)社区堆叠条形图)
mytable2-table(example2_1$态度,example2_1$性别)
bar3-barplot(mytable2,xlab性别,ylab频数,ylimc(0,30),colc(red,green),legendrownames(mytable2),args.legendlist(x4.5),besideTRUE,main(c)性别并列条形图)
text(bar3,mytable2,labelsmytable2,pos3,col1)
bar4-barplot(mytable2,xlab性别,ylab频数,ylimc(0,60),colc(red,green),legendrownames(mytable2),args.legendlist(x1),main(d)性别堆叠条形图)条形图及其变种—脊形图
是根据各类别的比例绘制的一种条形图形状类似脊椎骨可看做是堆叠条形图的一个变种 绘制脊形图时将一个类别变量各类别的条的高度都设定为1条的宽度与观测频数成比例条内每一段的高度表示另一个类别变量各类别的比例。 性别与社区的脊形图
load(C:/example/ch2/example2_1.RData)
library(vcd)
spine(社区~性别,dataexample2_1,xlab性别,ylab社区)社区与态度的脊形图
spine(态度~社区,dataexample2_1,xlab社区,ylab态度)上图图1反映了被调查者的性别和社区构成。从被调查者的性别构成看女性条的宽度大于男性条的宽度表示被调查者中女性的人数比例大于男性。从人数的社区构成看男性被调查者中D社区所占的比例最小女性被调查者中A社区所占的比例最大。 上图图2反映了被调查者的社区和态度构成。不同社区的条的宽度与该社区的人数成比例每个社区条内的高度反映赞成和反对的人数比例。图显示从被调查者的社区构成看A社区的条最宽D社区的条最窄表示在全部被调查者中A社区的人数比例最大D社区的人数比例最小。从赞成和反对的人数构成看A社区中表示赞成和反对的比例相当而在B社区、C社区和D社区中赞成的比例明显高于反对的比例。
条形图及其变种—马赛克图
马赛克图(mosaicplot)图中的嵌套矩形面积正比于单元格频数。矩形的相对高度和宽度表示不同类别的频数与总频数的比例(更适合展示两个以上的类别变量) 绘马赛克图(mosaicplot)
load(C:/example/ch2/example2_1.RData)
par(maic(0.4,0.4,0.2,0.1),cex.9)
mosaicplot(~性别社区态度,dataexample2_1,color2:3,main)图中矩形的相对高度和宽度取决于相应单元格的频数。这里的矩形长度正比于赞成和反对的比例而高度则正比于各社区赞成和反对的比例。可以看出无论是男性还是女性B社区和C社区赞成的比例都高于反对的比例而A社区和D社区赞成和反对的比例相差不大。
饼图及其变种—饼图
绘制带有百分比的饼图以不同社区的被调查者人数分布为例
load(C:/example/ch2/example2_1.RData)
count1-table(example2_1$社区)
name-names(count1)
percent-prop.table(count1)*100
label1-paste(name, ,percent,%,sep)
par(pinc(3,3),maic(0.1,0.4,0.1,0.4),cex0.8) pie(count1,labelslabel1,init.angle90,radius1)绘制3D饼图以不同社区的被调查者人数分布为例
load(C:/Users/125/Desktop/example/ch2/example2_1.RData)
library(plotrix)
count1-table(example2_1$社区)
name-names(count1)
percent-prop.table(count1)*100
labs-paste(name,,percent,%,sep)
pie3D(count1,labelslabs,explode0.1,labelcex0.7)#explode每一块的距离labelcex各分区名称函数piex labels radiusinit.agle…创建一个饼图。参数x为一个非负的数值向量。 labels设置饼图各分区的名称。radius设定半径默认为0.8。init. angle90设定从12点位置开始逆时针方向绘制. pastesep“”是把若干个R对象链接起来各对象以sep指定的符号间隔。
饼图及其变种—扇形图
绘制扇形图以不同社区的被调查者人数分布为例
load(C:/example/ch2/example2_1.RData)
count1-table(example2_1$社区)
name-names(count1)
percent-count1/sum(count1)*100
labs-paste(name, ,percent,%,sep)
library(plotrix)
fan.plot(count1,labelslabs,ticks200)直方图
例题2-2
load(C:/example/ch2/example2_2.RData)
d-example2_2$销售额
par(mfrowc(2,2),cex0.7,maic(0.6,0.6,0.2,0.1))
hist(d,ylimc(0,28),labelsT,xlab 销售额,ylab频数,main(a)普通)
hist(d,breaks20,collightblue,xlab销售额,ylab频数,main(b)分成20组)
hist(d,freqFALSE,ylimc(0,0.028),breaks20,xlab销售额,ylab密度,collightgreen,labelsT,main(c)增加轴须线和核密度线)
rug(d)
lines(density(d),colred,lwd2)核密度估计是用于估计随机变量概率密度函数的一种非参数方法。核密度图是估计的概率密度函数的图像。用于观察连续型变量的分布。
茎叶图
load(C:/example/ch2/example2_2.RData)
stem(example2_2$销售额)library(aplpack)
stem.leaf(example2_2$销售额,1,2)上图是每个茎列出1次的茎叶图从中可以看出销售额主要集中在200万~210万元之间。该茎叶图类似于将数据分成12组后横置的直方图它所反映的分布特征也与直方图一致。
使用stem.leaf.backback函数绘制背靠背茎叶图前60天销售额和后60天销售额分别绘制
library(aplpack)
stem.leaf.backback(example2_2$销售额[1:60],example2_2$销售额[61:120])上图是每个茎列出2次的茎叶图从中可以看出销售额分布的更多细节。图中最左边一列给出的是数据的深度depth。什么是数据的深度呢我们把数据从小到大排序升序或从大到小排序降序一个数据的深度是指该数据升序和降序中的最小者、比如194这个数从小到大排序是第18个而从大到小排序是第102个因此该数的深度是18。
茎叶图中每一行列出的是该行中的最大深度。比如茎为19的那行最大深度出现在数据194深度为18因此该行的深度就是18。 在深度那一列中中位数所在的行用括号括起来其中的数字5不是指数据深度而是数据的个数。
箱线图
在2008年8月举行的第29届北京奥运会男子25米手枪速射决赛中进入决赛的前6名运动员最后20枪的决赛成绩如下表所示。绘制箱线图分析各运动员射击成绩分布的特征。
load(C:/example/ch2/example2_3.RData)
boxplot(example2_3,colpink,ylab射击环数,xlab运动员)小提琴图
从箱线图不易看出每名运动员射击成绩分布的实际形状。小提琴图violin plot作为箱线图的一个变种将分布的核密度估计曲线与箱线图结合在一起它在箱线图上以镜像方式叠加一条核密度估计曲线。从核密度估计曲线可以看出数据分布的大致形状。以例2-3的数据为例绘制小提琴图的R代码和下所示
load(C:/example/ch2/example2_3.RData)
library(vioplot)
par(cex0.8,maic(.7,.7,.1,.1))
x1-example2_3$亚历山大.彼得里夫利
x2-example2_3$拉尔夫.许曼
x3-example2_3$克里斯蒂安.赖茨
x4-example2_3$列昂尼德.叶基莫夫
x5-example2_3$基思.桑德森
x6-example2_3$罗曼.邦达鲁克
vioplot(x1,x2,x3,x4,x5,x6,collightblue,namesc(亚历山大.彼得里夫利,拉尔夫.许曼,克里斯蒂安.赖茨,列昂尼德.叶基莫夫,基思.桑德森,罗曼.邦达鲁克))图中白点是中位数黑色箱子是25%分位数和75%分位数之间的范围。两条黑线为须线。小提琴图显示了比箱线图更多的信息。从图中容易看出每名运动员射击成绩的分布均为左偏分布。
气泡图
对于3个变量之间的关系可以绘制气泡图(bub-ble plot)它可以看作散点图的一个变种。其中第3个变量数值的大小用圆的大小表示。以例2-4中的销售收入、广告费用、销售网点数3个变量为例绘制气泡图的R代码和结果如下所示
load(C:/example/ch2/example2_4.RData)
attach(example2_4)
par(maic(0.9,0.9,0.1,0.1))
r- sqrt(销售收入/pi)
symbols(广告费用,销售网点数, circler,inches0.3,fgwhite,bglightblue, ylab销售网点数,xlab广告费用)
text(广告费用,销售网点数,rownames(example2_4),cex0.6)
mtext(气泡大小 销售收入,line-2.5,cex.8,adj0.1)函数symbols(xyNULLcirclesinchesTRUE…)中的x和y为x轴和y轴变量circles 第3个变量表示的圆的半径向量inches半径英寸fg圆的颜色bg 圆的填充颜色.text为气泡增加样本标签或编号。
图中的圆中的数字是样本编号销售收入越多圆就越大。可以看出随着广告费用和销售网点数的增加销售收入也增加三者之间均为线性关系。 总结
以上就是对数据可视化图形的补充内容希望对大家的学习有所帮助。