title: matplotlib(mpl_connect) in for loop to create many interactive plots does not work
body: <p>I have a for loop that generated different dataframe (pandas) and then plot it.
  I want to create many interactive plots so I can display and hide different lines in my graph.
  For that I'm using the on_pick function (as mentioned <a href="https://stackoverflow.com/questions/66423508/matplotlib-legend-picking-with-pandas-dataframe-doesnt-work/66424547#66424547">here</a>)</p>
  <p>The problem is that when I plot one table, it works and I have interactive legend, but when I try to plot serveral charts in for loop , non of the legends are interactive anymore.</p>
  <pre><code>df = pd.DataFrame(np.array([[0.45,0.12,0.66,0.76,0.22],[0.22,0.24,0.12,0.56,0.34],[0.12,0.47,0.93,0.65,0.21]]),
                      columns=[60.1,65.5,67.3,74.2,88.5])
  df['name']=['A1','B4','B7']
  df=df.set_index('name')
  
  #plot alone:
  fig, ax = plt.subplots()
  df.T.plot(ax=ax)
  lines = ax.get_lines()
  leg = ax.legend(fancybox=True, shadow=True)
  lined = {}  # Will map legend lines to original lines.
  for legline, origline in zip(leg.get_lines(), lines):
      legline.set_picker(True)  # Enable picking on the legend line.
      lined[legline] = origline
  
  def on_pick(event):
      #On the pick event, find the original line corresponding to the legend
      #proxy line, and toggle its visibility.
      legline = event.artist
      origline = lined[legline]
      visible = not origline.get_visible()
      origline.set_visible(visible)
      #Change the alpha on the line in the legend so we can see what lines
      #have been toggled.
      legline.set_alpha(1.0 if visible else 0.2)
      fig.canvas.draw()
  
  fig.canvas.mpl_connect('pick_event', on_pick)
  plt.show()
  </code></pre>
  <p>the result: plot that I can enable and disable the lines in the legend:
  <a href="https://i.stack.imgur.com/Lk6dZ.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/Lk6dZ.png" alt="enter image description here" /></a></p>
  <pre><code>#plot many plots in for loop:
  nums=[5,8,0.3]
  
  for n in nums:
      db=df*n
      
      fig, ax = plt.subplots()
      db.T.plot(ax=ax)
      lines = ax.get_lines()
      leg = ax.legend(fancybox=True, shadow=True)
      lined = {}  # Will map legend lines to original lines.
      for legline, origline in zip(leg.get_lines(), lines):
          legline.set_picker(True)  # Enable picking on the legend line.
          lined[legline] = origline
          
      def on_pick(event):
          #On the pick event, find the original line corresponding to the legend
          #proxy line, and toggle its visibility.
          legline = event.artist
          origline = lined[legline]
          visible = not origline.get_visible()
          origline.set_visible(visible)
          #Change the alpha on the line in the legend so we can see what lines
          #have been toggled.
          legline.set_alpha(1.0 if visible else 0.2)
          fig.canvas.draw()
          
      fig.canvas.mpl_connect('pick_event', on_pick)
      plt.show()
      
  </code></pre>
  <p>result: I get the plots but can't play with which lines will be displayed.
  <a href="https://i.stack.imgur.com/2Mz59.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/2Mz59.png" alt="enter image description here" /></a></p>
  <p>*when I touch the lines it still shows interactively the x and y values but the legend is not interactive.</p>
  <p><strong>My end goal: to generate more than one interactive plot in for loop in matplotlib, with the ability to enable and disable the legend items.</strong></p>