<p>约翰,你救了我一天。。。如果使用pyqt5,则需要进行少量校正</p>
<pre><code> sc.axes.broken_barh([(h[0][xc]["start"],h[0][xc]["interval"])], (h[0][xc]["id"], 0.5), facecolors =(u))
annot = sc.axes.annotate(str(h[0][xc]["interval"]), xy=(h[0][xc]["start"],h[0][xc]["id"]), xytext=(20, 30), textcoords="offset points",
bbox=dict(boxstyle="round", fc="yellow", ec="b", lw=2),
arrowprops=dict(arrowstyle="->"))
annot.set_visible(False)
def update_annot(brokenbar_collection, coll_id, ind, x, y):
annot.xy = (x, y)
box = brokenbar_collection.get_paths()[ind].get_extents()
text = f"{sc.axes.get_yticklabels()[coll_id].get_text()} index:{ind} duration:{box.x1 - box.x0:.0f} "
annot.set_text(text)
annot.get_bbox_patch().set_alpha(0.9)
def hover(event):
vis = annot.get_visible()
print("####",sc.axes.collections)
print("###",event.inaxes)
if event.inaxes == sc.axes:
print
for coll_id, brokenbar_collection in enumerate(sc.axes.collections):
cont, ind = brokenbar_collection.contains(event)
if cont:
update_annot(brokenbar_collection, coll_id, ind['ind'][0], event.xdata, event.ydata)
annot.set_visible(True)
sc.figure.canvas.draw_idle()
return
if vis:
annot.set_visible(False)
sc.figure.canvas.draw_idle()
sc.figure.canvas.mpl_connect("motion_notify_event", hover)
</code></pre>