В качестве некоторого фона я пытаюсь добавить фигуру-врезку к текущему графику.У меня есть большая часть этого сделано.Вот пример кода:
h = figure(1); %Arbitrary figure #1
plot(990000:1000000,990000:1000000,'--r');
g = figure(2); %Arbitary figure #2
plot(randn(100,1),randn(100,1),'.k');
figure(3); %Figure to combine the above two figures
new_fig=gcf;
main_fig = findobj(h,'Type','axes');
h_main = copyobj(main_fig,new_fig);
set(h_main,'Position',get(main_fig,'Position'))
inset_fig = findobj(g,'Type','axes');
h_inset = copyobj(inset_fig,new_fig);
ax=get(main_fig,'Position');
inset_size = 0.3;
X = 0.2; %Left position of inset hard-coded in
Y = 0.6; %Bottom position of inset hard-coded in
set(h_inset,'Position', [X Y inset_size inset_size])
close(h); close(g);
В приведенном выше примере кода я просто устанавливаю положение X и Y на вставке фигуры вручную как X = 0,2 и Y = 0,6.
Однако сложность, на которой я застрял, заключается в том, что я хочу, чтобы положение X и Y определялось пользователем.Я хочу, чтобы пользователь мог где-то щелкнуть по фигуре, и эта точка щелчка становится центральной точкой вставки.
К сожалению, ginput работает не совсем так, как я хочу, потому что [x, y]= ginput (1) возвращает значения x и y относительно оси фигуры.Вот пример кода:
h = figure(1); %Arbitrary figure #1
plot(990000:1000000,990000:1000000,'--r');
[x,y] = ginput(1);
Как вы можете видеть здесь, x и y будут порядка 10 ^ 5, потому что они привязаны к оси графика.Таким образом, (x, y) из ginput
не соответствует (X, Y) для установки положения фигуры.
Любые идеи, как преобразовать (x, y) в (X), Y)?
РЕДАКТИРОВАТЬ: я попытался выполнить следующее масштабирование, и оно «почти» работает, но не совсем, любые идеи о том, как улучшить, приветствуются:
h = figure(1); %Arbitrary figure #1
plot(990000:1000000,990000:1000000,'--r');
[x,y] = ginput(1);
limx = xlim;
limy = ylim;
g = figure(2); %Arbitary figure #2
plot(randn(100,1),randn(100,1),'.k');
figure(3); %Figure to combine the above two figures
new_fig=gcf;
main_fig = findobj(h,'Type','axes');
h_main = copyobj(main_fig,new_fig);
set(h_main,'Position',get(main_fig,'Position'))
inset_fig = findobj(g,'Type','axes');
h_inset = copyobj(inset_fig,new_fig);
ax=get(main_fig,'Position');
inset_size = 0.3;
% X = 0.2; %Left position of inset hard-coded in
% Y = 0.6; %Bottom position of inset hard-coded in
%CONVERT ginput (x,y) to axis position (X,Y)
X = (x-min(limx))/diff(limx)*ax(3);
Y = (y-min(limy))/diff(limy)*ax(4);
set(h_inset,'Position', [X Y inset_size inset_size])
close(h); close(g);