|
31 | 31 | # per level.
|
32 | 32 |
|
33 | 33 |
|
| 34 | +@_api.deprecated("3.7", alternative="Text.set_transform_rotates_text") |
34 | 35 | class ClabelText(text.Text):
|
35 | 36 | """
|
36 | 37 | Unlike the ordinary text, the get_rotation returns an updated
|
@@ -150,10 +151,8 @@ def clabel(self, levels=None, *,
|
150 | 151 | or minus 90 degrees from level.
|
151 | 152 |
|
152 | 153 | use_clabeltext : bool, default: False
|
153 |
| - If ``True``, `.ClabelText` class (instead of `.Text`) is used to |
154 |
| - create labels. `ClabelText` recalculates rotation angles |
155 |
| - of texts during the drawing time, therefore this can be used if |
156 |
| - aspect of the axes changes. |
| 154 | + If ``True``, use `.Text.set_transform_rotates_text` to ensure that |
| 155 | + label rotation is updated whenever the axes aspect changes. |
157 | 156 |
|
158 | 157 | zorder : float or None, default: ``(2 + contour.get_zorder())``
|
159 | 158 | zorder of the contour labels.
|
@@ -273,6 +272,7 @@ def get_label_width(self, lev, fmt, fsize):
|
273 | 272 | width *= 72 / fig.dpi
|
274 | 273 | return width
|
275 | 274 |
|
| 275 | + @_api.deprecated("3.7", alternative="Artist.set") |
276 | 276 | def set_label_props(self, label, text, color):
|
277 | 277 | """Set the label properties - color, fontsize, text."""
|
278 | 278 | label.set_text(text)
|
@@ -417,57 +417,32 @@ def calc_label_rot_and_inline(self, slc, ind, lw, lc=None, spacing=5):
|
417 | 417 |
|
418 | 418 | return rotation, nlc
|
419 | 419 |
|
420 |
| - def _get_label_text(self, x, y, rotation): |
421 |
| - dx, dy = self.axes.transData.inverted().transform((x, y)) |
422 |
| - t = text.Text(dx, dy, rotation=rotation, |
423 |
| - horizontalalignment='center', |
424 |
| - verticalalignment='center', zorder=self._clabel_zorder) |
425 |
| - return t |
426 |
| - |
427 |
| - def _get_label_clabeltext(self, x, y, rotation): |
428 |
| - # x, y, rotation is given in pixel coordinate. Convert them to |
429 |
| - # the data coordinate and create a label using ClabelText |
430 |
| - # class. This way, the rotation of the clabel is along the |
431 |
| - # contour line always. |
432 |
| - transDataInv = self.axes.transData.inverted() |
433 |
| - dx, dy = transDataInv.transform((x, y)) |
434 |
| - drotation = transDataInv.transform_angles(np.array([rotation]), |
435 |
| - np.array([[x, y]])) |
436 |
| - t = ClabelText(dx, dy, rotation=drotation[0], |
437 |
| - horizontalalignment='center', |
438 |
| - verticalalignment='center', zorder=self._clabel_zorder) |
439 |
| - |
440 |
| - return t |
441 |
| - |
442 |
| - def _add_label(self, t, x, y, lev, cvalue): |
443 |
| - color = self.labelMappable.to_rgba(cvalue, alpha=self.alpha) |
444 |
| - |
445 |
| - _text = self.get_text(lev, self.labelFmt) |
446 |
| - self.set_label_props(t, _text, color) |
| 420 | + def add_label(self, x, y, rotation, lev, cvalue): |
| 421 | + """Add contour label without `.Text.set_transform_rotates_text`.""" |
| 422 | + data_x, data_y = self.axes.transData.inverted().transform((x, y)) |
| 423 | + t = text.Text( |
| 424 | + data_x, data_y, |
| 425 | + text=self.get_text(lev, self.labelFmt), |
| 426 | + rotation=rotation, |
| 427 | + horizontalalignment='center', verticalalignment='center', |
| 428 | + zorder=self._clabel_zorder, |
| 429 | + color=self.labelMappable.to_rgba(cvalue, alpha=self.alpha), |
| 430 | + fontproperties=self.labelFontProps, |
| 431 | + clip_box=self.axes.bbox) |
447 | 432 | self.labelTexts.append(t)
|
448 | 433 | self.labelCValues.append(cvalue)
|
449 | 434 | self.labelXYs.append((x, y))
|
450 |
| - |
451 | 435 | # Add label to plot here - useful for manual mode label selection
|
452 | 436 | self.axes.add_artist(t)
|
453 | 437 |
|
454 |
| - def add_label(self, x, y, rotation, lev, cvalue): |
455 |
| - """ |
456 |
| - Add contour label using :class:`~matplotlib.text.Text` class. |
457 |
| - """ |
458 |
| - t = self._get_label_text(x, y, rotation) |
459 |
| - self._add_label(t, x, y, lev, cvalue) |
460 |
| - |
461 | 438 | def add_label_clabeltext(self, x, y, rotation, lev, cvalue):
|
462 |
| - """ |
463 |
| - Add contour label using :class:`ClabelText` class. |
464 |
| - """ |
465 |
| - # x, y, rotation is given in pixel coordinate. Convert them to |
466 |
| - # the data coordinate and create a label using ClabelText |
467 |
| - # class. This way, the rotation of the clabel is along the |
468 |
| - # contour line always. |
469 |
| - t = self._get_label_clabeltext(x, y, rotation) |
470 |
| - self._add_label(t, x, y, lev, cvalue) |
| 439 | + """Add contour label with `.Text.set_transform_rotates_text`.""" |
| 440 | + self.add_label(x, y, rotation, lev, cvalue) |
| 441 | + # Grab the last added text, and reconfigure its rotation. |
| 442 | + t = self.labelTexts[-1] |
| 443 | + data_rotation, = self.axes.transData.inverted().transform_angles( |
| 444 | + [rotation], [[x, y]]) |
| 445 | + t.set(rotation=data_rotation, transform_rotates_text=True) |
471 | 446 |
|
472 | 447 | def add_label_near(self, x, y, inline=True, inline_spacing=5,
|
473 | 448 | transform=None):
|
|
0 commit comments