Построение участка над другим участком в Matlab - PullRequest
3 голосов
/ 22 ноября 2011

Мне нужно построить несколько графиков вдоль наклонной линии в разных позициях.

Например, если I:

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

, я бы хотел иметь возможность построить меньший график вкаждый из моих сюжетов поверх оригинальной линии 0: 200.

Я знаю, что вы можете использовать hold on и строить таким образом поверх графика, но мне нужно каждый раз менять свое происхождение.У кого-нибудь есть предложения?Я действительно хотел бы остаться в Matlab.Спасибо!

Ответы [ 3 ]

9 голосов
/ 22 ноября 2011

Вот гибкий способ, которым я обычно делаю:

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 голос
/ 22 ноября 2011

Это довольно много работы, но вы, вероятно, хотите использовать команду 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 голосов
/ 22 ноября 2011

Команда субплот не то, что вы ищете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...