@@ -3522,10 +3522,11 @@ def _upcast_err(err):
35223522 eb_cap_style ['color' ] = ecolor
35233523
35243524 barcols = []
3525- caplines = []
3525+ caplines = { 'x' : [], 'y' : []}
35263526
35273527 # Vectorized fancy-indexer.
3528- def apply_mask (arrays , mask ): return [array [mask ] for array in arrays ]
3528+ def apply_mask (arrays , mask ):
3529+ return [array [mask ] for array in arrays ]
35293530
35303531 # dep: dependent dataset, indep: independent dataset
35313532 for (dep_axis , dep , err , lolims , uplims , indep , lines_func ,
@@ -3556,9 +3557,12 @@ def apply_mask(arrays, mask): return [array[mask] for array in arrays]
35563557 # return dep - elow * ~lolims, dep + ehigh * ~uplims
35573558 # except that broadcast_to would strip units.
35583559 low , high = dep + np .row_stack ([- (1 - lolims ), 1 - uplims ]) * err
3559-
35603560 barcols .append (lines_func (
35613561 * apply_mask ([indep , low , high ], everymask ), ** eb_lines_style ))
3562+ if self .name == "polar" and dep_axis == "x" :
3563+ for b in barcols :
3564+ for p in b .get_paths ():
3565+ p ._interpolation_steps = 2
35623566 # Normal errorbars for points without upper/lower limits.
35633567 nolims = ~ (lolims | uplims )
35643568 if nolims .any () and capsize > 0 :
@@ -3571,7 +3575,7 @@ def apply_mask(arrays, mask): return [array[mask] for array in arrays]
35713575 line = mlines .Line2D (indep_masked , indep_masked ,
35723576 marker = marker , ** eb_cap_style )
35733577 line .set (** {f"{ dep_axis } data" : lh_masked })
3574- caplines .append (line )
3578+ caplines [ dep_axis ] .append (line )
35753579 for idx , (lims , hl ) in enumerate ([(lolims , high ), (uplims , low )]):
35763580 if not lims .any ():
35773581 continue
@@ -3585,15 +3589,29 @@ def apply_mask(arrays, mask): return [array[mask] for array in arrays]
35853589 line = mlines .Line2D (x_masked , y_masked ,
35863590 marker = hlmarker , ** eb_cap_style )
35873591 line .set (** {f"{ dep_axis } data" : hl_masked })
3588- caplines .append (line )
3592+ caplines [ dep_axis ] .append (line )
35893593 if capsize > 0 :
3590- caplines .append (mlines .Line2D (
3594+ caplines [ dep_axis ] .append (mlines .Line2D (
35913595 x_masked , y_masked , marker = marker , ** eb_cap_style ))
3592-
3593- for l in caplines :
3594- self .add_line (l )
3596+ if self .name == 'polar' :
3597+ for axis in caplines :
3598+ for l in caplines [axis ]:
3599+ # Rotate caps to be perpendicular to the error bars
3600+ for theta , r in zip (l .get_xdata (), l .get_ydata ()):
3601+ rotation = mtransforms .Affine2D ().rotate (theta )
3602+ if axis == 'y' :
3603+ rotation .rotate (- np .pi / 2 )
3604+ ms = mmarkers .MarkerStyle (marker = marker ,
3605+ transform = rotation )
3606+ self .add_line (mlines .Line2D ([theta ], [r ], marker = ms ,
3607+ ** eb_cap_style ))
3608+ else :
3609+ for axis in caplines :
3610+ for l in caplines [axis ]:
3611+ self .add_line (l )
35953612
35963613 self ._request_autoscale_view ()
3614+ caplines = caplines ['x' ] + caplines ['y' ]
35973615 errorbar_container = ErrorbarContainer (
35983616 (data_line , tuple (caplines ), tuple (barcols )),
35993617 has_xerr = (xerr is not None ), has_yerr = (yerr is not None ),
0 commit comments