I cannot plot discontinuous X data.
    6 views (last 30 days)
  
       Show older comments
    
I have the data as shown below.
1.36667  105.403
1.375    105.6288
1.38333  105.8527
1.39167  106.049
11.7  88.2319
11.70833  88.1568
11.71667  88.2712
11.725  88.3003
21.26667  999
21.275  92.3620
21.28333   92.2410
21.29167  92.3133
The x axis expresses time and the y axis shows the observed data.
I try to use the code below to plot dicontinuous data.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
data = xlsread('G07.xls');
time = data(:,1);
tec  = data(:,3);
max_step = 31/3600;
segends = [find(diff(time) > max_step) length(time)]; % assume x non-decreasing
nsegs = length(segends);
plotargs = cell(3, nsegs);
segend = 0;
for segment = 1:nsegs
      segstart = segend+1;
      segend = segends(segment);
      plotargs{1,segment} = time(segstart:segend);
      plotargs{2,segment} = tec(segstart:segend);
      plotargs{3,segment} = plotstyle;
end
plot(plotargs{:});
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
This code works well only one gap data. But the data above has 2 gaps so there is an error message below.
??? Error using ==> horzcat
CAT arguments dimensions are not consistent.
Error in ==> plot_g at 7
segends = [find(diff(time) > max_step) length(time)]; % assume x non-decreasing
I don't know how to fix this problem and how to plot multiple gaps data.
Aike...
0 Comments
Answers (3)
  Walter Roberson
      
      
 on 9 Dec 2012
        An easier way to do this, is that at each point you want the break, insert a NaN in both the x and y data. Then use a single plot() call instead of a loop.
0 Comments
  Aike
 on 10 Dec 2012
        2 Comments
  Image Analyst
      
      
 on 10 Dec 2012
				What identifies a "gap"?
And what does 11,680 data points have to do with anything? As I read it you have only 1 file and the data array from that file has 11,680 rows. This is a very small amount of data and you should not worry about the size of it at all. You may think it's large, but trust me - it's not. Far from it.
  Walter Roberson
      
      
 on 10 Dec 2012
				I didn't say you should insert the NaN manually. You can insert the NaN by way of program. Doing so is easier than maintaining the segments.
  Aike
 on 10 Dec 2012
        1 Comment
  Walter Roberson
      
      
 on 10 Dec 2012
				Start with a data array. Scan backwards from the end. At each point determine whether a gap exists. If it does, insert a NaN at that point, such as
X(K:end+1) = [NaN; X(K:end)];
Y(K:end+1) = [NaN; Y(K:end)];
Keep scanning backwards until you get to the beginning of the array. Then
plot(X, Y);
Just the one plot().
Notice you have no segment arrays, and you plotted it in one statement instead of having to loop doing multiple plots for the same data set. Notice the low probability of dimension problems. Notice too that you had no need of modifying the data files.
After you have tested this out, you can consider even more efficient ways of inserting the NaN if you feel that is worth while.
See Also
Categories
				Find more on Time Series Objects 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!