数据可视化
1 R的图形组成和图形参数
1.1 图形组成
R的图形包括多个部分组成,必备成分:
- 主体
- 坐标轴
- 坐标标题
- 图标题
1.2 图形参数
图形参数主要有以下四类:
- 图形主体部分的参数:
符号类型pch和线条线型对应如下:
- 坐标轴部分参数
- 坐标标题的参数
- 图标题参数
1.3 图形布局
图形边界是指设置图形上边界、下边界、左边界、右边界的宽度。可以使用mar、mai表示,分别是英分和英寸为单位
1.4 修改图形参数
-
如果希望之后都使用统一的参数绘图,可以在绘图之前使用par函数设置参数
之后的图形都采用此参数
drawp = par() par(pch=3, lty=2, mar=c(1, 0.5, 1, 2)) ##换原默认参数 par(drawp)
2 单变量分布特征
2.1 核密度曲线
核密度估计是从样本数据出发估计密度函数的方法。
####直方图和带正态分布曲线的直方图,核密度图
ClaimData<-read.table(file="车险数据.txt",header=TRUE)
DrawL<-par()
par(mfrow=c(2,1),mar=c(4,6,4,4))
hist(ClaimData$nclaims,xlab="理赔次数",ylab="频率",main="车险理赔次数直方图",cex.lab=0.7,freq=FALSE,ylim=c(0,0.1))
MeanTmp=mean(ClaimData$nclaims,rm.na=TRUE)
SdTmp=sd(ClaimData$nclaims)
d=seq(from=min(ClaimData$nclaims),to=max(ClaimData$nclaims),by=0.1)
lines(x=d,y=dnorm(d,MeanTmp,SdTmp),lty=2,col=2)
###添加核密度曲线
lines(density(ClaimData$nclaims),lty=4,col=4)
plot(density(ClaimData$nclaims),type="l",main="车险理赔次数核密度图",xlab="理赔次数",ylab="密度",cex.lab=0.7)
rug(jitter(ClaimData$nclaims),side=1,col=2)
par(DrawL)
hist()函数是绘制直方图
density()函数是获得核密度估计函数
lines(x=横坐标, y=纵坐标)用于在已有图像上添见曲线
plot(数值型向量或者矩阵,type=线的类型)绘图函数
2.2 小提琴图
horizontal参数决定图是竖直还是水平的,第二种格式可以绘制多个变量的
############小提琴图
install.packages("vioplot")
library("vioplot")
ClaimData<-read.table(file="车险数据.txt",header=TRUE)
DrawL<-par()
par(mfrow=c(2,1),mar=c(4,6,4,4))
vioplot(ClaimData$nclaims,horizontal=TRUE) ##绘制全部观测的小提琴图
####添加图标题等
title(main="车险理赔次数的小提琴图",cex.main=0.8,xlab="理赔次数",ylab="全部观测",cex.lab=0.7)
###绘制各车型的小提琴图
TmpD1<-ClaimData$nclaims[ClaimData$vehiclegroup=="A"]
TmpD2<-ClaimData$nclaims[ClaimData$vehiclegroup=="B"]
TmpD3<-ClaimData$nclaims[ClaimData$vehiclegroup=="C"]
TmpD4<-ClaimData$nclaims[ClaimData$vehiclegroup=="D"]
LabX<-c("A","B","C","D")
Lo<-vioplot(TmpD1,TmpD2,TmpD3,TmpD4,names=LabX) #画图同时得到关键位置坐标
text(x=1:4,y=Lo$upper,labels=c(length(TmpD1),length(TmpD2),length(TmpD3),length(TmpD4)),
srt=90) #在指定位置添加文字信息
title(main="各车型车险理赔次数的小提琴图",cex.main=0.8,xlab="车型",ylab="理赔次数",cex.lab=0.7)
par(DrawL)
两侧曲线是核密度图,空心圆为中位数
2.3 克利夫兰图
克利夫兰图可以显示数据中的异常吃
可以使用legend函数添加图例
###########克利夫兰点图
DrawL<-par()
ClaimData<-read.table(file="车险数据.txt",header=TRUE)
par(mfrow=c(2,1),mar=c(4,6,4,4))
dotchart(ClaimData$nclaims,main="车险理赔次数的克利夫兰图",cex.main=0.8,xlab="理赔次数",ylab="观测编号",cex.lab=0.8)
AvN<-tapply(ClaimData$nclaims,INDEX=ClaimData$vehiclegroup,FUN=mean) #计算各车型理赔次数的平均值
dotchart(ClaimData$nclaims[order(ClaimData$vehiclegroup)],main="各车型车险理赔次数的克利夫兰图",cex.main=0.8,xlab="理赔次数",cex.lab=0.8,groups=ClaimData$vehiclegroup,gdata=AvN,gpch=17)
legend("bottomright",title="点型说明",c("观测值","均值"),pch=c(1,17),bg="white",cex=0.5)
par(DrawL)
3 多变量分布特征
3.1 曲面图和等高线图
##############二元正态分布密度图
mu1<-0
mu2<-0
ss1<-10
ss2<-10
rho<-0.7
MyDen<-function(x,y)
{
t1<-1/(2*pi*sqrt(ss1*ss2*(1-rho^2)))
t2<--1/(2*(1-rho^2))
t3<-(x-mu1)^2/ss1
t4<-(y-mu2)^2/ss2
t5<--2*rho*((x-mu1)*(y-mu2))/(sqrt(ss1)*sqrt(ss2))
return(t1*exp(t2*(t3+t4-t5)))
}
x<-seq(-10,10,length=50)
y<-x
z<-outer(x,y,FUN=MyDen)
par(mfrow=c(2,2),mar=c(6,4,4,1))
persp(x,y,z,main="二元正态分布密度曲面图",theta=30,phi=20,expand=0.5,shade = 0.5,xlab="X",ylab="Y",zlab="f(x,y)")
contour(x,y,z,main="二元正态分布密度等高线图")
###########其他曲面图
Myf<-function(x,y) {
r<-sqrt(x^2+y^2)
r<-10*sin(r)/r
return(r)
}
x<-seq(-10,10,length=30)
y<-x
z<-outer(x,y,Myf)
z[is.na(z)]<-1
persp(x,y,z,main="曲面图",theta=30,phi=30,expand=0.5)
contour(x,y,z,nlevels=10,main="等高线图")
y<-x
z<-outer(x,y,Myf)
z[is.na(z)]<-1
persp(x,y,z,main=“曲面图”,theta=30,phi=30,expand=0.5)
contour(x,y,z,nlevels=10,main=“等高线图”)
[外链图片转存中...(img-MWr4EUhh-1666010947076)]