如何在 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()
输出
广告