@@ -587,6 +587,18 @@ def _determine_lims(self, xmin=None, xmax=None, *args, **kwargs):
587587 xmax += 0.05
588588 return (xmin , xmax )
589589
590+ def _validate_axis_limits (self , limit , convert ):
591+ """
592+ Raise ValueError if specified axis limits are infinite.
593+
594+ """
595+ if limit is not None :
596+ converted_limits = convert (limit )
597+ if (isinstance (limit , float ) and
598+ (not np .isreal (limit ) or not np .isfinite (limit ))):
599+ raise ValueError ("Axis limits cannot be NaN or Inf" )
600+ return converted_limits
601+
590602 def set_xlim3d (self , left = None , right = None , emit = True , auto = False , ** kw ):
591603 """
592604 Set 3D x limits.
@@ -605,10 +617,8 @@ def set_xlim3d(self, left=None, right=None, emit=True, auto=False, **kw):
605617 left , right = left
606618
607619 self ._process_unit_info (xdata = (left , right ))
608- if left is not None :
609- left = self .convert_xunits (left )
610- if right is not None :
611- right = self .convert_xunits (right )
620+ left = self ._validate_axis_limits (left , self .convert_xunits )
621+ right = self ._validate_axis_limits (right , self .convert_xunits )
612622
613623 old_left , old_right = self .get_xlim ()
614624 if left is None :
@@ -665,10 +675,8 @@ def set_ylim3d(self, bottom=None, top=None, emit=True, auto=False, **kw):
665675 top = self .convert_yunits (top )
666676
667677 old_bottom , old_top = self .get_ylim ()
668- if bottom is None :
669- bottom = old_bottom
670- if top is None :
671- top = old_top
678+ bottom = self ._validate_axis_limits (bottom , self .convert_yunits )
679+ top = self ._validate_axis_limits (top , self .convert_yunits )
672680
673681 if top == bottom :
674682 warnings .warn (('Attempting to set identical bottom==top results\n '
@@ -713,10 +721,8 @@ def set_zlim3d(self, bottom=None, top=None, emit=True, auto=False, **kw):
713721 bottom , top = bottom
714722
715723 self ._process_unit_info (zdata = (bottom , top ))
716- if bottom is not None :
717- bottom = self .convert_zunits (bottom )
718- if top is not None :
719- top = self .convert_zunits (top )
724+ bottom = self ._validate_axis_limits (bottom , self .convert_yunits )
725+ top = self ._validate_axis_limits (top , self .convert_yunits )
720726
721727 old_bottom , old_top = self .get_zlim ()
722728 if bottom is None :
0 commit comments