到目前为止我有这个:
x,y,z = data.nonzero()
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x, y, z, zdir='z', c= 'red')
plt.savefig("plot.png")
它创造了:
我想做的是拉伸它,使Z轴高出9倍,并保持X和Y相同。不过,我想保持同样的坐标。
到目前为止我试过这个人:
fig = plt.figure(figsize=(4.,35.))
但这只是扩展了plot.png图像。
下面的代码示例提供了一种相对于其他轴缩放每个轴的方法。但是,要执行此操作,您需要修改Axes3D.get_proj函数。下面是一个基于matplot lib提供的示例的示例:http://matplotlib.org/1.4.0/mpl_toolkits/mplot3d/tutorial.html#line-plots
(这个答案后面有一个简短的版本)
标准输出:
按(1,2,3)缩放:
按(1,1,3)缩放:
我特别喜欢这种方法的原因是, 交换z和x,按(3,1,1)缩放:
下面是代码的简短版本。
请注意,下面的答案简化了修补程序,但使用的基本原理与@ChristianSarofeen的答案相同。
溶液
正如其他答案中已经指出的,它不是当前在matplotlib中实现的特性。但是,由于您所请求的只是一个可以应用于matplotlib所使用的现有投影矩阵的3D转换,并且由于Python的出色特性,这个问题可以用一个简单的oneliner解决:
其中
scale_x
、scale_y
和scale_z
是从0到1的值,它们将相应地沿每个轴重新缩放绘图。ax
只是可以通过ax = fig.gca(projection='3d')
获得的3D轴解释
为了解释,函数
Axes3D
的get_proj
从当前观看位置生成投影矩阵。乘以缩放矩阵:包括渲染器使用的投影的缩放。所以,我们现在要做的是用一个表达式替换原来的
get_proj
函数,这个表达式取原来get_proj
的结果,然后乘以缩放矩阵。示例
用标准参数函数示例说明结果:
对于值
0.5, 0.5, 1
,我们得到:而对于值
0.2, 1.0, 0.2
,我们得到:我看起来默认情况下,mplot3d会在一个非常高的地块的顶部和底部留下相当大的空间。但是,您可以使用
fig.subplots_adjust
技巧来填充该空间,并将顶部和底部扩展到正常绘图区域之外(即top > 1
和bottom < 0
)。对于你的特殊情节,这里可能需要一些尝试和错误。我为x、y和z创建了一些随机数组,其限制与您的图类似,并且发现下面的参数(
bottom=-0.15
,top = 1.2
)似乎工作正常。您可能还需要更改
ax.view_init
以设置一个良好的视角。相关问题 更多 >
编程相关推荐