Why an annotation is plotted in a different position when the script is run as a whole than when running parts of it separately?
Show older comments
When I run a more detailed script as a whole, with the same structure as:
%%%% BLOCK 1
figure();
set(gcf, 'units','normalized','outerposition',[0 0 1 1]); % Maximize figure.
for j=1:3
subplot(4,3,c(j))
for cv = 1:11
plot()
end
subplot(4,3,c(j)+3)
for cv = 1:11
plot()
end
subplot(4,3,c(j)+3)
for cv = 1:11
plot()
end
subplot(4,3,c(j)+6)
for cv = 1:11
plot()
end
subplot(4,3,c(j)+9)
for cv = 1:11
plot()
end
end
subplot(4,3,1); ylabel(
subplot(4,3,2); title(
subplot(4,3,3); title(
subplot(4,3,4); yyaxis left; ylabel(
legend([p(1),p(23),p(12)],{
subplot(4,3,7); ylabel(
subplot(4,3,10); ylabel(
subplot(4,3,11); xlabel(
subplot(4,3,12); xlabel(
%Additional Annotations and text
subplot(4,3,7); sp=get(gca,'Position');
text(
annotation ('arrow',
annotation('line',
subplot(4,3,8);
text(
annotation ('arrow',
annotation('line',
subplot(4,3,9);
text(
annotation ('arrow',
annotation('line',
subplot(4,3,10); sp=get(gca,'Position');
text(
annotation ('arrow',
subplot(4,3,11);
text(
annotation ('arrow',
subplot(4,3,12);
text(
annotation ('arrow', .. ); annotation('line', .. );
%%% BLOCK 2
ax = subplot(4,3,2);
h=findobj(ax,'Type','text','String','ON'); set(h(2), 'Color', [0 1 0])
sp = get(ax, 'position'); %[Ax_xpos, Ax_ypos, Ax_width, Ax_height]
xscale = get(ax, 'xlim' ); %[xmin, xmax]
yscale = get(ax, 'ylim'); %[ymin, ymax]
X_norm = (h(2).Position(1)-xscale(1))/(xscale(2)-xscale(1))*sp(3)+sp(1);
Y_norm = (h(2).Position(2)-yscale(1))/(yscale(2)-yscale(1))*sp(4)+sp(2);
annotation('rectangle',[X_norm sp(2)+sp(4) .1347 .0125],'FaceColor','black','FaceAlpha',1);
%%%
It produces different X_norm and Y_norm and places the rectangle annotation in a different position than if I run BLOCK 1 first and then BLOCK 2 (either by commenting out the block not needed or by copying each block in the command window). Running the script as a whole, places the rectangle in the wrong position. The code should plot the start of the rectangle at the green ON. See attachments to compare differences.
What do I need to modify so I can plot the rectangle in the correct position when running the code as a whole?
2 Comments
ErikaZ
on 11 Dec 2020
Raunak Gupta
on 19 Dec 2020
Edited: Raunak Gupta
on 19 Dec 2020
Hi,
The code given in the question looks to have lot of missing parts. It will be helpful for reproducing the issue, if you can add the code which atleast plot the subplots and corresponding axes even if the data is not plotted. Also please mention which MATLAB Release you are using.
Accepted Answer
More Answers (0)
Categories
Find more on Creating, Deleting, and Querying Graphics Objects in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!