Discover MakerZone

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

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

How do we plot a graph with non available values for y without breaking the continuity?

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

0 Comments

Emerson De Souza

Tags

Products

2 Answers

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.

0 Comments

Matt Tearle
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)))=[]

2 Comments

Matt Tearle on 25 Oct 2012

idx = ~isnan(y);

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

Azzi Abdelmalek

Contact us