How can I change the line color in an 'animatedline' plot in a manner that scales with one of the variables?

52 views (last 30 days)
I'm using the code below to animate a line for the purpose of a presentation. It seems that the 'animatedline' function doesn't support the option of changing color over the course of the plot (e.g., in a manner that scales with X, Y or Z). It seems that the 'patch' function supports this, and I'm wondering if there's a way to do something similar with 'animatedline'? Any help from the Matlab experts?
%X, Y and Z were emperically determined from a separate analysis, and are pre-assigned
view([-12 34])
curve = animatedline('Color','r','LineWidth',3);
numpoints = size(x)
ax = gca;
axTickDir = 'out'
ax.FontSize = 11;
ax.XLim = [0 11];
ax.YLim = [1 5];
ax.ZLim = [1.5 3]
for k=1:numpoints
addpoints(curve,x(k),y(k),z(k));
pause(0.05)
M(k) = getframe(gcf);
end
drawnow

Accepted Answer

Adam Danz
Adam Danz on 24 Jan 2021
There are other ways to create animation.
You can segement the line and conrol the color of each segment (see "segmentation demo" in this answer).
To animate it, plot it within a loop that iteratively adds each segment.
hold on
for i = 1:number_of_segments
plot(x_segment,y_segment,'-','color', RGB_segment)
drawnow()
pause(.1) % to slow it down, if needed
end
If you get stuck, show what you tried and I'd be glad to work out the kinks.
Alternatively, you could use some undocumented approaches to changing line color of a line object. See Yair's blog post below. https://undocumentedmatlab.com/matlab/wp-content/cache/all/articles/plot-line-transparency-and-color-gradient/index.html
  4 Comments
Steven Markus
Steven Markus on 25 Jan 2021
This is great! Is there a way I can display the colors as a consequence of a Z value? In other words, keep the plot as 2D (X vs Y), but use Z for color.
Alternatively, could I somehow animate a colored plot in 3 dimensions (X, Y and Z)?
Adam Danz
Adam Danz on 25 Jan 2021
Edited: Adam Danz on 4 Aug 2022
Happy to hear that it works for you.
You could do either of our options. Animation in 3D requires a very easy change to the existing code. Use plot3() instead of plot() and include the z-coordinate.
To use the z-value to define color, you need to make a colormap and use the z values to select the color. That will requiring mapping the z values on to the row indicies of a colormap.
For example,
cmap = jet(256); % number of rows doesnt' matter
% assuming z is a vector
zScaled = round((z-min(z))/range(z)*(size(cmap,1)-1))+1;
% zScaled are integers that span from 1 to the number of colors
% in your colormpa (cmap). They can be used to define the color
% of each segment.
% Example:
for i = 1:n
plot(x, y, '-','color', cmap(zScaled(i),:))
end

Sign in to comment.

More Answers (0)

Categories

Find more on Animation 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!