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

Skip to content

Commit c281412

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

File tree

3 files changed

+34
-241
lines changed

3 files changed

+34
-241
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
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.

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-
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:

0 commit comments

Comments
 (0)
0