@@ -813,7 +813,10 @@ def _update_val_from_pos(self, pos):
813813val = self ._max_in_bounds (pos )
814814self .set_max (val )
815815if self ._active_handle :
816- self ._active_handle .set_xdata ([val ])
816+ if self .orientation == "vertical" :
817+ self ._active_handle .set_ydata ([val ])
818+ else :
819+ self ._active_handle .set_xdata ([val ])
817820
818821def _update (self ,event ):
819822"""Update the slider position."""
@@ -834,13 +837,21 @@ def _update(self, event):
834837event .canvas .release_mouse (self .ax )
835838self ._active_handle = None
836839return
837-
838- # determine which handle was grabbed
839- handle = self ._handles [
840- np .argmin (
841- np .abs ([h .get_xdata ()[0 ]- event .xdata for h in self ._handles ])
842- )
843- ]
840+
841+ if self .orientation == "vertical" :
842+ # determine which handle was grabbed
843+ handle = self ._handles [
844+ np .argmin (
845+ np .abs ([h .get_ydata ()[0 ]- event .ydata for h in self ._handles ])
846+ )
847+ ]
848+ else :
849+ # determine which handle was grabbed
850+ handle = self ._handles [
851+ np .argmin (
852+ np .abs ([h .get_xdata ()[0 ]- event .xdata for h in self ._handles ])
853+ )
854+ ]
844855# these checks ensure smooth behavior if the handles swap which one
845856# has a higher value. i.e. if one is dragged over and past the other.
846857if handle is not self ._active_handle :
@@ -904,14 +915,34 @@ def set_val(self, val):
904915xy [2 ]= .75 ,val [1 ]
905916xy [3 ]= .75 ,val [0 ]
906917xy [4 ]= .25 ,val [0 ]
918+
919+ hbottom_pos = self ._handles [0 ].get_ydata ()
920+ htop_pos = self ._handles [1 ].get_ydata ()
921+ if hbottom_pos != val [0 ]:
922+ hbottom_pos [0 ]= val [0 ]
923+ self ._handles [0 ].set_ydata (hbottom_pos )
924+ if htop_pos != val [1 ]:
925+ htop_pos [0 ]= val [1 ]
926+ self ._handles [1 ].set_ydata (htop_pos )
907927else :
908928xy [0 ]= val [0 ],.25
909929xy [1 ]= val [0 ],.75
910930xy [2 ]= val [1 ],.75
911931xy [3 ]= val [1 ],.25
912932xy [4 ]= val [0 ],.25
933+
934+ hleft_pos = self ._handles [0 ].get_xdata ()
935+ hright_pos = self ._handles [1 ].get_xdata ()
936+ if hleft_pos != val [0 ]:
937+ hleft_pos [0 ]= val [0 ]
938+ self ._handles [0 ].set_xdata (hleft_pos )
939+ if hright_pos != val [1 ]:
940+ hright_pos [0 ]= val [1 ]
941+ self ._handles [1 ].set_xdata (hright_pos )
942+
913943self .poly .xy = xy
914944self .valtext .set_text (self ._format (val ))
945+
915946if self .drawon :
916947self .ax .figure .canvas .draw_idle ()
917948self .val = val