8000 MNT: expire ContourSet deprecations · matplotlib/matplotlib@3096bc8 · GitHub
[go: up one dir, main page]

Skip to content

Commit 3096bc8

Browse files
committed
MNT: expire ContourSet deprecations
1 parent b01462c commit 3096bc8

File tree

4 files changed

+46
-264
lines changed

4 files changed

+46
-264
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
``ContourSet.collections``
2+
~~~~~~~~~~~~~~~~~~~~~~~~~~
3+
4+
... has been removed. `~.ContourSet` is now implemented as a single
5+
`~.Collection` of paths, each path corresponding to a contour level, possibly
6+
including multiple unconnected components.
7+
8+
``ContourSet.antialiased``
9+
~~~~~~~~~~~~~~~~~~~~~~~~~~
10+
11+
... has been removed. Use `~.Collection.get_antialiased` or
12+
`~.Collection.set_antialiased` instead. Note that `~.Collection.get_antialiased`
13+
returns an array.
14+
15+
``tcolors`` and ``tlinewidths`` attributes of ``ContourSet``
16+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
17+
18+
... have been removed. Use `~.Collection.get_facecolor`, `~.Collection.get_edgecolor`
19+
or `~.Collection.get_linewidths` instead.
20+
21+
22+
``calc_label_rot_and_inline`` method of ``ContourLabeler``
23+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
24+
25+
... has been removed without replacement.
26+
27+
28+
``add_label_clabeltext`` method of ``ContourLabeler``
29+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
30+
31+
... has been removed. Use `~.ContourLabeler.add_label` instead.

lib/matplotlib/contour.py

Lines changed: 0 additions & 145 deletions
Original file line numberDiff line numberDiff line change
@@ -406,97 +406,6 @@ def interp_vec(x, xp, fp): return [np.interp(x, xp, col) for col in fp.T]
406406

407407
return angle, Path(xys, codes)
408408

409-
@_api.deprecated("3.8")
410-
def calc_label_rot_and_inline(self, slc, ind, lw, lc=None, spacing=5):
411-
"""
412-
Calculate the appropriate label rotation given the linecontour
413-
coordinates in screen units, the index of the label location and the
414-
8000 label width.
415-
416-
If *lc* is not None or empty, also break contours and compute
417-
inlining.
418-
419-
*spacing* is the empty space to leave around the label, in pixels.
420-
421-
Both tasks are done together to avoid calculating path lengths
422-
multiple times, which is relatively costly.
423-
424-
The method used here involves computing the path length along the
425-
contour in pixel coordinates and then looking approximately (label
426-
width / 2) away from central point to determine rotation and then to
427-
break contour if desired.
428-
"""
429-
430-
if lc is None:
431-
lc = []
432-
# Half the label width
433-
hlw = lw / 2.0
434-
435-
# Check if closed and, if so, rotate contour so label is at edge
436-
closed = _is_closed_polygon(slc)
437-
if closed:
438-
slc = np.concatenate([slc[ind:-1], slc[:ind + 1]])
439-
if len(lc): # Rotate lc also if not empty
440-
lc = np.concatenate([lc[ind:-1], lc[:ind + 1]])
441-
ind = 0
442-
443-
# Calculate path lengths
444-
pl = np.zeros(slc.shape[0], dtype=float)
445-
dx = np.diff(slc, axis=0)
446-
pl[1:] = np.cumsum(np.hypot(dx[:, 0], dx[:, 1]))
447-
pl = pl - pl[ind]
448-
449-
# Use linear interpolation to get points around label
450-
xi = np.array([-hlw, hlw])
451-
if closed: # Look at end also for closed contours
452-
dp = np.array([pl[-1], 0])
453-
else:
454-
dp = np.zeros_like(xi)
455-
456-
# Get angle of vector between the two ends of the label - must be
457-
# calculated in pixel space for text rotation to work correctly.
458-
(dx,), (dy,) = (np.diff(np.interp(dp + xi, pl, slc_col))
459-
for slc_col in slc.T)
460-
rotation = np.rad2deg(np.arctan2(dy, dx))
461-
462-
if self.rightside_up:
463-
# Fix angle so text is never upside-down
464-
rotation = (rotation + 90) % 180 - 90
465-
466-
# Break contour if desired
467-
nlc = []
468-
if len(lc):
469-
# Expand range by spacing
470-
xi = dp + xi + np.array([-spacing, spacing])
471-
472-
# Get (integer) indices near points of interest; use -1 as marker
473-
# for out of bounds.
474-
I = np.interp(xi, pl, np.arange(len(pl)), left=-1, right=-1)
475-
I = [np.floor(I[0]).astype(int), np.ceil(I[1]).astype(int)]
476-
if I[0] != -1:
477-
xy1 = [np.interp(xi[0], pl, lc_col) for lc_col in lc.T]
478-
if I[1] != -1:
479-
xy2 = [np.interp(xi[1], pl, lc_col) for lc_col in lc.T]
480-
481-
# Actually break contours
482-
if closed:
483-
# This will remove contour if shorter than label
484-
if all(i != -1 for i in I):
485-
nlc.append(np.vstack([xy2, lc[I[1]:I[0]+1], xy1]))
486-
else:
487-
# These will remove pieces of contour if they have length zero
488-
if I[0] != -1:
489-
nlc.append(np.vstack([lc[:I[0]+1], xy1]))
490-
if I[1] != -1:
491-
nlc.append(np.vstack([xy2, lc[I[1]:]]))
492-
493-
# The current implementation removes contours completely
494-
# covered by labels. Uncomment line below to keep
495-
# original contour if this is the preferred behavior.
496-
# if not len(nlc): nlc = [lc]
497-
498-
return rotation, nlc
499-
500409
def add_label(self, x, y, rotation, lev, cvalue):
501410
"""Add a contour label, respecting whether *use_clabeltext* was set."""
502411
data_x, data_y = self.axes.transData.inverted().transform((x, y))
@@ -519,12 +428,6 @@ def add_label(self, x, y, rotation, lev, cvalue):
519428
# Add label to plot here - useful for manual mode label selection
520429
self.axes.add_artist(t)
521430

