【问题标题】:Changing center of rotation in a Matplotlib 3D plot在 Matplotlib 3D 图中更改旋转中心
【发布时间】:2014-03-24 21:17:04
【问题描述】:

我在 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 中都不可能,是否还有另一个库可以完成我想要的?

【问题讨论】:

    标签: python matplotlib 3d


    【解决方案1】:

    不确定这是否能满足您的需求,但您可以在第一次绘图时定义中心。这里,“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)
    

    【讨论】:

      【解决方案2】:

      我过去在自定义 mplot3d 方面也遇到过麻烦,相当不成功..

      最后,如果在 matplotlib 中这些都不可能,是否还有另一个库可以完成我想要的?

      您可以通过mayavi 做到这一点

      here 是一个相关的 stackoverflow 答案,用于自定义您与情节的交互方式

      还有各种有用的 tips and tricks 用于一般动画和使用 mayavi

      (如果没有用,请见谅)

      【讨论】:

      • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
      • 这并没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方发表评论 - 您可以随时对自己的帖子发表评论,一旦您有足够的reputation,您就可以comment on any post
      • 我接受这个答案是因为如果我想要的东西在 Matplotlib 中是不可能的,我确实要求提供替代方案
      猜你喜欢
      • 1970-01-01
      • 2012-12-18
      • 1970-01-01
      • 2018-10-03
      • 1970-01-01
      • 1970-01-01
      • 2013-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多