画两个子图之间的线

时间:2010-09-03 11:49:29

标签: matlab

我有两个2×n阵列,代表2d点。这两个数组绘制在同一图中,但是在两个不同的子图中。对于其中一个数组中的每个点,在另一个数组中存在相应的点。我想通过从一个子图中绘制一条线到另一个子图来显示这种对应关系。

我找到的解决方案如下:

 ah=axes('position',[.2,.2,.6,.6],'visible','off'); % <- select your pos...
 line([.1,.9],[.1,.9],'parent',ah,'linewidth',5);

这绘制了轴调用给出的坐标系中的一条线。为了使这对我有用,我需要一种方法来改变子图系统和新系统之间的坐标系。有谁知道如何做到这一点?

也许有不同的方式这样做。如果是这样,我很想知道。

2 个答案:

答案 0 :(得分:8)

首先,您必须将轴坐标转换为图形坐标。然后,您可以使用ANNOTATION函数在图中绘制线条。

您可以在FileExchange上使用Data space to figure units conversion (ds2nfu)提交。

这是一个代码示例:

% two 2x5 arrays with random data
a1 = rand(2,5);
a2 = rand(2,5);

% two subplots
subplot(211)
scatter(a1(1,:),a1(2,:))
% Convert axes coordinates to figure coordinates for 1st axes
[xa1 ya1] = ds2nfu(a1(1,:),a1(2,:));


subplot(212)
scatter(a2(1,:),a2(2,:))
% Convert axes coordinates to figure coordinates for 2nd axes
[xa2 ya2] = ds2nfu(a2(1,:),a2(2,:));

% draw the lines
for k=1:numel(xa1)
    annotation('line',[xa1(k) xa2(k)],[ya1(k) ya2(k)],'color','r');
end

确保您的数据阵列大小相等。

编辑:上面的代码将对当前轴进行数据转换。您也可以针对特定轴执行此操作:

hAx1 = subplot(211);
% ...
[xa1 ya1] = ds2nfu(hAx1, a1(1,:),a1(2,:));

答案 1 :(得分:-2)

一个简单的解决方案是使用图窗口中的工具栏。只需单击“插入”,然后单击“行”。