@@ -451,7 +451,7 @@ def get_window_extent(self, renderer):
451
451
offset_tr .translate (dx , dy )
452
452
self .set_rotation (text_ref_angle + angle_orig )
453
453
454
- bbox = super (LabelBase , self ).get_window_extent (renderer )
454
+ bbox = super (LabelBase , self ).get_window_extent (renderer ). frozen ()
455
455
456
456
offset_tr .clear ()
457
457
@@ -619,6 +619,20 @@ def draw(self, renderer):
619
619
super (AxisLabel , self ).draw (renderer )
620
620
621
621
622
+ def get_window_extent (self , renderer ):
623
+
624
+ if not self .get_visible ():
625
+ return
626
+
627
+ pad = renderer .points_to_pixels (self .get_pad ())
628
+ r = self ._get_external_pad () + pad
629
+ self ._set_offset_radius (r )
630
+
631
+ bb = super (AxisLabel , self ).get_window_extent (renderer )
632
+
633
+ return bb
634
+
635
+
622
636
class TickLabels (AxisLabel , AttributeCopier ): # mtext.Text
623
637
"""
624
638
Tick Labels. While derived from Text, this single artist draws all
@@ -762,7 +776,7 @@ def draw(self, renderer):
762
776
return
763
777
764
778
r , total_width = self ._get_ticklabels_offsets (renderer ,
765
- self ._axis_direction )
779
+ self ._axis_direction )
766
780
767
781
#self._set_external_pad(r+self._get_external_pad())
768
782
pad = self ._get_external_pad () + \
@@ -788,6 +802,10 @@ def set_locs_angles_labels(self, locs_angles_labels):
788
802
789
803
def get_window_extents (self , renderer ):
790
804
805
+ if not self .get_visible ():
806
+ self ._axislabel_pad = self ._get_external_pad ()
807
+ return []
808
+
791
809
bboxes = []
792
810
793
811
r , total_width = self ._get_ticklabels_offsets (renderer ,
@@ -806,6 +824,9 @@ def get_window_extents(self, renderer):
806
824
bb = LabelBase .get_window_extent (self , renderer )
807
825
bboxes .append (bb )
808
826
827
+ self ._axislabel_pad = total_width \
828
+ + pad # the value saved will be used to draw axislabel.
829
+
809
830
return bboxes
810
831
811
832
@@ -1210,8 +1231,69 @@ def _get_tick_info(self, tick_iter):
1210
1231
return ticks_loc_angle , ticklabels_loc_angle_label
1211
1232
1212
1233
1234
+ def _update_ticks (self , renderer ):
1235
+
1236
+
1237
+ # set extra pad for major and minor ticklabels:
1238
+ # use ticksize of majorticks even for minor ticks. not clear what is best.
1239
+
1240
+ dpi_cor = renderer .points_to_pixels (1. )
1241
+ if self .major_ticks .get_visible () and self .major_ticks .get_tick_out ():
1242
+ self .major_ticklabels ._set_external_pad (self .major_ticks ._ticksize * dpi_cor )
1243
+ self .minor_ticklabels ._set_external_pad (self .major_ticks ._ticksize * dpi_cor )
1244
+ else :
1245
+ self .major_ticklabels ._set_external_pad (0 )
1246
+ self .minor_ticklabels ._set_external_pad (0 )
1247
+
1248
+
1249
+ majortick_iter , minortick_iter = \
1250
+ self ._axis_artist_helper .get_tick_iterators (self .axes )
1251
+
1252
+ tick_loc_angle , ticklabel_loc_angle_label \
1253
+ = self ._get_tick_info (majortick_iter )
1254
+
1255
+ self .major_ticks .set_locs_angles (tick_loc_angle )
1256
+ self .major_ticklabels .set_locs_angles_labels (ticklabel_loc_angle_label )
1257
+
1258
+ #self.major_ticks.draw(renderer)
1259
+ #self.major_ticklabels.draw(renderer)
1260
+
1261
+
1262
+ # minor ticks
1263
+ tick_loc_angle , ticklabel_loc_angle_label \
1264
+ = self ._get_tick_info (minortick_iter )
1265
+
1266
+ self .minor_ticks .set_locs_angles (tick_loc_angle )
1267
+ self .minor_ticklabels .set_locs_angles_labels (ticklabel_loc_angle_label )
1268
+
1269
+ #self.minor_ticks.draw(renderer)
1270
+ #self.minor_ticklabels.draw(renderer)
1271
+
1272
+
1273
+ #if (self.major_ticklabels.get_visible() or self.minor_ticklabels.get_visible()):
1274
+ # self._draw_offsetText(renderer)
1275
+
1276
+ return self .major_ticklabels .get_window_extents (renderer )
1277
+
1278
+
1213
1279
def _draw_ticks (self , renderer ):
1214
1280
1281
+ extents = self ._update_ticks (renderer )
1282
+
1283
+ self .major_ticks .draw (renderer )
1284
+ self .major_ticklabels .draw (renderer )
1285
+
1286
+ self .minor_ticks .draw (renderer )
1287
+ self .minor_ticklabels .draw (renderer )
1288
+
1289
+
1290
+ if (self .major_ticklabels .get_visible () or self .minor_ticklabels .get_visible ()):
1291
+ self ._draw_offsetText (renderer )
1292
+
1293
+ return extents
1294
+
1295
+ def _draw_ticks2 (self , renderer ):
1296
+
1215
1297
1216
1298
# set extra pad for major and minor ticklabels:
1217
1299
# use ticksize of majorticks even for minor ticks. not clear what is best.
@@ -1319,7 +1401,51 @@ def _init_label(self, **kw):
1319
1401
labelpad = kw .get ("labelpad" , 5 )
1320
1402
self .label .set_pad (labelpad )
1321
1403
1404
+
1405
+ def _update_label (self , renderer ):
1406
+
1407
+ if not self .label .get_visible ():
1408
+ return
1409
+
1410
+ fontprops = font_manager .FontProperties (size = rcParams ['axes.labelsize' ])
1411
+
1412
+ #pad_points = self.major_tick_pad
1413
+
1414
+ #print self._ticklabel_add_angle - self._axislabel_add_angle
1415
+ #if abs(self._ticklabel_add_angle - self._axislabel_add_angle)%360 > 90:
1416
+ if self ._ticklabel_add_angle != self ._axislabel_add_angle :
1417
+ if (self .major_ticks .get_visible () and not self .major_ticks .get_tick_out ()) \
1418
+ or \
1419
+ (self .minor_ticks .get_visible () and not self .major_ticks .get_tick_out ()):
1420
+ axislabel_pad = self .major_ticks ._ticksize
1421
+ else :
1422
+ axislabel_pad = 0
1423
+ else :
1424
+ axislabel_pad = max ([self .major_ticklabels ._axislabel_pad ,
1425
+ self .minor_ticklabels ._axislabel_pad ])
1426
+
1427
+
1428
+ #label_offset = axislabel_pad + self.LABELPAD
1429
+
1430
+ #self.label._set_offset_radius(label_offset)
1431
+ self .label ._set_external_pad (axislabel_pad )
1432
+
1433
+ xy , angle_tangent = self ._axis_artist_helper .get_axislabel_pos_angle (self .axes )
1434
+ if xy is None : return
1435
+
1436
+ angle_label = angle_tangent - 90
1437
+
1438
+
1439
+ x , y = xy
1440
+ self .label ._set_ref_angle (angle_label + self ._axislabel_add_angle )
1441
+ self .label .set (x = x , y = y )
1442
+
1443
+
1322
1444
def _draw_label (self , renderer ):
1445
+ self ._update_label (renderer )
1446
+ self .label .draw (renderer )
1447
+
1448
+ def _draw_label2 (self , renderer ):
1323
1449
1324
1450
if not self .label .get_visible ():
1325
1451
return
@@ -1364,6 +1490,48 @@ def set_label(self, s):
1364
1490
self .label .set_text (s )
1365
1491
1366
1492
1493
+
1494
+ def get_tightbbox (self , renderer ):
1495
+ if not self .get_visible (): return
1496
+
1497
+ self ._axis_artist_helper .update_lim (self .axes )
1498
+
1499
+ dpi_cor = renderer .points_to_pixels (1. )
1500
+ self .dpi_transform .clear ().scale (dpi_cor , dpi_cor )
1501
+
1502
+
1503
+ bb = []
1504
+
1505
+ self ._update_ticks (renderer )
1506
+
1507
+ #if self.major_ticklabels.get_visible():
1508
+ bb .extend (self .major_ticklabels .get_window_extents (renderer ))
1509
+ #if self.minor_ticklabels.get_visible():
1510
+ bb .extend (self .minor_ticklabels .get_window_extents (renderer ))
1511
+
1512
+
1513
+ self ._update_label (renderer )
1514
+
1515
+ #if self.label.get_visible():
1516
+ bb .append (self .label .get_window_extent (renderer ))
1517
+ bb .append (self .offsetText .get_window_extent (renderer ))
1518
+
1519
+ bb = [b for b in bb if b and (b .width != 0 or b .height != 0 )]
1520
+ if bb :
1521
+ _bbox = Bbox .union (bb )
1522
+ return _bbox
1523
+ else :
1524
+ return None
1525
+
1526
+ #self._draw_line(renderer)
1527
+
1528
+ #self._draw_ticks(renderer)
1529
+
1530
+ #self._draw_offsetText(renderer)
1531
+ #self._draw_label(renderer)
1532
+
1533
+
1534
+
1367
1535
@allow_rasterization
1368
1536
def draw (self , renderer ):
1369
1537
'Draw the axis lines, tick lines and labels'
0 commit comments