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

Skip to content

Commit b238681

Browse files
authored
Merge pull request #28160 from meeseeksmachine/auto-backport-of-pr-28039-on-v3.9.x
Backport PR #28039 on branch v3.9.x (Respect vertical_axis when rotating plot interactively)
2 parents 3607108 + f797554 commit b238681

File tree

2 files changed

+36
-3
lines changed

2 files changed

+36
-3
lines changed

lib/mpl_toolkits/mplot3d/axes3d.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1147,7 +1147,8 @@ def view_init(self, elev=None, azim=None, roll=None, vertical_axis="z",
11471147
if roll is None:
11481148
roll = self.initial_roll
11491149
vertical_axis = _api.check_getitem(
1150-
dict(x=0, y=1, z=2), vertical_axis=vertical_axis
1150+
{name: idx for idx, name in enumerate(self._axis_names)},
1151+
vertical_axis=vertical_axis,
11511152
)
11521153

11531154
if share:
@@ -1318,7 +1319,7 @@ def shareview(self, other):
13181319
raise ValueError("view angles are already shared")
13191320
self._shared_axes["view"].join(self, other)
13201321
self._shareview = other
1321-
vertical_axis = {0: "x", 1: "y", 2: "z"}[other._vertical_axis]
1322+
vertical_axis = self._axis_names[other._vertical_axis]
13221323
self.view_init(elev=other.elev, azim=other.azim, roll=other.roll,
13231324
vertical_axis=vertical_axis, share=True)
13241325

@@ -1523,7 +1524,14 @@ def _on_move(self, event):
15231524
dazim = -(dy/h)*180*np.sin(roll) - (dx/w)*180*np.cos(roll)
15241525
elev = self.elev + delev
15251526
azim = self.azim + dazim
1526-
self.view_init(elev=elev, azim=azim, roll=roll, share=True)
1527+
vertical_axis = self._axis_names[self._vertical_axis]
1528+
self.view_init(
1529+
elev=elev,
1530+
azim=azim,
1531+
roll=roll,
1532+
vertical_axis=vertical_axis,
1533+
share=True,
1534+
)
15271535
self.stale = True
15281536

15291537
# Pan

lib/mpl_toolkits/mplot3d/tests/test_axes3d.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2250,6 +2250,31 @@ def test_view_init_vertical_axis(
22502250
np.testing.assert_array_equal(tickdir_expected, tickdir_actual)
22512251

22522252

2253+
@pytest.mark.parametrize("vertical_axis", ["x", "y", "z"])
2254+
def test_on_move_vertical_axis(vertical_axis: str) -> None:
2255+
"""
2256+
Test vertical axis is respected when rotating the plot interactively.
2257+
"""
2258+
ax = plt.subplot(1, 1, 1, projection="3d")
2259+
ax.view_init(elev=0, azim=0, roll=0, vertical_axis=vertical_axis)
2260+
ax.figure.canvas.draw()
2261+
2262+
proj_before = ax.get_proj()
2263+
event_click = mock_event(ax, button=MouseButton.LEFT, xdata=0, ydata=1)
2264+
ax._button_press(event_click)
2265+
2266+
event_move = mock_event(ax, button=MouseButton.LEFT, xdata=0.5, ydata=0.8)
2267+
ax._on_move(event_move)
2268+
2269+
assert ax._axis_names.index(vertical_axis) == ax._vertical_axis
2270+
2271+
# Make sure plot has actually moved:
2272+
proj_after = ax.get_proj()
2273+
np.testing.assert_raises(
2274+
AssertionError, np.testing.assert_allclose, proj_before, proj_after
2275+
)
2276+
2277+
22532278
@image_comparison(baseline_images=['arc_pathpatch.png'],
22542279
remove_text=True,
22552280
style='mpl20')

0 commit comments

Comments
 (0)