如何在 Matplotlib 中捕获拾取事件并用它来激活或停用线图


在 Matplotlib 中启用绘图对象的拾取事件属性后,任务是使用拾取事件启用和禁用给定轴上的一组绘图中的线图。

为了拾取特定的线图,我们使用图例。

我们将使用二元分类图来创建 ROC 曲线。ROC 曲线或受试者工作特征曲线用于诊断、天气预报和其他应用。它包含**真阳性率 (TPR)** 和**假阳性率 (FPR)**。使用 ROC,我们将创建该曲线的多个图。

让我们首先导入库。这里使用“nbAgg”来启用交互式图形。

import matplotlib.pyplot as plt
plt.switch_backend('nbAgg')
import pandas as pd

现在从数据或 Excel 文件中读取“fpr(假阳性率)”和“tpr(真阳性率)”。为了演示,它将如下所示:

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

定义回调函数以响应拾取事件:

示例

def on_pick(event):
# on the pick event, find the plot line corresponding to the legend line, and toggle the visibility
   leg_line = event.artist
   plot_line = leg_ln_map[leg_line]
   vis = not plot_line.get_visible()
   plot_line.set_visible(vis)
# Change the alpha on the line in the legend so we can see what lines have been toggled
   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()

输出

更新于:2021 年 2 月 23 日

452 次查看

开启你的 职业生涯

通过完成课程获得认证

开始
广告