在3D图中更改旋转中心

5

我在matplotlib中有一个3D线图,使用以下代码创建:

    def view(self):
        from mpl_toolkits.mplot3d import Axes3D  #noqa
        import matplotlib.pyplot as plt

        ax = plt.figure().gca(projection='3d')
        history = np.array(self.position_history)
        x, y ,z = history[:, 0], history[:, 1], history[:, 2]
        ax.plot(x, y, z)

        plt.show()

这里的history是一个Mx3点数组。它可以正常工作并弹出预期的绘图。我能够通过单击和拖动交互方式修改方位角和仰角。我可以通过右键单击和拖动来缩放。

然而,我想知道是否有可能修改平移和缩放的中心点?我想将其缩放到右上角,然后以右上角为旋转中心进行平移。如果您曾经使用过SolidWorks或其他CAD程序,则我需要的就是这种行为。这可行吗?如果无法通过交互方式实现,我是否可以编程实现?

最后,如果Matplotlib都无法实现我的需求,是否有另一个库可以实现我想要的效果?

2个回答

4

不确定这个方法是否符合您的需求,但您可以在第一次绘图时定义中心。在此示例中,“c_x”是x轴旋转中心,而-/+ 200定义了沿两个方向各为200个单位的轴。y和z同理。

如果您在绘图之前让用户选择中心,那么这可能是一个粗略的解决方法。

http://matplotlib.org/api/axes_api.html?highlight=set_xbound#matplotlib.axes.Axes.set_xbound

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')    
ax.autoscale(enable=False,axis='both')  #you will need this line to change the Z-axis
ax.set_xbound(c_x-200, c_x+200)
ax.set_ybound(c_y-200, c_y+200)
ax.set_zbound(c_z-200, c_z+200)

3

过去我曾尝试过自定义mplot3d,但没有成功。

最后,如果在matplotlib中无法实现这些,是否有另一个库可以完成我的需求?

Mayavi可以做到这一点。

这里有一个相关的stackoverflow答案,可以自定义如何与图形交互。

还有一些有用的提示和技巧,可用于动画制作和使用mayavi库。

(如果这些内容对您没有帮助,则请谅解)


3
虽然这个链接可能回答了问题,但最好在这里包含答案的基本部分并提供链接以供参考。仅有链接的答案如果链接页面发生更改可能会变得无效。 - LittleBobbyTables - Au Revoir
1
这并没有提供问题的答案。如果要批评或请求作者澄清,请在他们的帖子下留言 - 您始终可以在自己的帖子上发表评论,并且一旦您拥有足够的声望,您将能够评论任何帖子 - Rico
我接受这个答案,因为我确实要求了Matplotlib中不可能实现的替代方案。 - jminardi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接