在Matlab中将一个subplot绘制在另一个subplot之上

3

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

例如,如果我:

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

我希望能在原来的0:200线上,在每个plotpts处绘制一个较小的图形。
我知道可以使用“hold on”并在其上面进行绘制,但是我需要每次更改我的起点。有人有什么建议吗?我真的想留在matlab中。谢谢!

你能详细说明一下“在我的每个plotpts上都有一个较小的图形”吗? - YYC
例如,在plot(plotpts(1))处绘制正弦波。对于plotpts的每个元素,就像使用黑色plot作为较小前景plot的背景一样。 - St-Ste-Ste-Stephen
3个回答

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

这是一项相当繁重的工作,但您可能想要使用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')

0

命令subplot不是你要找的吗?


不行,除非我可以直接在另一个图表上添加子图。并且在该图表内容的确切点上(即当x = 某个数字时)。 - St-Ste-Ste-Stephen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接