MATLAB Answers

0

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

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


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

idx = ~isnan(y);

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


Join the 15-year community celebration.

Play games and win prizes!

Learn more
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

MATLAB Academy

New to MATLAB?

Learn MATLAB today!