我是Python和Matplotlib的新手。
我正在尝试在Matplotlib中的一个已有图表中突出显示与特定条件匹配的几个点。
初始图表的代码如下:
pl.plot(t,y)
pl.title('Damped Sine Wave with %.1f Hz frequency' % f)
pl.xlabel('t (s)')
pl.ylabel('y')
pl.grid()
pl.show()
在上面的图中,我想突出显示一些符合 abs(y)>0.5 的特定点。产生这些点的代码如下所示:
markers_on = [x for x in y if abs(x)>0.5]
我尝试使用'markevery'参数,但它会抛出一个错误,提示:
'markevery' is iterable but not a valid form of numpy fancy indexing;
出现错误的代码如下:
pl.plot(t,y,'-gD',markevery = markers_on)
pl.title('Damped Sine Wave with %.1f Hz frequency' % f)
pl.xlabel('t (s)')
pl.ylabel('y')
pl.grid()
pl.show()
markevery = np.where(y > 0.5, True, False)
抛出 ValueError: 数组的真值不明确。请使用 a.any() 或 a.all()。 使用markevery = list(np.where(y > 0.5, True, False))
可以解决这个问题。 - pfabrimarkevery = np.arange(len(t))[y > 0.5]
抛出了完全相同的错误。但是将输出作为list
传递解决了这个问题。这些错误在 Matplotlib 3.1.3 中抛出。也许自2017年首次发布此问题以来,某个地方发生了重大变化。 - pfabri