使用python matplotlib在三维打印中均匀缩放轴

使用python matplotlib在三维打印中均匀缩放轴,python,matplotlib,plot,Python,Matplotlib,Plot,我正在使用Axes3D绘制一组三维坐标(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(

我正在使用Axes3D绘制一组三维坐标(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方向上浪费大量空间。如何避免这种情况并获得均匀缩放的轴?

中有一个问题,因此类似于。。。但是我找不到它。所以我附上了一些代码,我知道这是你的问题(缩放的部分不是我的,而是我提到的另一篇文章)

这就是结果:


是否希望轴具有相同的比例?或者是相同的尺寸?我希望它们有相同的比例。然后,由于我有非均匀分布的数据,不想在绘图中浪费空间,我将有非常不同长度的轴。不幸的是,这不是我想要的。这样我总是得到一个立方体图,也就是说,所有的轴都有相同的长度。但是,我希望三个轴具有相同的缩放比例,也就是说,我希望绘图背景中的小平铺为立方体(如您的示例中所示),但另一方面,我希望每个轴的长度不超过绘制数据所需的长度。在你的例子中,我想要z轴的范围,比如说,从-3到7。哦,好的,下次你可以添加你想要的绘图。对不起,我不知道该怎么做。我认为这不是一个简单的方法,因为有一些东西是在
mplot3d
中硬编码的。我建议您在
matplotlib
的邮件列表或gitter聊天中询问。
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()