如何捕获 pick 事件并使用它来激活或停用 Matplotlib 中的线图
machine learningserver side programmingprogrammingmatplotlib更新于 2025/5/21 6:37:17
在 Matplotlib 中启用艺术家的 pick 事件属性后,任务是使用 pick 事件来启用和禁用一组图中给定轴的线图。
为了选择特定的线图,我们使用 Legend。
我们将使用二元分类图来创建 ROC 曲线。ROC 曲线或接收器操作特性曲线用于诊断、天气预报和其他应用。它包含真阴性率 (TPR)和假阳性率 (FPR)。使用 ROC,我们将创建曲线的多个图。
让我们先导入库。这里是 ‘nbAgg&rsquo 用于启用交互式图形。
import matplotlib.pyplot as plt
plt.switch_backend('nbAgg')
import pandas as pd
现在从数据或 Excel 文件中读取 ‘fpr(false positive Rate)’ 和 ‘tpr(True Negative Rate)’。为了演示,它看起来像,
fpr_logreg = pd.read_excel('ROC_Curves.xlsx', 'fpr_logreg')
tpr_logreg = pd.read_excel('ROC_Curves.xlsx', 'tpr_logreg')
fpr_KNN = pd.read_excel('ROC_Curves.xlsx', 'fpr_KNN')
tpr_KNN = pd.read_excel('ROC_Curves.xlsx', 'tpr_KNN')
fpr_MLP = pd.read_excel('ROC_Curves.xlsx', 'fpr_MLP')
tpr_MLP = pd.read_excel('ROC_Curves.xlsx', 'tpr_MLP')
fpr_SGD = pd.read_excel('ROC_Curves.xlsx', 'fpr_SGD')
tpr_SGD = pd.read_excel('ROC_Curves.xlsx', 'tpr_SGD')
fpr_GNB = pd.read_excel('ROC_Curves.xlsx', 'fpr_GNB')
tpr_GNB = pd.read_excel('ROC_Curves.xlsx', 'tpr_GNB')
fpr_svc = pd.read_excel('ROC_Curves.xlsx', 'fpr_svc')
tpr_svc = pd.read_excel('ROC_Curves.xlsx', 'tpr_svc')
fpr_RF = pd.read_excel('ROC_Curves.xlsx', 'fpr_RF')
tpr_RF = pd.read_excel('ROC_Curves.xlsx', 'tpr_RF')
fpr_DT = pd.read_excel('ROC_Curves.xlsx', 'fpr_DT')
tpr_DT = pd.read_excel('ROC_Curves.xlsx', 'tpr_DT')
现在定义并创建具有空网格的图形,
fig = plt.figure(figsize=(10,8))
为给定数据绘制线图,
plt.plot([0, 1], [0, 1], 'k--') l1, = plt.plot(fpr_logreg, tpr_logreg, label='LogReg',color='purple') l2, = plt.plot(fpr_KNN, tpr_KNN, label='KNN',color='green') l3, = plt.plot(fpr_DT, tpr_DT, label='DecisionTree', color='orange') l4, = plt.plot(fpr_RF, tpr_RF, label='Random Forest',color='yellow') l5, = plt.plot(fpr_MLP, tpr_MLP, label='MLP',color='red') l6, = plt.plot(fpr_svc, tpr_svc, label='SVC',color='violet') l7, = plt.plot(fpr_GNB, tpr_GNB, label='GNB',color='grey') l8, = plt.plot(fpr_SGD, tpr_SGD, label='SGD', color='pink')
设置图表的标签、图例和标题,
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC curve')
lgd = plt.legend(loc='lower right', fancybox=True, shadow=True)
现在将图例与其标签映射,
pltlines = [l1, l2, l3, l4, l5, l6, l7, l8] leg_ln_map = dict() for leg_line, plot_line in zip(lgd.get_lines(), pltlines): leg_line.set_picker(10) leg_ln_map[leg_line] = plot_line
定义回调函数以响应 Pick 事件,
示例
def on_pick(event): # 在 pick 事件上,找到与图例线对应的情节线,并切换可见性 leg_line = event.artist plot_line = leg_ln_map[leg_line] vis = not plot_line.get_visible() plot_line.set_visible(vis) # 更改图例中线条的 alpha,以便我们可以看到哪些线条已被切换 if vis: leg_line.set_alpha(1.0) else: leg_line.set_alpha(0.2) fig.canvas.draw()
现在将事件与回调函数连接起来,
fig.canvas.mpl_connect('pick_event', onpick)
显示创建的图的输出,
plt.show()
输出


