Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Connecting final and initial point in simple x-y plot (Plotting closed curve/polygon)

Say, for example, I had ...

x = [1 1 2 2];
y = [1 2 2 1];
plot(x, y, 'b-');

I will get a plot with lines connecting the points (1,1), (1,2), and (2,2). Is there any way to connect the final point with the first, thus completing the square on the plot?

I'm also pulling in lines of text with points, so simply adding another point 1,1 is not an option.

like image 462
trextomcat Avatar asked Dec 17 '11 13:12

trextomcat


3 Answers

impoly can be useful, however, it creates a modifiable curve which is slower than plot.

You can write a simple function for that:

function plotc(x,y,varargin)  
    x = [x(:) ; x(1)];   
    y = [y(:) ; y(1)];  
    plot(x,y,varargin{:})  
end

By the way, the (:) colon operator is used as defensive programming means. In this way, x and y can be either row or column vectors.

The varargin allows using additional parameters, like:

 plotc(x,y,'Color','r');
 plotc(x,y,'Parent',a,'LineWidth',2);
like image 123
Andrey Rubshtein Avatar answered Oct 22 '22 01:10

Andrey Rubshtein


Unless your final and last points are the same then plot won't know that you want a closed curve. So either add an additional point to your list to plot or try using, for example, rectangle.

like image 20
Chris Avatar answered Oct 22 '22 03:10

Chris


Do you have the Image Processing Toolbox? If yes,

 impoly(hparent, position, 'Closed')

might be of use to you.

http://www.mathworks.de/help/toolbox/images/ref/impoly.html

like image 2
Tobias Avatar answered Oct 22 '22 03:10

Tobias