Learner
Learner

Reputation: 1695

Connect the points to zero for missing points

I have a dataset like this,where I have a set of values for xs and I plot the corresponding line graph with the values of ys.

xs = np.array([1,2,5,6,9,10,11)
ys = pow(xs,2)
ys
plt.plot(xs, ys, linestyle='-', marker='o')


plt.show()

If you notice by default, plot connects the points and draws line. But, I want to draw the line at 0 for missing points. How do I do this ? Should I manipulate the data to fill missing values with zeros (numpy,maybe) or is there a way to plot this matplotlib.plot ?

To be precise I need to plot: xs = np.array([1,2,0,0,5,6,0,0,9,10,11,0,0,0,0]) ys = pow(xs,2) But, as of now, this is my xs=np.array([1,2,5,6,9,10,11). How do i fill the missing elements in the range 1:15. I looked at masked_array which is different. Is there any other fill option in numpy ?

Upvotes: 2

Views: 1343

Answers (2)

Jim Hunziker
Jim Hunziker

Reputation: 15380

If you aren't dealing with an integer X axis, you can do this:

xs = array([1.0,2,5,6,9,10,11])
ys = xs**2

x = arange(0, 12, 0.5)
y = zeros(x.shape)
mask = r_[diff(searchsorted(xs, x)), 0]
y[mask == 1] = ys

plt.plot(x, y, 'o', clip_on=False)

Upvotes: 0

tom10
tom10

Reputation: 69192

Since you want to plot points that aren't in your data set, it will be hard to do directly in matplotlib. But, constructing the points is easy enough using put:

xs = array([1,2,5,6,9,10,11])
ys = xs**2

x = arange(12)
y = zeros(12, dtype=int32)
put(y, xs, ys)

plt.plot(x, y, 'o', clip_on=False)

enter image description here

Upvotes: 2

Related Questions