Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit83f9c51

Browse files
dopplershiftMeeseeksDev[bot]
authored and
MeeseeksDev[bot]
committed
Backport PR#9881: Polar tick fixes
1 parentc181d13 commit83f9c51

File tree

5 files changed

+3432
-784
lines changed

5 files changed

+3432
-784
lines changed

‎lib/matplotlib/projections/polar.py

Lines changed: 69 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -300,8 +300,9 @@ def _update_padding(self, pad, angle):
300300
defupdate_position(self,loc):
301301
super(ThetaTick,self).update_position(loc)
302302
axes=self.axes
303-
angle= (loc*axes.get_theta_direction()+
304-
axes.get_theta_offset()-np.pi/2)
303+
angle=loc*axes.get_theta_direction()+axes.get_theta_offset()
304+
text_angle=np.rad2deg(angle)%360-90
305+
angle-=np.pi/2
305306

306307
ifself.tick1On:
307308
marker=self.tick1line.get_marker()
@@ -326,17 +327,17 @@ def update_position(self, loc):
326327

327328
mode,user_angle=self._labelrotation
328329
ifmode=='default':
329-
angle=0
330+
text_angle=user_angle
330331
else:
331-
ifangle>np.pi/2:
332-
angle-=np.pi
333-
elifangle<-np.pi/2:
334-
angle+=np.pi
335-
angle=np.rad2deg(angle)+user_angle
332+
iftext_angle>90:
333+
text_angle-=180
334+
eliftext_angle<-90:
335+
text_angle+=180
336+
text_angle+=user_angle
336337
ifself.label1On:
337-
self.label1.set_rotation(angle)
338+
self.label1.set_rotation(text_angle)
338339
ifself.label2On:
339-
self.label2.set_rotation(angle)
340+
self.label2.set_rotation(text_angle)
340341

341342
# This extra padding helps preserve the look from previous releases but
342343
# is also needed because labels are anchored to their center.
@@ -504,17 +505,59 @@ def _get_text2(self):
504505
t.set_rotation_mode('anchor')
505506
returnt
506507

507-
def_determine_anchor(self,angle,start):
508-
ifstart:
509-
if-90<=angle<=90:
510-
return'left','center'
508+
def_determine_anchor(self,mode,angle,start):
509+
# Note: angle is the (spine angle - 90) because it's used for the tick
510+
# & text setup, so all numbers below are -90 from (normed) spine angle.
511+
ifmode=='auto':
512+
ifstart:
513+
if-90<=angle<=90:
514+
return'left','center'
515+
else:
516+
return'right','center'
511517
else:
512-
return'right','center'
518+
if-90<=angle<=90:
519+
return'right','center'
520+
else:
521+
return'left','center'
513522
else:
514-
if-90<=angle<=90:
515-
return'right','center'
523+
ifstart:
524+
ifangle<-68.5:
525+
return'center','top'
526+
elifangle<-23.5:
527+
return'left','top'
528+
elifangle<22.5:
529+
return'left','center'
530+
elifangle<67.5:
531+
return'left','bottom'
532+
elifangle<112.5:
533+
return'center','bottom'
534+
elifangle<157.5:
535+
return'right','bottom'
536+
elifangle<202.5:
537+
return'right','center'
538+
elifangle<247.5:
539+
return'right','top'
540+
else:
541+
return'center','top'
516542
else:
517-
return'left','center'
543+
ifangle<-68.5:
544+
return'center','bottom'
545+
elifangle<-23.5:
546+
return'right','bottom'
547+
elifangle<22.5:
548+
return'right','center'
549+
elifangle<67.5:
550+
return'right','top'
551+
elifangle<112.5:
552+
return'center','top'
553+
elifangle<157.5:
554+
return'left','top'
555+
elifangle<202.5:
556+
return'left','center'
557+
elifangle<247.5:
558+
return'left','bottom'
559+
else:
560+
return'center','bottom'
518561

