蛛网图改进
写代码时的注意事项:
1.一定一定要注意,标点符号的英文形式!
2.分清数据的横纵坐标含义
3.修改变量时,注意对应变量的修改
4.paste(csum,var[i],sep="、"),连接字符对象
5.书写的逻辑要多思考
改进内容:
- 为图像添加颜色
- 为图添加图例
- 为图添加对应标题
- 实现指定对象个数画蛛网图
代码:
stdspider函数:
stdspider<-function(w,nn){
#标准化后的蛛网图
#w为数据,nn为每次画图对象个数,nn取值1-10
#适用于列为指标,行为对象的数据集
mw = nrow(w)
nw = ncol(w)
item = seq(1,mw,nn)
for (i in item)
{
x = w[i:min(i+nn-1,mw),]#取行,[i,i+nn-1]有nn个数
m=nrow(x)#对象个数
totalcolor <-c("black","red","green","blue","brown","aquamarine","beige","cadetblue","blueviolet","pink")#对象对应总颜色
colorr<-totalcolor[1:m]#选出的颜色,注意不能命名为colors,其类别为'closure'的对象不可以取子集
if(is.data.frame(x)==TRUE)
x <- as.matrix(x)
p <- dimnames(x)[[2]]#矩阵x的列名称
n <- ncol(x)#指标个数
for (j in 1:n) # 为避免各变量取值范围相差太大,使图像集中在一脚,
# 对所有的变量进行标准化 ,按照指标进行标准化
{
x1 = x[,j]
x[,j]=x1/sqrt(sum(x1*x1))
}
dev.new()#创建新窗口
var=dimnames(x)[[1]]#变量名称
csum=var[1]#用于记录所有变量
nv=length(var)
for(i in 2:nv){
csum=paste(csum,var[i],sep="、")
}
csum=paste(csum,"的蛛网图",sep="")#作为title
stars(x, scale = F ,radius = T, main=csum,labels=NULL,locations = matrix(0,m,2),col.lines = 1:m, lwd=2)#画星图
for(i in 1:n)
text(cos((i-1)*2/n*pi)*max(x[,i]),sin((i-1)*2/n*pi)*max(x[,i]),p[i])
#在各轴最远处标出名称
legend("topright",inset=0.01,title="对象名称",rownames(x)[1:m],fill=colorr[1:m],border = FALSE,col=fill,pt.cex = 1, cex = 1, bty = "n")
#添加注释,位置 ,与边界距离 ,名称
}
}
主函数:
w <- read.table("data3.4.txt",header = T ) # 读入数据
source("stdspider.R")
stdspider(w,4)
stdspider(w,6)