多次元データを絵にするためのメモ

  • 完全グラフを描く(こちら)
    • 辺の長さをL>=2にすると、各辺のL等分点が付け加わる

#########
DrawPerfectGraph2<-function(d=5,L=1,edge=TRUE,cex1=2,cex2=1){
#d:次数
#L:1辺の長さ
# edge: エッジを描くかどうか
# cex1,cex2: 格子点の大きさ(角と辺の等分点)
#正d角形の頂点座標
k<-1:d
divk<-k/d
divk<-divk*2*pi
x<-cos(divk)
y<-sin(divk)
#プロット図を正方形にする
par(pin=c(2,2))
#点を打つ
plot(x,y,pch=20,cex=cex1)
#辺行列。対角成分=0の上三角TRUE行列にする
edgeMatrix<-matrix(rep(TRUE,d^2),nrow=d)
edgeMatrix[lower.tri(edgeMatrix,diag=TRUE)]<-FALSE
#TRUE成分の添え字を取り出す
Edges<-which(edgeMatrix,arr.ind=TRUE)
#線分を描く
if(edge){
	segments(x[Edges[,1]],y[Edges[,1]],x[Edges[,2]],y[Edges[,2]])

}
# エッジ上の点を付加する
if(L>1){
	LL<-(1:(L-1))/L
	for(i in 1:length(Edges[,1])){
		points(x[Edges[i,1]]*LL+x[Edges[i,2]]*(1-LL),y[Edges[i,1]]*LL+y[Edges[i,2]]*(1-LL),pch=20,cex=cex2)
	}

}
}

par(mfcol=c(1,2))
DrawPerfectGraph2(d=10,L=2)
DrawPerfectGraph2(d=10,L=2,edge=FALSE)
par(mfcol=c(1,1))