522-
@_api.deprecated("3.8", alternative="add_label")
523-
def add_label_clabeltext(self, x, y, rotation, lev, cvalue):
524-
"""Add contour label with `.Text.set_transform_rotates_text`."""
525-
with cbook._setattr_cm(self, _use_clabeltext=True):
526-
self.add_label(x, y, rotation, lev, cvalue)
527-
528431
def add_label_near(self, x, y, inline=True, inline_spacing=5,
529432
transform=None):
530433
"""
@@ -906,57 +809,9 @@ def __init__(self, ax, *args,
906809
allkinds = property(lambda self: [
907810
[subp.codes for subp in p._iter_connected_components()]
908811
for p in self.get_paths()])
909-
tcolors = _api.deprecated("3.8")(property(lambda self: [
910-
(tuple(rgba),) for rgba in self.to_rgba(self.cvalues, self.alpha)]))
911-
tlinewidths = _api.deprecated("3.8")(property(lambda self: [
912-
(w,) for w in self.get_linewidths()]))
913812
alpha = property(lambda self: self.get_alpha())
914813
linestyles = property(lambda self: self._orig_linestyles)
915814

916-
@_api.deprecated("3.8", alternative="set_antialiased or get_antialiased",
917-
addendum="Note that get_antialiased returns an array.")
918-
@property
919-
def antialiased(self):
920-
return all(self.get_antialiased())
921-
922-
@antialiased.setter
923-
def antialiased(self, aa):
924-
self.set_antialiased(aa)
925-
926-
@_api.deprecated("3.8")
927-
@property
928-
def collections(self):
929-
# On access, make oneself invisible and instead add the old-style collections
930-
# (one PathCollection per level). We do not try to further split contours into
931-
# connected components as we already lost track of what pairs of contours need
932-
# to be considered as single units to draw filled regions with holes.
933-
if not hasattr(self, "_old_style_split_collections"):
934-
self.set_visible(False)
935-
fcs = self.get_facecolor()
936-
ecs = self.get_edgecolor()
937-
lws = self.get_linewidth()
938-
lss = self.get_linestyle()
939-
self._old_style_split_collections = []
940-
for idx, path in enumerate(self._paths):
941-
pc = mcoll.PathCollection(
942-
[path] if len(path.vertices) else [],
943-
alpha=self.get_alpha(),
944-
antialiaseds=self._antialiaseds[idx % len(self._antialiaseds)],
945-
transform=self.get_transform(),
946-
zorder=self.get_zorder(),
947-
label="_nolegend_",
948-
facecolor=fcs[idx] if len(fcs) else "none",
949-
edgecolor=ecs[idx] if len(ecs) else "none",
950-
linewidths=[lws[idx % len(lws)]],
951-
linestyles=[lss[idx % len(lss)]],
952-
)
953-
if self.filled:
954-
pc.set(hatch=self.hatches[idx % len(self.hatches)])
955-
self._old_style_split_collections.append(pc)
956-
for col in self._old_style_split_collections:
957-
self.axes.add_collection(col)
958-
return self._old_style_split_collections
959-
960815
def get_transform(self):
961816
"""Return the `.Transform` instance used by this ContourSet."""
962817
if self._transform is None:

lib/matplotlib/contour.pyi

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -50,20 +50,9 @@ class ContourLabeler:
5050
def locate_label(
5151
self, linecontour: ArrayLike, labelwidth: float
5252
) -> tuple[float, float, float]: ...
53-
def calc_label_rot_and_inline(
54-
self,
55-
slc: ArrayLike,
56-
ind: int,
57-
lw: float,
58-
lc: ArrayLike | None = ...,
59-
spacing: int = ...,
60-
) -> tuple[float, list[ArrayLike]]: ...
6153
def add_label(
6254
self, x: float, y: float, rotation: float, lev: float, cvalue: ColorType
6355
) -> None: ...
64-
def add_label_clabeltext(
65-
self, x: float, y: float, rotation: float, lev: float, cvalue: ColorType
66-
) -> None: ...
6756
def add_label_near(
6857
self,
6958
x: float,
@@ -95,12 +84,6 @@ class ContourSet(ContourLabeler, Collection):
9584
clip_path: Patch | Path | TransformedPath | TransformedPatchPath | None
9685
labelTexts: list[Text]
9786
labelCValues: list[ColorType]
98-
@property
99-
def tcolors(self) -> list[tuple[tuple[float, float, float, float]]]: ...
100-
101-
# only for not filled
102-
@property
103-
def tlinewidths(self) -> list[tuple[float]]: ...
10487

10588
@property
10689
def allkinds(self) -> list[list[np.ndarray | None]]: ...
@@ -109,12 +92,6 @@ class ContourSet(ContourLabeler, Collection):
10992
@property
11093
def alpha(self) -> float | None: ...
11194
@property
112-
def antialiased(self) -> bool: ...
113-
@antialiased.setter
114-
def antialiased(self, aa: bool | Sequence[bool]) -> None: ...
115-
@property
116-
def collections(self) -> list[PathCollection]: ...
117-
@property
11895
def linestyles(self) -> (
11996
None |
12097
Literal["solid", "dashed", "dashdot", "dotted"] |

0 commit comments

Comments
 (0)
0