Python 使用matplotlib和markevery在特定点放置标记时出错

Python 使用matplotlib和markevery在特定点放置标记时出错,python,numpy,matplotlib,Python,Numpy,Matplotlib,我想在特定点的直线上放置标记。我有一个正确/错误的列表,上面列出了x轴上需要标记的位置。以下是我正在使用的代码片段: markers_on = list(compress(self.x, self.titanic1)) a0.plot(self.x, self.nya, marker='v', markevery=markers_on) self.titanic1是布尔值列表,self.x是x轴值列表,self.nya是y值列表。我收到以下错误消息 有趣的是,错误消息中的列表是正确的,这些是

我想在特定点的直线上放置标记。我有一个正确/错误的列表,上面列出了x轴上需要标记的位置。以下是我正在使用的代码片段:

markers_on = list(compress(self.x, self.titanic1))
a0.plot(self.x, self.nya, marker='v', markevery=markers_on)
self.titanic1是布尔值列表,self.x是x轴值列表,self.nya是y值列表。我收到以下错误消息

有趣的是,错误消息中的列表是正确的,这些是标记的正确x轴值。有人知道这个消息的意思吗?markevery文档明确表示它将获取一个整数列表

markevery   [None | int | length-2 tuple of int | slice | list/array of int | float | length-2 tuple of float]

所以,我想出了一个办法,只画标记。(我在前面绘制了这条线。)


但我仍然想知道,如果有人有线索或线索,错误消息意味着什么

如果提供给
markevery
的列表是一个整数列表,则它被解释为要标记的值的索引列表

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0,1,0.2)
y = np.random.rand(len(x))

boolean= [True, False, False, True, True]
mark = list(np.arange(len(x))[boolean])

plt.plot(x,y, marker="o", markevery=mark)

plt.show()
但是,请注意,您可以直接向
markevery

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0,1,0.2)
y = np.random.rand(len(x))

boolean= [True, False, False, True, True]

plt.plot(x,y, marker="o", markevery=boolean)

plt.show()

compress
的目的是什么?compress会将匹配的self.titanic值为真的x值剥离出来。您可以在错误消息中看到生成的列表。这是因为它专门抱怨花式索引。列表不支持这一点(除非它是一个全面的错误),所以我想知道,如果它显然可以将列表作为输入,为什么会出现这样的错误。
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0,1,0.2)
y = np.random.rand(len(x))

boolean= [True, False, False, True, True]

plt.plot(x,y, marker="o", markevery=boolean)

plt.show()