multiple plots from array without loop

5 Ansichten (letzte 30 Tage)
Tommy B
Tommy B am 2 Dez. 2016
Beantwortet: Tommy B am 2 Dez. 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 Kommentare
KSSV
KSSV am 2 Dez. 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 am 2 Dez. 2016
Bearbeitet: Tommy B am 2 Dez. 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

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

KSSV
KSSV am 2 Dez. 2016
Bearbeitet: KSSV am 2 Dez. 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.

Weitere Antworten (1)

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

Kategorien

Mehr zu Mathematics finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by