16 views (last 30 days)

Joseph Cheng
on 12 Aug 2014

from what you described you don't really need a for loop to implement it. here is a solution to get away from a for loop

%my attempt to make something i think you're plotting.

%something like a Hysteresis curve.

y = [0 8 12 8 0 -8 -12 -8 0];

x = [2 10 10 8 -2 -10 -10 -8 2];

figure,plot(x,y)

%find which segments are heating and cooling or staying the same.

dx = diff(x); %takes x(n+1)-x(n)

heating = dx>0; %positive dx

steady = dx ==0; %0 dx (temp values didn't change)

cooling = dx<0; %negative dx.

plotSegmentX = [x(1:end-1);x(2:end)]; %pair the segments up.

plotSegmentY = [y(1:end-1);y(2:end)]; %pair the segments up.

%plot only the heating segments and color them red. then plot only the cooling etc.

figure,plot(plotSegmentX(:,heating),plotSegmentY(:,heating),'r',...

plotSegmentX(:,cooling),plotSegmentY(:,cooling),'b',...

plotSegmentX(:,steady),plotSegmentY(:,steady),'g')

xlim([-14 14]);ylim([-12 12])

Joseph Cheng
on 13 Aug 2014

What i can see it is because of how i defined my x and y and your x and y. my xy values are 1xN and yours is Nx1. so when i did the plotsegmentX and Y we needed it to be 2x(N-1). So with the code i would change it to be:

plotSegmentX = [x(1:end-1) x(2:end)]'; %pair the segments up.

plotSegmentY = [y(1:end-1) y(2:end)]'; %pair the segments up.

that should work with your x and y. That way when the plot function is called it plots the first column of plotSegmentX and first column of plotSegmentY together (etc down the rest of the columns.).

Sign in to comment.

Sign in to answer this question.

Opportunities for recent engineering grads.

Apply Today
## 1 Comment

## Direct link to this comment

https://fr.mathworks.com/matlabcentral/answers/147331-change-plot-color-for-increasing-or-decreasing-x-values#comment_231109

⋮## Direct link to this comment

https://fr.mathworks.com/matlabcentral/answers/147331-change-plot-color-for-increasing-or-decreasing-x-values#comment_231109

Sign in to comment.