我需要在不同位置沿着一条倾斜的线绘制几个图表。
例如,如果我:
plot(0:200,'k');
plotpts = 5:5:200;
我希望能在原来的0:200线上,在每个plotpts处绘制一个较小的图形。
我知道可以使用“hold on”并在其上面进行绘制,但是我需要每次更改我的起点。有人有什么建议吗?我真的想留在matlab中。谢谢!
我需要在不同位置沿着一条倾斜的线绘制几个图表。
例如,如果我:
plot(0:200,'k');
plotpts = 5:5:200;
这是我通常采用的一种灵活的方式:
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
这是一项相当繁重的工作,但您可能想要使用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')