使用python matplotlib在3d绘图中均匀缩放的轴

时间:2015-03-17 08:43:44

标签: python matplotlib plot

我使用Axes3D绘制一组3d坐标(x,y,z)。我的代码是

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

x,y,z=data[::1,0],data[::1,1],data[::1,2]
fig=plt.figure(figsize=(10,10))
ax=fig.add_subplot(111,projection='3d')
ax.scatter(x,y,z,s=0.1,c=z,cmap='hot',marker='+')
plt.show()

我希望所有三个轴具有相同的缩放比例。现在,问题是数据具有大的纵横比,即x和y坐标的变化大约是z坐标变化的10倍。如果我把

mi=np.min(data)
ma=np.max(data)    
ax.set_xlim(mi,ma)
ax.set_ylim(mi,ma)
ax.set_zlim(mi,ma)

这将导致均匀缩放的轴,但会在z方向上浪费大量空间。我怎样才能避免这种情况并获得均匀缩放的轴?

1 个答案:

答案 0 :(得分:0)

在SO中有一个类似的问题......但我找不到它。所以我附上一些代码,我理解的是你的问题(缩放的部分不是我的,但是我提到的其他帖子)

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

data =np.random.rand(100,3)

x,y,z= 10*data[:,0], 20*data[:,1], 5*data[:,2]
fig=plt.figure(figsize=(10,10))
ax=fig.add_subplot(111,projection='3d')
ax.scatter(x,y,z)

# Fix aspect ratio
max_range = np.array([x.max()-x.min(), y.max()-y.min(),
                      z.max()-z.min()]).max() / 2.0
mean_x = x.mean()
mean_y = y.mean()
mean_z = z.mean()
ax.set_xlim(mean_x - max_range, mean_x + max_range)
ax.set_ylim(mean_y - max_range, mean_y + max_range)
ax.set_zlim(mean_z - max_range, mean_z + max_range)

plt.show()

而且,结果就是这样:

enter image description here

相关问题