MATLAB Answers

Figure does not show on the plot

11 views (last 30 days)
Mikkel on 21 Apr 2015
Commented: Adam on 21 Apr 2015
I have this function that plots the position of two boats as they are on a collision course. I want to add a small figure with a set time in between to illustrate the bearing of the vessels, and to make a comparison in time, and not only in space. I have the following function, and it makes the first vessel, (currently only one of them) but none of the next ones show up. For testing perpose i want the rest of the vessels to be angled 45deg.
The question Why does it only plot the first boat, and How do I make it shot the rest?
function Copy_of_plot_2_boats(x_V,y_V,x_O,y_O)
close all
hold on
% vessel
Yvessel = [ 4 ; 6 ; 6 ; 5 ; 0 ; -5 ; -6 ; -6 ; -4];
Xvessel = [ -4 ; 0 ; 6 ; 10 ; 17 ; 10 ; 6 ; 0 ; -4];
% Data
x1 = squeeze(x_V);
y1 = squeeze(y_V);
N1 = NaN(size(x1));
x2 = squeeze(x_O);
y2 = squeeze(y_O);
N2 = NaN(size(x2));
% Create the line and get its X and Y data
h1 = plot(N1, N1);
h2 = plot(N2, N2);
xdata1 = get(h1, 'XData');
ydata1 = get(h1, 'YData');
xdata2 = get(h2, 'XData');
ydata2 = get(h2, 'YData');
for k = 1:length(x1)
xdata1(k) = x1(k);
ydata1(k) = y1(k);
xdata2(k) = x2(k);
ydata2(k) = y2(k);
% Update the plot
set(h1, 'XData', xdata1, 'YData', ydata1, 'Color', 'red');
set(h2, 'XData', xdata2, 'YData', ydata2, 'Color', 'blue');
xdata1(1) = x1(1);
ydata1(1) = y1(1);
xdata2(1) = x2(1);
ydata2(1) = y2(1);
hndlList(1)= fill(Xvessel,Yvessel,'y','LineWidth',1);
for k = 100:200:length(x1)
xdata1(k) = x1(k);
ydata1(k) = y1(k);
xdata2(k) = x2(k);
ydata2(k) = y2(k);
% draw vessel hull
[PosXvessel,PosYvessel] = rot(Xvessel,Yvessel, 45);
PosXvessel = PosXvessel + xdata1(k);
PosYvessel = PosYvessel + ydata1(k);
% plot(xdata1(k),ydata1(k),'ro','MarkerSize',7)
% plot(xdata2(k),ydata2(k),'bo','MarkerSize',7)
function [PosX,PosY] = rot(X,Y,angle)
dim = size(X,1);
Mrot = [ cos(angle) -sin(angle) ;
sin(angle) cos(angle) ];
for i=1:dim
Pos_i = Mrot * [ X(i,1) ; Y(i,1) ];
PosX(i,1) = Pos_i(1,1);
PosY(i,1) = Pos_i(2,1);


Sign in to comment.

Answers (1)

Adam on 21 Apr 2015
doc hold
I would strongly recommend using explcit axes handles, but simply
hold on
will cause the next plot to add to the previous on teh current axes rather than replace it.


Mikkel on 21 Apr 2015
"hold on" is on from the 4th line?
How would using explicit axes handles change the functionality of the function?
Mikkel on 21 Apr 2015
Sorry, It turned out to be a question of assigning the wrong variable. Proving once again than asking for help alone can solve the problem...
Adam on 21 Apr 2015
Ah sorry, I missed that call on the 4th line. I usually put my hold instruction after the first plot instruction so I guess I was naturally looking around there!
hold( hAxes, 'on' )
would use an explcit axes handle, hAxes. It shouldn't change the functionality, but makes it more robust than just assuming the current axes is the correct one rather than the user happening to click on some other figure in the middle of the function running.

Sign in to comment.


Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!