@@ -587,6 +587,18 @@ def _determine_lims(self, xmin=None, xmax=None, *args, **kwargs):
587
587
xmax += 0.05
588
588
return (xmin , xmax )
589
589
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
+
590
602
def set_xlim3d (self , left = None , right = None , emit = True , auto = False , ** kw ):
591
603
"""
592
604
Set 3D x limits.
@@ -605,10 +617,8 @@ def set_xlim3d(self, left=None, right=None, emit=True, auto=False, **kw):
605
617
left , right = left
606
618
607
619
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 )
612
622
613
623
old_left , old_right = self .get_xlim ()
614
624
if left is None :
@@ -665,10 +675,8 @@ def set_ylim3d(self, bottom=None, top=None, emit=True, auto=False, **kw):
665
675
top = self .convert_yunits (top )
666
676
667
677
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 )
672
680
673
681
if top == bottom :
674
682
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):
713
721
bottom , top = bottom
714
722
715
723
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 )
720
726
721
727
old_bottom , old_top = self .get_zlim ()
722
728
if bottom is None :
0 commit comments