with a slight correction from the code proposed by Justin, it works
fine (tested on mpl 1.0.1).
Is there a straightforward way to limit the legend only to lines that
appear within the current display limits? I have a plot that has too
many separate data series to show on the legend at once, but once I
zoom in it would be good to re-set the legend to show only the visible
data points/lines.
[...]
from matplotlib import transforms
def add_legend_viewlim(ax, **kwargs):
""" Reset the legend in ax to only display lines that are
currently visible in plot area """
label_objs =
label_texts =
## print "viewLim:", ax.viewLim
for line in ax.lines:
line_label = line.get_label()
if line.get_visible() and line_label and not line_label.startswith("_"):
line_bbox = transforms.Bbox.unit()
line_bbox.update_from_data_xy(line.get_xydata())
if ax.viewLim.overlaps(line_bbox):
## print line_label, line_bbox
label_objs.append(line)
label_texts.append(line_label)
if label_objs:
return ax.legend(label_objs, label_texts, **kwargs)
elif ax.get_legend():
ax.get_legend().set_visible(False)
···
On Wed, Dec 1, 2010 at 11:58 AM, Justin McCann <jneilm@...83...> wrote:
--
thanks,
peter butterworth