MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn moreOpportunities for recent engineering grads.

Apply Today**New to MATLAB?**

Asked by Emerson De Souza
on 25 Oct 2012

**INTRO:** I have an array M as below:

M= 1 4 2 NaN 3 10 4 NaN 5 NaN 6 15 7 NaN 8 17 9 59 10 NaN

**GOAL:** I want to plot the second versus the first column as follow:

M=load('M.txt'); h=plot(M(:,1),M(:,2));

**PROBLEM:** Due to the NaN, it does not plot the gaps correctly and breaks the continuity of the graph.

I wonder if someone could suggest me to some command lines that could fix this issue.

I thank you in advance for your help

Emerson

Answer by Matt Tearle
on 25 Oct 2012

Accepted answer

You can interpolate to fill the missing values, as Azzi suggests, or simply remove all the NaNs:

idx = ~isnan(M(:,2)); x = M(idx,1); y = M(idx,2); plot(x,y,'o-')

If you don't plot markers on the data points, this will look exactly the same as Azzi's solution using interpolation. The difference is whether or not you care about showing which points are actual data values.

Answer by Azzi Abdelmalek
on 25 Oct 2012

Edited by Azzi Abdelmalek
on 25 Oct 2012

Use interpolation

x=M(:,1); y=M(:,2); idx=find(~isnan(y)) y=interp1(x(idx),y(idx),x,'linear')

or remove rows containing nan

x=M(:,1); y=M(:,2); x(find(isnan(y)))=[] y(find(isnan(y)))=[]

Matt Tearle
on 25 Oct 2012

idx = ~isnan(y);

No need for the `find`. (Sorry, I love logical indexing!)

## 0 Comments