【R】分类数据与数值型数据分组与绘图

分类数据与数值型数据分组
绘制条形图,分组条形图,堆砌条形图,饼图,直方图,茎叶图,箱线图,小提琴图,散点图,3d散点图,气泡图

#数据预处理
load("E:\\研究生学习\\大数据统计基础\\ch2\\example2_1.RData")
example2_1
summary(example2_1)
count1<-table(example2_1$性别)
count1
prop.table(count1)
count2<-table(example2_1$牛奶品牌)
prop.table(count2)
count2
mytable<-table(example2_1)  #将原始数据转为列联表
mytable
addmargins(mytable)  #给列联表加上行合计列合计
addmargins(prop.table(mytable))  #频数列联表加上行合计列合计
library(gmodels)
CrossTable(example2_1$性别,example2_1$牛奶品牌) #生成更详细的列联表
#依次为频数,卡方,频数/行合计,频数/列合计,频数/总合计
#计算分类数据的拟合优度检验/独立性检验时所需的数
#绘制条形图
par(mfcol=c(1,2),cex=0.6)  #生成1*2的空地儿用来画图,缩放为0.6
#cex用于表示对默认的绘图文本和符号放大多少倍
barplot(count1,xlab="性别",ylab="频率",main="(a)分组条形图")
#绘制条形图,数据用count1,x轴标签为性别,y轴标签为频率,表名为(a)分组条形图
barplot(count2,xlab="频率",ylab="牛奶品牌",horiz=TRUE,main="(b)水平条形图")
#horiz=T横着的条形图,horiz=F竖着的条形图,默认为F竖着的
#画分组条形图,堆砌条形图,饼图
count<-table(example2_1$性别,example2_1$牛奶品牌)
#和mytable<-table(example2_1)效果一样
par(mfcol=c(1,2),cex=0.6)
barplot(count,xlab="牛奶品牌",ylab="频率",ylim=c(0,20),col=c("green","blue"),
legend=rownames(count),args.legend=list(x=10),beside=TRUE,main="(a)分组条形图")
#legend=rownames(count)表示图例为count表中的行名
#args.legend=list(x=10),表示图例在图中的位置,不写的话默认在最右侧,如果没有上一句的话写这句没用
#beside=T分组条形图,beside=F堆砌条形图,默认是F堆砌条形图
#main是图的名字
barplot(count,xlab="牛奶品牌",ylab="频率",col=c("green","blue"),
legend=rownames(count),args.legend=list(x=4),main="(b)堆砌条形图")
name<-names(count2)
percent<-prop.table(count2)*100
label1<-paste(name,"",percent,"%",sep="")  #整理频数分布表
#分隔符号为""
par(cex=0.8)
pie(count2,labels=label1)
#对数值型数据进行等距分组
load("E:\\研究生学习\\大数据统计基础\\ch2\\example2_2.RData")
install.packages("plyr")
library(plyr)
count<-table(round_any(example2_2,10,floor))
#round_any表示把这个数进行近似,近似成以10为一个间隔的数,floor表示往小里近似,ceiling表示往大里近似
#结果第一行为近似后的组,第二行为对定的频数
count<-as.numeric(count)
#仅保留频数
pcount<-prop.table(count)*100
cumsump<-cumsum(pcount)
#向上累积
name<-paste(seq(160,270,by=10),"-",seq(170,280,by=10),sep="")
tt<-data.frame("频数"=count,"百分比"=pcount,"累计百分比"=cumsump,row.names=name)
#绘制直方图,茎叶图
par(mfcol=c(2,2),cex=0.7)
hist(example2_2,xlab="销售额",ylab="频数",main="(a)普通")
hist(example2_2,freq=FALSE,breaks=20,xlab="销售额",ylab="频数",main="(c)增加轴须线和密度线")
rug(jitter(example2_2))
#rug在x轴处增加密度线
lines(density(example2_2),col="blue")
#在c图绘制一条密度曲线
hist(example2_2,breaks=20,col="lightblue",xlab="销售额",ylab="频数",main="(b)分成20组")
#break分成多少组
hist(example2_2,freq=FALSE,breaks=20,xlab="销售额",ylab="频数",main="(d)增加正态密度线")
#freq=T表示纵轴为频数,F表示纵轴为频率,默认为T
curve(dnorm(x,mean(example2_2),sd(example2_2)),add=T,col="red")
#add=T才能加到图中
lines(c(1,1),c(2,3),col="green")
stem(example2_2)  #绘制茎叶图
#绘制箱线图,小提琴图
load("E:\\研究生学习\\大数据统计基础\\ch2\\example2_3.RData")
example2_3
boxplot(example2_3,col="lightblue",cex.axis=0.5)  #绘制箱线图
#绘制小提琴图
install.packages("vioplot")
library(vioplot)
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,col="lightblue",names=c("亚历山大.彼得里夫利","拉尔夫.许曼",
"克里斯蒂安.赖茨","列昂尼德.叶基莫夫","基思.桑德森","罗曼.邦达鲁克"))
#绘制散点图
load("E:\\研究生学习\\大数据统计基础\\ch2\\example2_4.RData")
attach(example2_4)
par(mfcol=c(1,2),cex=0.7)
plot(广告费用,销售收入,main="(a)普通散点图",type="n")
#type="n"表示先不要画图
grid()  #加网格线
points(广告费用,销售收入,main="(a)普通散点图")
plot(广告费用,销售收入,main="(b)带有拟合直线")
abline(lm(销售收入~广告费用,data=example2_4))
#abline表示拟合直线
#将多个散点图绘制在同一作图区
attach(example2_4)
par(cex=0.7)
plot(广告费用,销售收入,xlab="广告费用和销售网点",ylab="销售收入")
abline(lm(销售收入~广告费用,data=example2_4))
points(销售网点数,销售收入,pch=19,col="blue")
abline(lm(销售收入~销售网点数,data=example2_4),col="blue")
#绘制三个变量的3d散点图
library(scatterplot3d)
attach(example2_4)
s3d<-scatterplot3d(销售人员,销售网点数,销售收入,
pch=16,highlight.3d=TRUE,type="h",cex.lab=0.7)
#添加拟合
fit<-lm(销售收入~销售人员+销售网点数)
s3d$plane3d(fit,col="blue")
#绘制气泡图
attach(example2_4)
par(cex=0.7)
r<-sqrt(销售收入/pi)
symbols(广告费用,销售网点数,circle=r,inches=0.3,fg="white",bg="lightblue",
ylab="销售网点数",xlab="广告费用")
text=(广告费用,销售网点数,rownames(example2_4),cex=0.6)

你可能感兴趣的:(R)