在Matlab中绘制另一个绘图顶部的子图

时间:2011-11-22 17:54:08

标签: matlab graph plot

我需要在不同的位置沿着斜线绘制几个图。

例如,如果我:

plot(0:200,'k');
plotpts = 5:5:200;

我希望能够在原始0:200行的每个绘图上绘制一个较小的绘图。

我知道你可以使用hold on并以这种方式覆盖顶部,但我每次都需要改变我的起源。有没有人有什么建议?我真的很想留在matlab。谢谢!

3 个答案:

答案 0 :(得分:9)

这是我通常采用的灵活方式:

plot(1:10, 'k')
plotpts = 2:2:8;

mainbox = get(gca, 'Position');
xlims = get(gca, 'XLim');
ylims = get(gca, 'Ylim');

for i=1:length(plotpts)
    originx = mainbox(1) + (plotpts(i) - xlims(1)) * (mainbox(3)) / (xlims(2) - xlims(1));
    originy = mainbox(2) + (plotpts(i) - ylims(1)) * (mainbox(4)) / (ylims(2) - ylims(1));

    axes('position', [originx originy 0.1 0.1], 'Color', 'none')

    % Do some plotting here...
end

enter image description here

答案 1 :(得分:1)

这是相当多的工作,但您可能想要使用axes命令。图形窗口可以容纳任意数量的轴,每个轴都有自己的位置,数据,注释,颜色等。

您描述的应用程序最困难的事情是每个轴位置需要在底层图形的坐标系中定义,这意味着可能需要一些数学运算来创建轴在一个轴内正确定位的错觉父轴/

例如,如果您首先创建一个简单的情节

figure(1234); clf;
plot(1:10, rand(1,10),'.k-','linewidth',5);
xlim([1 10]);
ylim([0 1]);
set(gca,'color','y');  %This just helps demonstrate the next steps

您可以将另一个轴直接放在第一个轴上,然后

ha = axes('position',[.2 .3 .1 .1])
plot(linspace(0,2*pi,100), sin(linspace(0,2*pi,100)), 'b-')
xlim([0 2*pi])

您可以调整嵌入轴的属性以满足您的特定需求,例如

set(ha,'color','none');  %A transparent axis
set(ha,'xtick',[],'ytick',[]);  %Remove tick labels 
title(ha,'This is an inset plot')

答案 2 :(得分:0)

命令subplot不是您要找的吗?