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

Commitcdf9e30

Browse files
authored
Merge pull request#14610 from meeseeksmachine/auto-backport-of-pr-14579-on-v3.1.x
Backport PR#14579 on branch v3.1.x (Fix inversion of 3d axis.)
2 parents118ccec +6824811 commitcdf9e30

File tree

3 files changed

+82
-83
lines changed

3 files changed

+82
-83
lines changed

‎lib/matplotlib/axis.py

Lines changed: 38 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1875,6 +1875,36 @@ def get_minpos(self):
18751875
raiseNotImplementedError()
18761876

18771877

1878+
def_make_getset_interval(method_name,lim_name,attr_name):
1879+
"""
1880+
Helper to generate ``get_{data,view}_interval`` and
1881+
``set_{data,view}_interval`` implementations.
1882+
"""
1883+
1884+
defgetter(self):
1885+
# docstring inherited.
1886+
returngetattr(getattr(self.axes,lim_name),attr_name)
1887+
1888+
defsetter(self,vmin,vmax,ignore=False):
1889+
# docstring inherited.
1890+
ifignore:
1891+
setattr(getattr(self.axes,lim_name),attr_name, (vmin,vmax))
1892+
else:
1893+
oldmin,oldmax=getter(self)
1894+
ifoldmin<oldmax:
1895+
setter(self,min(vmin,vmax,oldmin),max(vmin,vmax,oldmax),
1896+
ignore=True)
1897+
else:
1898+
setter(self,max(vmin,vmax,oldmax),min(vmin,vmax,oldmin),
1899+
ignore=True)
1900+
self.stale=True
1901+
1902+
getter.__name__=f"get_{method_name}_interval"
1903+
setter.__name__=f"set_{method_name}_interval"
1904+
1905+
returngetter,setter
1906+
1907+
18781908
classXAxis(Axis):
18791909
__name__='xaxis'
18801910
axis_name='x'
@@ -2118,39 +2148,14 @@ def get_ticks_position(self):
21182148
"default":"default","unknown":"unknown"}[
21192149
self._get_ticks_position()]
21202150

2121-
defget_view_interval(self):
2122-
# docstring inherited
2123-
returnself.axes.viewLim.intervalx
2124-
2125-
defset_view_interval(self,vmin,vmax,ignore=False):
2126-
# docstring inherited
2127-
ifignore:
2128-
self.axes.viewLim.intervalx=vmin,vmax
2129-
else:
2130-
Vmin,Vmax=self.get_view_interval()
2131-
ifVmin<Vmax:
2132-
self.axes.viewLim.intervalx= (min(vmin,vmax,Vmin),
2133-
max(vmin,vmax,Vmax))
2134-
else:
2135-
self.axes.viewLim.intervalx= (max(vmin,vmax,Vmin),
2136-
min(vmin,vmax,Vmax))
2151+
get_view_interval,set_view_interval=_make_getset_interval(
2152+
"view","viewLim","intervalx")
2153+
get_data_interval,set_data_interval=_make_getset_interval(
2154+
"data","dataLim","intervalx")
21372155

21382156
defget_minpos(self):
21392157
returnself.axes.dataLim.minposx
21402158

2141-
defget_data_interval(self):
2142-
# docstring inherited
2143-
returnself.axes.dataLim.intervalx
2144-
2145-
defset_data_interval(self,vmin,vmax,ignore=False):
2146-
# docstring inherited
2147-
ifignore:
2148-
self.axes.dataLim.intervalx=vmin,vmax
2149-
else:
2150-
Vmin,Vmax=self.get_data_interval()
2151-
self.axes.dataLim.intervalx=min(vmin,Vmin),max(vmax,Vmax)
2152-
self.stale=True
2153-
21542159
defset_default_intervals(self):
21552160
# docstring inherited
21562161
xmin,xmax=0.,1.
@@ -2445,40 +2450,14 @@ def get_ticks_position(self):
24452450
"default":"default","unknown":"unknown"}[
24462451
self._get_ticks_position()]
24472452

2448-
defget_view_interval(self):
2449-
# docstring inherited
2450-
returnself.axes.viewLim.intervaly
2451-
2452-
defset_view_interval(self,vmin,vmax,ignore=False):
2453-
# docstring inherited
2454-
ifignore:
2455-
self.axes.viewLim.intervaly=vmin,vmax
2456-
else:
2457-
Vmin,Vmax=self.get_view_interval()
2458-
ifVmin<Vmax:
2459-
self.axes.viewLim.intervaly= (min(vmin,vmax,Vmin),
2460-
max(vmin,vmax,Vmax))
2461-
else:
2462-
self.axes.viewLim.intervaly= (max(vmin,vmax,Vmin),
2463-
min(vmin,vmax,Vmax))
2464-
self.stale=True
2453+
get_view_interval,set_view_interval=_make_getset_interval(
2454+
"view","viewLim","intervaly")
2455+
get_data_interval,set_data_interval=_make_getset_interval(
2456+
"data","dataLim","intervaly")
24652457

24662458
defget_minpos(self):
24672459
returnself.axes.dataLim.minposy
24682460

