2015-01-06 3 views
1

У меня есть список координат x-y для 30 точек данных (зеленые точки на рис.), И я хотел бы связать их вместе.Подключить точку ближайшего соседа

plot

Как я могу сделать это в R? На данный момент я вычислил матрицу расстояний между каждой точкой на dist(), чтобы получить ближайший сосед для каждой точки. Однако этот результат в 30 краевых парах ... иногда несколько ребер подключаются к одной и той же точке, которая не хочу :(Как я могу решить эту проблему в R?

cities_num=10 
    cor.matrix=matrix(0,nrow=cities_num,ncol=2) 
    for (r in 1:cities_num){ 
    cor.matrix[r,]=c(sample(1:500, 1),sample(1:500, 1))} 
    par(mar=c(4,4,2,4)) 
    plot(cor.matrix,pch=4,xlab="X coordinate",ylab="Y coordinate") 
    centroid.x=mean(cor.matrix[,1]) 
    centroid.y=mean(cor.matrix[,2]) 
    bead_num=cities_num+20 
    t=seq(0,pi*2,length=bead_num) 
    coords=t(rbind(centroid.x+sin(t)*10, centroid.y+cos(t)*10)) 
    for (point in 1:bead_num){ 
    symbols(x=coords[,1][point],y=coords[,2][point],circles=0.5, 
      inches = FALSE, add = TRUE) 
    } 
+1

могли бы вы предоставить формат данных, чтобы мы могли что-то сработать? – CephBirk

+1

Привет, я просто включил свой код :) В принципе, я хочу, чтобы все точки символов соединялись линиями. – cchau

ответ

0

Не уверен, что такая «точка символа» является и там, казалось, было слишком много неопределенных объектов в вашем коде, так что я сделал свой собственный набор «точек» Если только регулярная точка, то используйте polygon:.

dat <- data.frame(s=sin(seq(pi,-pi,length=25)), 
        c=cos(seq(pi,-pi,length=25))) 
png(); 
    plot(0,0, xlim=c(-1.5,1.5),ylim=c(-1.5,1.5)); 
     with(dat, points(s,c)); 
     with(dat, polygon(s,c)) 
dev.off() 

enter image description here

+0

Привет, спасибо за ответ ур. Координаты xy для моих очков будут время от времени двигаться, и в конце он не будет хорошим кругом. Причина, по которой я использую символ() для построения графика, потому что под ним есть диаграмма рассеяния (черные точки на рисунке выше). Будет ли полигон() работать в этом сценарии? – cchau

+0

Нет причин, по которым полигон должен быть правильным многоугольником. Это может быть так же нерегулярно, как вам нравится. Я думал, что вам нужны связи между точками, и у вас уже есть успех с символами. –

Смежные вопросы