突出显示 matplotlib 图中的任意点

2023-12-02

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

The markevery绘图函数的参数接受不同类型的输入。根据输入类型的不同,它们的解释也不同。找到一个不错的可能性列表这个 matplotlib 示例.

如果您有显示标记的条件,则有两种选择。假设t and y是 numpy 数组,其中一个有imported numpy as np,

  1. 要么指定布尔数组,

    plt.plot(t,y,'-gD',markevery = np.where(y > 0.5, True, False))
    

or

  1. an 索引数组.

    plt.plot(t,y,'-gD',markevery = np.arange(len(t))[y > 0.5])
    

完整示例

import matplotlib.pyplot as plt
import numpy as np; np.random.seed(42)

t = np.linspace(0,3,14)
y = np.random.rand(len(t))

plt.plot(t,y,'-gD',markevery = np.where(y > 0.5, True, False))
# or 
#plt.plot(t,y,'-gD',markevery = np.arange(len(t))[y > 0.5])

plt.xlabel('t (s)')
plt.ylabel('y')

plt.show()

导致

enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

突出显示 matplotlib 图中的任意点 的相关文章

随机推荐