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

Appearance settings

Commit 63156f2

Browse filesBrowse files
authored
Respect vertical_axis when rotating plot interactively (#28039)
* Add rotation test with vertical_axis * Update test_axes3d.py * Add fix, _on_move used vew_init without all arguments * Add whats new * Delete respect_vertical_axis_when_rotating_interactively.rst
1 parent f00b22d commit 63156f2
Copy full SHA for 63156f2

File tree

2 files changed

+36
-3
lines changed
Filter options

2 files changed

+36
-3
lines changed

‎lib/mpl_toolkits/mplot3d/axes3d.py

Copy file name to clipboardExpand all lines: lib/mpl_toolkits/mplot3d/axes3d.py
+11-3Lines 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

Copy file name to clipboardExpand all lines: lib/mpl_toolkits/mplot3d/tests/test_axes3d.py
+25Lines 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 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.