Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 0482fff

Browse files
committed
Improve autoscaling for high order Bezier curves
1 parent ad95791 commit 0482fff

File tree

8 files changed

+12
-5
lines changed

8 files changed

+12
-5
lines changed

lib/matplotlib/axes/_base.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import matplotlib.image as mimage
2323
import matplotlib.lines as mlines
2424
import matplotlib.patches as mpatches
25-
import matplotlib.path as mpath
2625
from matplotlib.rcsetup import cycler, validate_axisbelow
2726
import matplotlib.spines as mspines
2827
import matplotlib.table as mtable
@@ -2374,10 +2373,18 @@ def _update_patch_limits(self, patch):
23742373
((not patch.get_width()) and (not patch.get_height()))):
23752374
return
23762375
p = patch.get_path()
2377-
vertices = p.vertices if p.codes is None else p.vertices[np.isin(
2378-
p.codes, (mpath.Path.CLOSEPOLY, mpath.Path.STOP), invert=True)]
2379-
if not vertices.size:
2380-
return
2376+
# Get all vertices on the path
2377+
# Loop through each sement to get extrema for Bezier curve sections
2378+
vertices = []
2379+
for curve, code in p.iter_bezier():
2380+
# Get distance along the curve of any extrema
2381+
_, dzeros = curve.axis_aligned_extrema()
2382+
# Calculate vertcies of start, end and any extrema in between
2383+
vertices.append(curve([0, *dzeros, 1]))
2384+
2385+
if len(vertices):
2386+
vertices = np.row_stack(vertices)
2387+
23812388
patch_trf = patch.get_transform()
23822389
updatex, updatey = patch_trf.contains_branch_seperately(self.transData)
23832390
if not (updatex or updatey):

0 commit comments

Comments
 (0)