Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit604299f

Browse files
committed
BUG: when autoscaling, handle tiny but non-zero values;closes#4318
1 parentcefab28 commit604299f

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

‎lib/matplotlib/tests/test_transforms.py‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -552,6 +552,15 @@ def test_transform_angles():
552552
assert_raises(ValueError,t.transform_angles,angles,points[0:2, :])
553553

554554

555+
deftest_nonsingular():
556+
# test for zero-expansion type cases; other cases may be added later
557+
zero_expansion=np.array([-0.001,0.001])
558+
cases= [(0,np.nan), (0,0), (0,7.9e-317)]
559+
forargsincases:
560+
out=np.array(mtrans.nonsingular(*args))
561+
assert_array_equal(out,zero_expansion)
562+
563+
555564
if__name__=='__main__':
556565
importnose
557566
nose.runmodule(argv=['-s','--with-doctest'],exit=False)

‎lib/matplotlib/transforms.py‎

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2726,16 +2726,23 @@ def nonsingular(vmin, vmax, expander=0.001, tiny=1e-15, increasing=True):
27262726
27272727
Returns *vmin*, *vmax*, expanded and/or swapped if necessary.
27282728
2729-
If either input is inf or NaN, or if both inputs are 0,
2730-
returns -*expander*, *expander*.
2729+
If either input is inf or NaN, or if both inputs are 0 or very
2730+
close to zero, itreturns -*expander*, *expander*.
27312731
'''
27322732
if (notnp.isfinite(vmin))or (notnp.isfinite(vmax)):
27332733
return-expander,expander
2734+
27342735
swapped=False
27352736
ifvmax<vmin:
27362737
vmin,vmax=vmax,vmin
27372738
swapped=True
2738-
ifvmax-vmin<=max(abs(vmin),abs(vmax))*tiny:
2739+
2740+
maxabsvalue=max(abs(vmin),abs(vmax))
2741+
ifmaxabsvalue< (1e6/tiny)*np.MachAr(float).xmin:
2742+
vmin=-expander
2743+
vmax=expander
2744+
2745+
elifvmax-vmin<=maxabsvalue*tiny:
27392746
ifvmax==0andvmin==0:
27402747
vmin=-expander
27412748
vmax=expander

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp