My goal.个 我正在使用matplotlib滑块来绘制几个系列.我想 for each 点都贴上悬停标签.每一点都对应着测量.所以我想在这些悬停标签上显示测量名称.
Question.个 如何更新新系列的标签(用于滑块位置)?如果我在UPDATE函数中创建新的游标,我会得到每个点的几个标签.所以我需要想办法先删除旧标签.我该怎么做呢?
Description.个 在第一张幻灯片上,我得到了A和B标签的分数.在第二张幻灯片上,我应该得到C和D标签,但我又得到了A和B.
My code.个
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
import mplcursors as mplc
%matplotlib widget
data = {'Name': ['A', 'B', 'C', 'D'], 'x': [1,3,3,2],'y': [4,7,5,1],'color': [1,2,3,2],'size' :[50,40,10,30],'slide': [1,1,2,2]}
df=pd.DataFrame.from_dict(data)
dff=df.loc[df['slide']==1]
z=list(set(df['slide'].to_list()))
x = dff['x'].to_list()
y = dff['y'].to_list()
lbl=dff['Name'].to_list()
fig, ax = plt.subplots()
ax.clear()
points = ax.scatter(x,y,s=100, alpha=0.5)
mplc.cursor(ax, hover=True).connect(
"add", lambda sel: sel.annotation.set_text(lbl[sel.index]))
xmin=min(x)
xmax=max(x)
ymin=min(y)
ymax=max(y)
ax.set_ylim([xmin-10,xmax+10])
ax.set_xlim([ymin-10,xmax+10])
axfreq = fig.add_axes([0.15, 0.1, 0.65, 0.03])
plot_slider = Slider(
ax=axfreq,
label='',
valmin=0,
valmax=len(z),
valinit=1,
valstep=1,)
def update(val):
dff=df.loc[df['slide']==plot_slider.val]
x = dff['x'].to_list()
y = dff['y'].to_list()
lbl=dff['Name'].to_list()
points.set_offsets(np.c_[x,y])
plot_slider.on_changed(update)
plt.show()