diff --git a/mpl_interactions/generic.py b/mpl_interactions/generic.py index 3968e15..bc63484 100644 --- a/mpl_interactions/generic.py +++ b/mpl_interactions/generic.py @@ -10,6 +10,7 @@ from matplotlib.pyplot import close, ioff, subplots from matplotlib.widgets import LassoSelector from numpy import asanyarray, asarray, max, min +from packaging.version import parse from .controller import gogogo_controls, prep_scalars from .helpers import ( @@ -32,6 +33,24 @@ ] +def compare_version(v1, v2): + """Compare two version strings. + + Returns: + -1 if v1 < v2 + 0 if v1 == v2 + 1 if v1 > v2 + """ + p1 = parse(v1) + p2 = parse(v2) + if p1 < p2: + return -1 + elif p1 > p2: + return 1 + else: + return 0 + + def heatmap_slicer( X, Y, @@ -517,7 +536,7 @@ def __init__( default_props = {"color": "black", "linewidth": 1, "alpha": 0.8} if (props is None) and (lineprops is None): props = default_props - elif (lineprops is not None) and (mpl_version >= "3.7"): + elif (lineprops is not None) and (compare_version(mpl_version, "3.7") == 1): print("*lineprops* is deprecated in matplotlib 3.7+, please use *props*") props = {"color": "black", "linewidth": 1, "alpha": 0.8} @@ -528,7 +547,7 @@ def __init__( if isinstance(lasso_mousebutton, str): lasso_mousebutton = button_dict[lasso_mousebutton.lower()] - if mpl_version < "3.7": + if compare_version(mpl_version, "3.7") == -1: self.lasso = LassoSelector( self.ax, self._onselect, lineprops=props, useblit=useblit, button=lasso_mousebutton )