519562
defupdate_position(self,loc):
520563
super(RadialTick,self).update_position(loc)
@@ -527,7 +570,8 @@ def update_position(self, loc):
527570
full=_is_full_circle_deg(thetamin,thetamax)
528571

529572
iffull:
530-
angle=axes.get_rlabel_position()*direction+offset-90
573+
angle= (axes.get_rlabel_position()*direction+
574+
offset)%360-90
531575
tick_angle=0
532576
ifangle>90:
533577
text_angle=angle-180
@@ -536,7 +580,7 @@ def update_position(self, loc):
536580
else:
537581
text_angle=angle
538582
else:
539-
angle=thetamin*direction+offset-90
583+
angle=(thetamin*direction+offset)%360-90
540584
ifdirection>0:
541585
tick_angle=np.deg2rad(angle)
542586
else:
@@ -557,7 +601,7 @@ def update_position(self, loc):
557601
ha='left'
558602
va='bottom'
559603
else:
560-
ha,va=self._determine_anchor(angle,True)
604+
ha,va=self._determine_anchor(mode,angle,direction>0)
561605
self.label1.set_ha(ha)
562606
self.label1.set_va(va)
563607
self.label1.set_rotation(text_angle)
@@ -584,7 +628,7 @@ def update_position(self, loc):
584628
self.label2On=False
585629
self.tick2On=False
586630
else:
587-
angle=thetamax*direction+offset-90
631+
angle=(thetamax*direction+offset)%360-90
588632
ifdirection>0:
589633
tick_angle=np.deg2rad(angle)
590634
else:
@@ -601,7 +645,7 @@ def update_position(self, loc):
601645
else:
602646
text_angle=user_angle
603647
ifself.label2On:
604-
ha,va=self._determine_anchor(angle,False)
648+
ha,va=self._determine_anchor(mode,angle,direction<0)
605649
self.label2.set_ha(ha)
606650
self.label2.set_va(va)
607651
self.label2.set_rotation(text_angle)
@@ -888,16 +932,10 @@ def get_xaxis_transform(self, which='grid'):
888932
returnself._xaxis_transform
889933

890934
defget_xaxis_text1_transform(self,pad):
891-
if_is_full_circle_rad(*self._realViewLim.intervalx):
892-
returnself._xaxis_text_transform,'center','center'
893-
else:
894-
returnself._xaxis_text_transform,'bottom','center'
935+
returnself._xaxis_text_transform,'center','center'
895936

896937
defget_xaxis_text2_transform(self,pad):
897-
if_is_full_circle_rad(*self._realViewLim.intervalx):
898-
returnself._xaxis_text_transform,'center','center'
899-
else:
900-
returnself._xaxis_text_transform,'top','center'
938+
returnself._xaxis_text_transform,'center','center'
901939

902940
defget_yaxis_transform(self,which='grid'):
903941
ifwhichin ('tick1','tick2'):
@@ -1072,10 +1110,6 @@ def set_theta_direction(self, direction):
10721110
raiseValueError(
10731111
"direction must be 1, -1, clockwise or counterclockwise")
10741112
self._direction.invalidate()
1075-
# FIXME: Why is this needed? Even though the tick label gets
1076-
# re-created, the alignment is not correctly updated without a reset.
1077-
self.yaxis.reset_ticks()
1078-
self.yaxis.set_clip_path(self.patch)
10791113

10801114
defget_theta_direction(self):
10811115
"""
@@ -1132,8 +1166,6 @@ def set_rlabel_position(self, value):
11321166
The angular position of the radius labels in degrees.
11331167
"""
11341168
self._r_label_position.clear().translate(np.deg2rad(value),0.0)
1135-
self.yaxis.reset_ticks()
1136-
self.yaxis.set_clip_path(self.patch)
11371169

11381170
defset_yscale(self,*args,**kwargs):
11391171
Axes.set_yscale(self,*args,**kwargs)
Binary file not shown.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp