绘制数据而不从前x值插值

时间:2016-09-08 07:54:54

标签: python matplotlib plot

我正在做一些粒子追踪。因此,我想绘制通过粒子的分布和累积函数。

当我绘制分布图时,我的情节总是从一个步骤开始到早期。 有没有办法将事件绘制为一种峰值,而不在x轴上进行任何插值?

附上简短的示例数据......

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()

enter image description here

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

没有插值;使用plot(.., '-'),matplotlib只需"连接点" (您提供的数据坐标)。要么不画线,要么使用标记,例如:

ax1.plot(time, counts, "o", label="Density")

或使用例如bar()绘制"峰值":

ax1.bar(time, counts, width=0.001)

编辑:绘制bar()并不理想,因为您不是绘制单独的线条,而是非常小的条形图。事实证明,matplotlib实际上具有绘制峰值的功能:stem()

ax1.stem(time, counts, label="Density")

结果是:

enter image description here