How to dim line on plot?
18 views (last 30 days)
Show older comments
I have the following code which animates a particle. When the particle is about to run off the plot's window, the code sends the particle back into the plot window on the opposite side. This ends up creating a bunch of lines across the window. I don't want to entirely get rid of any of the lines, but I do want to find a way to dim the existing lines after the particle reenters the window on the opposite side. So once the particle reenters, the existing lines either dim or they could change color. Is this possible?
clear;
clc;
numMoves = 500;
x_List = zeros(numMoves,1);
y_List = zeros(numMoves,1);
th_List = zeros(numMoves,1);
xstep = 1.9;
ystep = 0.9;
xdiff = 0.0;
ydiff = 0.0;
% Make fig. and start the loop:
figure;
hold;
for t = 2:numMoves
% each iteration, add a rand val between -1 and 1,
% and save new x & y coordinates
th_list(t) = th_List(t-1) + 1*(rand()-0.5);
x_List(t) = x_List(t-1) + xdiff*2*(rand()-0.5) + xstep*cos(th_list(t));
y_List(t) = y_List(t-1) + ydiff*2*(rand()-0.5) + ystep*sin(th_list(t));
x_List(t) = x_List(t-1) + xdiff*2*(rand()-0.5) + xstep*cos(th_list(t));
y_List(t) = y_List(t-1) + ydiff*2*(rand()-0.5) + ystep*sin(th_list(t));
% animate the particle:
cla
plot(x_List(1:t),y_List(1:t),'-r')
plot(x_List(1:t),y_List(1:t),'-k')
quiver (x_List(t), y_List(t), cos(th_list(t)), sin(th_list(t)),50)
quiver (x_List(t), y_List(t), cos(th_list(t)), sin(th_list(t)),50)
if x_List(t) > 500
x_List(t) = x_List(t) - 1000;
elseif x_List(t) < -500
x_List(t) = x_List(t) + 1000;
elseif y_List (t) > 500
y_List(t) = y_List(t) - 1000;
elseif y_List(t) < -500
y_List(t) = y_List(t) + 1000;
end
axis([-500 500 -500 500]) %this sets the plot size
pause(0.03)
end
0 Comments
Answers (2)
Star Strider
on 13 Dec 2016
It is difficult to follow your code even when I run it. The ‘line’ properties do not include an ‘alpha’ (transparency) property, so I would define a different colour for the second plot. Here, I define the colour as a light gray.
Example:
x = linspace(0,2*pi,5000);
y1 = sin(5*x);
y2 = cos(5*x);
gray = [0.7 0.7 0.7];
figure(10)
plot(x, y1, 'Color',gray)
hold on
plot(x,y2,'-k')
hold off
grid
1 Comment
Star Strider
on 1 Aug 2023
There is a line transparency property and to set it, add it as the fourth element of the 'Color' property —
x = 0:0.01:1;
y = sin(2*pi*x);
figure
hp = plot(x, y, 'LineWidth',3);
hp.Color = [1 0 1];
grid
title('Original')
figure
hp = plot(x, y, 'LineWidth',3);
hp.Color = [1 0 1 0.25];
grid
title('Original With \alpha = 0.25')
I learned about it (an undocumented property) several years after posting this.
.
Cyriaque Guillot
on 1 Aug 2023
Edited: Voss
on 1 Aug 2023
You can actually change the alpha parameter of the line. You need to create a [1x4] matrix that contains the parameters [red, green, blue, alpha] all between 0 and 1. If I retrieve Star Strider's code, I would have:
clear, close all
clc
x = linspace(0,2*pi,5000);
y1 = sin(5*x);
y2 = cos(5*x);
gray = [0.7, 0.7, 0.7, 0.75];
figure(10)
plot(x, y1, 'Color',gray)
hold on
plot(x,y2,'-k')
hold off
grid
In that case, there is only 75% of the light that will be ploted for the first line.
Hope it'll help some of you
0 Comments
See Also
Categories
Find more on Vector Fields 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!