2469-
defget_data_interval(self):
2470-
# docstring inherited
2471-
returnself.axes.dataLim.intervaly
2472-
2473-
defset_data_interval(self,vmin,vmax,ignore=False):
2474-
# docstring inherited
2475-
ifignore:
2476-
self.axes.dataLim.intervaly=vmin,vmax
2477-
else:
2478-
Vmin,Vmax=self.get_data_interval()
2479-
self.axes.dataLim.intervaly=min(vmin,Vmin),max(vmax,Vmax)
2480-
self.stale=True
2481-
24822461
defset_default_intervals(self):
24832462
# docstring inherited
24842463
ymin,ymax=0.,1.

‎lib/mpl_toolkits/mplot3d/axis3d.py

Lines changed: 32 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,6 @@ def __init__(self, adir, v_intervalx, d_intervalx, axes, *args,
6868
rotate_label=None,**kwargs):
6969
# adir identifies which axes this is
7070
self.adir=adir
71-
# data and viewing intervals for this direction
72-
self.d_interval=d_intervalx
73-
self.v_interval=v_intervalx
7471

7572
# This is a temporary member variable.
7673
# Do not depend on this existing in future releases!
@@ -109,6 +106,10 @@ def __init__(self, adir, v_intervalx, d_intervalx, axes, *args,
109106
})
110107

111108
maxis.XAxis.__init__(self,axes,*args,**kwargs)
109+
110+
# data and viewing intervals for this direction
111+
self.d_interval=d_intervalx
112+
self.v_interval=v_intervalx
112113
self.set_rotate_label(rotate_label)
113114

114115
definit3d(self):
@@ -426,42 +427,49 @@ def draw(self, renderer):
426427
renderer.close_group('axis3d')
427428
self.stale=False
428429

429-
defget_view_interval(self):
430-
# docstring inherited
431-
returnself.v_interval
432-
433-
defset_view_interval(self,vmin,vmax,ignore=False):
434-
# docstring inherited
435-
ifignore:
436-
self.v_interval=vmin,vmax
437-
else:
438-
Vmin,Vmax=self.get_view_interval()
439-
self.v_interval=min(vmin,Vmin),max(vmax,Vmax)
440-
441430
# TODO: Get this to work properly when mplot3d supports
442431
# the transforms framework.
443432
defget_tightbbox(self,renderer):
444433
# Currently returns None so that Axis.get_tightbbox
445434
# doesn't return junk info.
446435
returnNone
447436

437+
@property
438+
defd_interval(self):
439+
returnself.get_data_interval()
440+
441+
@d_interval.setter
442+
defd_interval(self,minmax):
443+
returnself.set_data_interval(*minmax)
444+
445+
@property
446+
defv_interval(self):
447+
returnself.get_view_interval()
448+
449+
@d_interval.setter
450+
defv_interval(self,minmax):
451+
returnself.set_view_interval(*minmax)
452+
448453

449454
# Use classes to look at different data limits
450455

451456

452457
classXAxis(Axis):
453-
defget_data_interval(self):
454-
# docstring inherited
455-
returnself.axes.xy_dataLim.intervalx
458+
get_view_interval,set_view_interval=maxis._make_getset_interval(
459+
"view","xy_viewLim","intervalx")
460+
get_data_interval,set_data_interval=maxis._make_getset_interval(
461+
"data","xy_dataLim","intervalx")
456462

457463

458464
classYAxis(Axis):
459-
defget_data_interval(self):
460-
# docstring inherited
461-
returnself.axes.xy_dataLim.intervaly
465+
get_view_interval,set_view_interval=maxis._make_getset_interval(
466+
"view","xy_viewLim","intervaly")
467+
get_data_interval,set_data_interval=maxis._make_getset_interval(
468+
"data","xy_dataLim","intervaly")
462469

463470

464471
classZAxis(Axis):
465-
defget_data_interval(self):
466-
# docstring inherited
467-
returnself.axes.zz_dataLim.intervalx
472+
get_view_interval,set_view_interval=maxis._make_getset_interval(
473+
"view","zz_viewLim","intervalx")
474+
get_data_interval,set_data_interval=maxis._make_getset_interval(
475+
"data","zz_dataLim","intervalx")

‎lib/mpl_toolkits/tests/test_mplot3d.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -851,6 +851,18 @@ def test_line3d_set_get_data_3d():
851851
np.testing.assert_array_equal((x2,y2,z2),line.get_data_3d())
852852

853853

854+
@check_figures_equal(extensions=["png"])
855+
deftest_inverted(fig_test,fig_ref):
856+
# Plot then invert.
857+
ax=fig_test.add_subplot(projection="3d")
858+
ax.plot([1,1,10,10], [1,10,10,10], [1,1,1,10])
859+
ax.invert_yaxis()
860+
# Invert then plot.
861+
ax=fig_ref.add_subplot(projection="3d")
862+
ax.invert_yaxis()
863+
ax.plot([1,1,10,10], [1,10,10,10], [1,1,1,10])
864+
865+
854866
deftest_inverted_cla():
855867
# Github PR #5450. Setting autoscale should reset
856868
# axes to be non-inverted.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp