সরল ফিক্স!
আমি এই সংস্করণ 3.3.1 সংস্করণে পেতে পরিচালিত করেছি।
দেখে মনে হচ্ছে এই সমস্যাটি সম্ভবত PR # 17172 এ সমাধান হয়েছে ; ax.set_box_aspect([1,1,1])
দিকটি সঠিক কিনা তা নিশ্চিত করতে আপনি ফাংশনটি ব্যবহার করতে পারেন ( set_aspect ফাংশনের জন্য নোটগুলি দেখুন )। @Karlo এবং / অথবা @ মেটে উলহাক দ্বারা প্রদত্ত বাউন্ডিং বক্স ফাংশন (গুলি) এর সাথে যখন ব্যবহার করা হয়, প্লটগুলি এখন 3 ডি তে সঠিক দেখাচ্ছে!
ন্যূনতম কাজের উদাহরণ
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d
import numpy as np
def set_axes_equal(ax: plt.Axes):
"""Set 3D plot axes to equal scale.
Make axes of 3D plot have equal scale so that spheres appear as
spheres and cubes as cubes. Required since `ax.axis('equal')`
and `ax.set_aspect('equal')` don't work on 3D.
"""
limits = np.array([
ax.get_xlim3d(),
ax.get_ylim3d(),
ax.get_zlim3d(),
])
origin = np.mean(limits, axis=1)
radius = 0.5 * np.max(np.abs(limits[:, 1] - limits[:, 0]))
_set_axes_radius(ax, origin, radius)
def _set_axes_radius(ax, origin, radius):
x, y, z = origin
ax.set_xlim3d([x - radius, x + radius])
ax.set_ylim3d([y - radius, y + radius])
ax.set_zlim3d([z - radius, z + radius])
u = np.linspace(0, 2*np.pi, 100)
v = np.linspace(0, np.pi, 100)
x = np.outer(np.cos(u), np.sin(v))
y = np.outer(np.sin(u), np.sin(v))
z = np.outer(np.ones(np.size(u)), np.cos(v))
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot_surface(x, y, z)
ax.set_box_aspect([1,1,1])
set_axes_equal(ax)
plt.show()
equal
বিবৃতিটির প্রয়োজন নেই - এটি সর্বদা সমান হবে।