Reputation: 55
I am doing some particle tracking at the moment. Therefore I want to plot the distribution and the cumulative function of the passing particles.
When I plot the distribution, my plot always starts one time step to early. Is there a way to just plot the event as a kind of peak, without any interpolation on the x axis?
Short example data is attached...
time = [ 0.,1.,2.,3.,4.,5.,6.,7.,8.,9.]
counts = [0,0,1,0,2,0,0,0,1,0]
cum = [ 0.,0.,0.25,0.25,0.75,0.75,0.75,0.75,1.,1.]
ax1 = plt.subplot2grid((1,2), (0, 0), colspan=1)
ax1.plot(time, counts, "-", label="Density")
ax1.set_xlim([0,time[-1]])
ax1.legend(loc = "upper left", frameon = False)
ax1.grid()
ax2 = plt.subplot2grid((1,2), (0, 1), rowspan=1)
ax2.step(time, cum, "r",where='post', label="Sum")
ax2.legend(loc = "upper left", frameon = False)
ax2.set_ylim([-0.05,1.05])
ax2.set_xlim([0,time[-1]])
ax2.grid()
plt.suptitle("Particle distribution \n")
plt.show()
Thanks for any help!
Upvotes: 3
Views: 9432
Reputation: 10250
There is no interpolation; with plot(.., '-')
, matplotlib simply "connects the dots" (data coordinates that you provide). Either don't draw the line and use markers, e.g.:
ax1.plot(time, counts, "o", label="Density")
Or use e.g. bar()
to draw "peaks":
ax1.bar(time, counts, width=0.001)
edit: Drawing bar()
's isn't ideal, as you are not drawing individual lines, but very small bars. It turns out that matplotlib
actually has a function to draw the peaks: stem()
:
ax1.stem(time, counts, label="Density")
Which results in:
Upvotes: 4