2013-04-23 248 views
0

我正在尝试使用matplotlib制作3D散点图。我遇到的问题是,所有轴对之间的纵横比不是1:1。谁会知道如何解决这个问题?Matplotlib 3D散点图 - 等宽比例

我的代码看起来是这样的:

from matplotlib.pyplot import * 
from mpl_toolkits.mplot3d import * 

figure(1, figsize=(7,7)) 
ax = gca(projection='3d') 
ax.scatter(FH[:,0],FH[:,1],FH[:,2],s=0.5) 
show() 

我已经尝试添加kwargs像 “纵横= 1” 到脚本的各个部分(即 - 散射(),图(),AX() )但到目前为止还没有真正起作用。

任何帮助,将不胜感激!

谢谢!

+0

也许这是帮助http://stackoverflow.com/questions/7965743/python-matplotlib-setting-aspect-ratio – Johnny 2013-04-23 16:43:08

+0

我还没有尝试过整个subplot例程。这是一个好主意,虽然我不知道它是否可以与3D散点图一起使用。 – astromax 2013-04-23 16:58:03

+0

好的,我已经在链接的页面上尝试了一些东西,它们都是关于改变窗口本身的纵横比,而不是实际的坐标轴。有没有办法调整3D散点图的轴范围?我正在为所有三个轴绘制-x到x。 – astromax 2013-04-23 17:06:20

回答

1

好的 - 我解决了我的问题。我在这里找到它:set matplotlib 3d plot aspect ratio?(在我忽略的帖子中)。

我的问题是如何设置我的情节的边界框(或范围),而不是如何设置纵横比。该黑客是,如果你知道边框的程度,你想用绘制你的数据,情节看不见的点,像这样:

fig=figure(1, figsize=(7,7)) 
ax = fig.gca(projection='3d') 
ax.scatter(FH[:,0],FH[:,1],FH[:,2],s=0.5) 

# plotting white points 
MAX = 3 # I wanted -3 to 3 in each direction 
for direction in (-1, 1): 
    for point in diag(direction * MAX * array([1,1,1])): 
     ax.plot([point[0]], [point[1]], [point[2]], 'w') 

show() 

希望这有助于。对我来说有点奇怪,我无法找到像我的3D散点图那样的函数/ kwarg,但我想这并不意味着该机制不会以某种方式出现。