745 views (last 30 days)

I am plotting the x,y position of a point over time. I have the data in two vectors, xpos and ypos, and I plot the path of this point using plot(xpos,ypos).

I would like to have this line change color gradually, representing the time axis ( or the index of the x, y vectors).

Is there an easy way to do this?

Matt Fig
on 8 Apr 2011

This is one of the classic 'tricks' of MATLAB graphics.

x = 0:.05:2*pi;

y = sin(x);

z = zeros(size(x));

col = x; % This is the color, vary with x in this case.

surface([x;x],[y;y],[z;z],[col;col],...

'facecol','no',...

'edgecol','interp',...

'linew',2);

EDIT

Changed edgecolor to interp and linewidth to 2. This looks less ragged on my machine.

Jasmeet Singh
on 10 Aug 2016

The above method is giving the following warning for me:

Warning: Error creating or updating Surface Error in value of property ZData Array is wrong shape or size

My x values are real positive numbers but y values include both -Inf and NaN. Do I have to get rid of these non-finite values before plotting or the problem is something else?

Daniel Refy
on 7 Mar 2015

N=1 numel(data(:,1)) for a=1:N:numel(data(:,1))-N plot(data(a:a+N,1),data(a:a+N,2),'.','Color',[(a/numel(data(:,1))),0,0] ) hold on end

this will change color of the line from black to red

Paulo Silva
on 8 Apr 2011

Something similar to this:

plot(xpos(1:10),ypos(1:10)) %first points in blue

plot(xpos(11:20),ypos(11:20),'g') %green ones

plot(xpos(21:end),ypos(21:end),'r') %final points in red

another way, the hold all function makes the plots with different color (until the list of available colors ends and after it start from the first one again)

clf

hold all

plot(xpos(1:10),ypos(1:10))

plot(xpos(11:20),ypos(11:20))

plot(xpos(21:31),ypos(21:31))

... %more plots until the end of the indexes

You can insert the code inside a for loop

clf

hold all

N=7; %every N points change color

for a=1:N:numel(xpos)-N

plot(xpos(a:a+N),ypos(a:a+N))

end

Paulo Silva
on 8 Apr 2011

You can change the order of the colors and give the impression of it being continously.

axes

MyColorOrder=get(gca,'ColorOrder'); %RGB combinations per row

%make your own color order, you can even add more row (more possible colors)

set(gca,'ColorOrder',MyColorOrder); %RGB combinations per row

hold all

N=7; %every N points change color

for a=1:N:numel(xpos)-N

plot(xpos(a:a+N),ypos(a:a+N))

end

Opportunities for recent engineering grads.

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

Start Hunting!
## 1 Comment

## Direct link to this comment

https://in.mathworks.com/matlabcentral/answers/5042-how-do-i-vary-color-along-a-2d-line#comment_195510

⋮## Direct link to this comment

https://in.mathworks.com/matlabcentral/answers/5042-how-do-i-vary-color-along-a-2d-line#comment_195510

Sign in to comment.