我制作了10分的情节
10 10
248,628959661970 66,9462583977501
451,638770451973 939,398361884535
227,712826026548 18,1775336366957
804,449583613070 683,838613746355
986,104241895970 783,736480083219
29,9919502693899 534,137567882728
535,664190667238 885,359450931142
87,0772199008924 899,004898906140
990 990
第一列为x坐标,另一列为y坐标
通向以下情节:
使用以下代码:scatter(Problem.Points(:,1),Problem.Points(:,2),'.b')
然后我还使用Problem.DistanceMatrix = pdist(Problem.Points);
Problem.DistanceMatrix = squareform(Problem.DistanceMatrix);
当它们大于某个值时,我将距离替换为1 * 10 ^ 6。 这导致下表:
然后,我想绘制相应点之间的线,最好是它们的距离,但仅限于距离<1的情况。 1 * 10 ^ 6。
具体来说,我想绘制线[1,2] [1,4] [1,7] [2,4]等。
我的问题是,可以这样做吗?
答案 0 :(得分:2)
假设您的一组数据位于xdata
中,而另一组位于ydata
中,然后是distances
中的距离,则以下代码应该可以达到您想要的效果。
hold on
for k = 1:length(xdata)
for j = 1:length(ydata)
if(distances(k,j) < 1e6)
plot([xdata(k) xdata(j)], [ydata(k) ydata(j)]);
end
end
end
您只需迭代矩阵,然后如果该值小于1e6,则绘制第k个和第j个索引点之间的直线。然而,这将绘制双线图,因此它将从k到j以及从j到k进行绘图,但编码速度快且易于理解。我得到了以下情节。
答案 1 :(得分:1)
这应该可以解决问题:
P = [
10.0000000000000 10.0000000000000;
248.6289596619700 66.9462583977501;
451.6387704519730 939.3983618845350;
227.7128260265480 18.1775336366957;
804.4495836130700 683.8386137463550;
986.1042418959700 783.7364800832190;
29.9919502693899 534.1375678827280;
535.6641906672380 885.3594509311420;
87.0772199008924 899.0048989061400;
990.0000000000000 990.0000000000000
];
P_len = size(P,1);
D = squareform(pdist(P));
D(D > 600) = 1e6;
scatter(P(:,1),P(:,2),'*b');
hold on;
for i = 1:P_len
pi = P(i,:);
for j = 1:P_len
pj = P(j,:);
d = D(i,j);
if ((d > 0) && (d < 1e6))
plot([pi(1) pj(1)],[pi(2) pj(2)],'-r');
end
end
end
hold off;
最终输出:
在旁注中,只需插入,就可以避免使用600
替换距离值以超过某个阈值(通过查看距离矩阵看起来像1e6
)的部分。该阈值进入循环以绘制线条。我的意思是......这没错,但我认为这是不必要的一步。
D = squareform(pdist(P));
% ...
if ((d > 0) && (d < 600))
plot([pi(1) pj(1)],[pi(2) pj(2)],'-r');
end
答案 2 :(得分:0)
我的一位朋友建议使用gplot
gplot(Problem.AdjM, Problem.Points(:,:), '-o')
将problem.points作为坐标,将Problem.AdjM作为邻接矩阵。 Adjacency矩阵的生成如下:
Problem.AdjM=Problem.DistanceMatrix;
Problem.AdjM(Problem.AdjM==1000000)=0;
Problem.AdjM(Problem.AdjM>0)=1;
由于1 * 10 ^ 6的距离代替了一个太大的距离,我将邻接区域设置为0,将所有其他区域设置为1。
这导致了以下情节,这或多或少是我想要的:
既然你们一直以这么好的方式帮助我,我只想补充一下:
我将J. Mel的解决方案添加到我的代码中,导致两个完全相同的数字:
由于数字得出相同的结果,两种方法都应该是正确的。此外,由于Tommasso和J Mel的成绩较早,Tommasso的代码也必须正确。
非常感谢你和所有其他人的贡献!