matplotlib(单位长度相等):纵横比“相等”时,z轴不等于x-和y-

当我为3d图形设置相等的长宽比时,z轴不会更改为“相等”。所以这:


fig = pylab.figure()

mesFig = fig.gca(projection='3d', adjustable='box')

mesFig.axis('equal')

mesFig.plot(xC, yC, zC, 'r.')

mesFig.plot(xO, yO, zO, 'b.')

pyplot.show()

给我以下内容: 在此处输入图片说明


显然,z轴的单位长度不等于x和y单位。


如何使三个轴的单位长度相等?我能找到的所有解决方案都行不通。谢谢。


呼如林
浏览 1589回答 3
3回答

不负相思意

我相信matplotlib尚未在3D中正确设置相等的轴...但是我前段时间发现了一个技巧(我不记得在哪里),我已经使用它了。概念是在数据周围创建一个假的立方体边界框。您可以使用以下代码对其进行测试:from mpl_toolkits.mplot3d import Axes3Dfrom matplotlib import cmimport matplotlib.pyplot as pltimport numpy as npfig = plt.figure()ax = fig.gca(projection='3d')ax.set_aspect('equal')X = np.random.rand(100)*10+5Y = np.random.rand(100)*5+2.5Z = np.random.rand(100)*50+25scat = ax.scatter(X, Y, Z)# Create cubic bounding box to simulate equal aspect ratiomax_range = np.array([X.max()-X.min(), Y.max()-Y.min(), Z.max()-Z.min()]).max()Xb = 0.5*max_range*np.mgrid[-1:2:2,-1:2:2,-1:2:2][0].flatten() + 0.5*(X.max()+X.min())Yb = 0.5*max_range*np.mgrid[-1:2:2,-1:2:2,-1:2:2][1].flatten() + 0.5*(Y.max()+Y.min())Zb = 0.5*max_range*np.mgrid[-1:2:2,-1:2:2,-1:2:2][2].flatten() + 0.5*(Z.max()+Z.min())# Comment or uncomment following both lines to test the fake bounding box:for xb, yb, zb in zip(Xb, Yb, Zb):   ax.plot([xb], [yb], [zb], 'w')plt.grid()plt.show()z数据大约比x和y大一个数量级,但是即使使用相等轴选项,matplotlib也会自动缩放z轴:坏但是,如果添加边界框,则会获得正确的缩放比例:
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python