如何捕获 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()

输出


相关文章