multiple plots from array without loop

9 views (last 30 days)
Tommy B
Tommy B on 2 Dec 2016
Answered: Tommy B on 2 Dec 2016
Hi all
I have an array (X) holding lets say 20 cycles of data. I would like to plot the entire 20 cycles as a dashed line plot, and then markup (with a solid line) specific segments of the graph, the start and end indexes are in two different vectors S1 and S2. Would it be possible to do something like this:
plot(X,'k--');
hold on;
plot(X([S1:S2]),'r');
instead of using a loop as:
plot(X,'k--');
for i=1:length(S1)
plot(X(S1(i):S2(i),r,)
end
The only reason is I would like to avoid loops in my code, as I am plotting several graph segments within my code, and then having 30 for loops does not look good :)
Best, Tommy
  2 Comments
KSSV
KSSV on 2 Dec 2016
This will work:
plot(X,'k--');
hold on;
plot(X([S1:S2]),'r');
You can try on your own...why doubt?
Tommy B
Tommy B on 2 Dec 2016
Edited: Tommy B on 2 Dec 2016
Hi Well because I did try, and it did not work :/
X =[1 2 3 4 5 6 7 8 9 10];
S1=[1 4 9];
S2=[2 5 10];
plot(X,'k--');
hold on;
plot(X([S1:S2]),'r');
I want this to mark the section X= 1-2 & 4-5 & 9-10 with a red line, the rest should be dashed. With the above code it only marks the first segment in red.
Best, Tommy

Sign in to comment.

Accepted Answer

KSSV
KSSV on 2 Dec 2016
Edited: KSSV on 2 Dec 2016
I understand now...You may follow some thing like this:
X =[1 2 3 4 5 6 7 8 9 10];
S1=[1 4 9];
S2=[2 5 10];
plot(X,'k--');
hold on;
Y = NaN(size(X)) ;
Y([S1 S2]) = X([S1 S2]) ;
plot(Y,'r');
Introduce NaN's at the place you want to skip...plot will not show NaN's.

More Answers (1)

Tommy B
Tommy B on 2 Dec 2016
Yes, perfect! Thanks a lot!
Have a nice weekend.
Best, Tommy

Categories

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