Python 如何在matplotlib中高亮显示线集合

Python 如何在matplotlib中高亮显示线集合,python,matplotlib,plot,Python,Matplotlib,Plot,我试图使用mpldatacursormodule()高亮显示matplotlib中的行。我找到了一些例子来突出线条。在本例中,线是一条一条地绘制的。在下面的代码中,我想使用line collection绘制线条,因为要绘制的线条太多了 但是当我运行代码并单击一行时,它不会高亮显示它。请纠正我的错误,非常感谢 import matplotlib.pyplot as plt from matplotlib.collections import LineCollection import mpldat

我试图使用mpldatacursormodule()高亮显示matplotlib中的行。我找到了一些例子来突出线条。在本例中,线是一条一条地绘制的。在下面的代码中,我想使用line collection绘制线条,因为要绘制的线条太多了

但是当我运行代码并单击一行时,它不会高亮显示它。请纠正我的错误,非常感谢

import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection
import mpldatacursor

if __name__ == '__main__':
fig, ax = plt.subplots()        
xlist = [[(0.21, 0.50), (0.42, 0.80)], [(0.13, 0.62), (0.46, 0.77), (0.81, 0.90)], [(0.32, 0.12), (0.64, 0.80)], [(0.54, 0.20), (0.87, 0.80)]]

lineCollection = LineCollection(xlist)
lines = ax.lines
mpldatacursor.HighlightingDataCursor(lines)
ax.add_collection(lineCollection)

plt.show()

您可以在pick_事件处理程序中获取行的索引,并更改颜色:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection

fig, ax = plt.subplots()        
xlist = [[(0.21, 0.50), (0.42, 0.80)], [(0.13, 0.62), (0.46, 0.77), (0.81, 0.90)],
         [(0.32, 0.12), (0.64, 0.80)], [(0.54, 0.20), (0.87, 0.80)]]

normal_selected_color = np.array([[0, 0, 1, 1.0], [1, 0, 0, 1.0]])
selected = np.zeros(len(xlist), dtype=int)
colors = normal_selected_color[selected]
lines = LineCollection(xlist, pickradius=10, colors=colors)
lines.set_picker(True)

ax.add_collection(lines)

def on_pick(evt):
    if evt.artist is lines:
        ind = evt.ind[0]
        selected[ind] = 1 - selected[ind]
        lines.set_color(normal_selected_color[selected])
        fig.canvas.draw_idle()


fig.canvas.mpl_connect("pick_event", on_pick)
plt.show()
要仅选择一行,请执行以下操作:

def on_pick(evt):
    if evt.artist is lines:
        ind = evt.ind[0]
        selected[:] = 0
        selected[ind] = 1
        lines.set_color(normal_selected_color[selected])
        fig.canvas.draw_idle()

非常感谢你的回答,它解决了我的问题。此当前解决方案选择我单击的一行,而不取消选择前面的行。也许,您有没有建议在选择新行时如何取消选择以前的行?非常感谢。回答得好。我开始使用它,但不幸的是,没有标签属性来标识行!