Closed
Description
Bug report
B 7624 ug summary
I found multiple issues of autoscale_view
for Line3DCollection
that
autoscale_view
takes no effect for plots withLine3DCollection
.autoscale_view
even breaks the original bounds and forces it to be a unit cube if it is used withax.set_autoscale_on(True)
.
This is reported from the downstream issue sympy/sympy#19106
Code for reproduction
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from mpl_toolkits.mplot3d.art3d import Line3DCollection
z = np.linspace(-4 * np.pi, 4 * np.pi, 100)
x = np.sin(z)
y = np.cos(z)
segments = []
for i in range(len(z)-1):
z0, x0, y0 = z[i], x[i], y[i]
z1, x1, y1 = z[i+1], x[i+1], y[i+1]
segments.append([(x0, y0, z0), (x1, y1, z1)])
collection = Line3DCollection(segments)
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.add_collection3d(collection)
ax.set_xlim3d(-1, 1)
ax.set_ylim3d(-1, 1)
ax.set_zlim3d(-4*np.pi, 4*np.pi)
ax.set_autoscale_on(True)
ax.autoscale_view()
plt.show()
Actual outcome
Expected outcome
Matplotlib version
- Operating system:
- Matplotlib version: 3.2
- Matplotlib backend (
print(matplotlib.get_backend())
): module://ipykernel.pylab.backend_inline - Python version: 3.7.7
- Jupyter version (if applicable):
- Other libraries: