【问题标题】:rotating the z-axis in matplotlib 3d figure在matplotlib 3d图中旋转z轴
【发布时间】:2016-01-24 21:08:57
【问题描述】:

如何旋转 matplotlib 图形的 z 轴,使其显示为水平轴?我创建了以下 3d 图:

我尝试调整

中的值

ax.view_init() 但无论我使用什么值,我都无法翻转 z 轴,因此三个轴的方向如下图所示:

我想改变所有数据的三个分量,以便我使用 x 轴来绘制数据的 z 分量,但是这样会很不方便我的许多计算,更重要的是,我不知道如何使用 ax.set_aspect 使整个图形在矩形框中保持相同的比例(矩形,因为数据的(原始)z 分量通常跨越比 x 和 y 分量更大的范围)。

那么如何将 z 轴旋转(90 度)?

编辑:

只是为了澄清我的问题。使用答案中使用的示例,我有以下代码可以生成一个在所有三个轴上都具有相同比例的图形,即使我调整弹出窗口的大小,该图形仍然具有三个相同的纵横比轴和看起来一样。这就是我想要的,但是 z 轴旋转了 90 度,所以它看起来是水平的(所需的坐标系看起来像上图 EM 波中所示的坐标系)。如果我切换三个轴的绘图顺序,我会得到一个水平的 z 轴(它被绘制为 x 轴),但是我不能使用 ax.set_aspect 来改变比例。

from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
X, Y, Z = axes3d.get_test_data(0.05)
ax.plot_wireframe(X, Y, Z, rstride=10, cstride=10)
ax.set_xlim(-30,30)
ax.set_ylim(-30,30)
ax.set_zlim(-90,90)
ax.set_aspect(3, 'box-forced')
plt.show()

【问题讨论】:

标签: python matplotlib rotation figure z-axis


【解决方案1】:

您可以更改传递给绘图函数的 X、Y、Z 值的顺序吗?

使用this example

from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
X, Y, Z = axes3d.get_test_data(0.05)
ax.plot_wireframe(X, Y, Z, rstride=10, cstride=10)

plt.show()

改变输入顺序:

ax.plot_wireframe(X, Z, Y, rstride=10, cstride=10)

【讨论】:

  • 它有效。问题是我想在所有 3 个轴上保持我的图形比例相同。例如,在我附上的图中,数据在z方向上跨越了2.5倍的更大范围,所以我只是使用ax.set_aspect并将2.5设置为比率。如果我将输入顺序更改为 ax.plot(z,x,y),那么如何保持比例不变(这意味着现在 x 轴必须更长)
  • 我尝试了ax.auto_scale_xyz,但它仍然不能修复纵横比,所以我仍然可以通过简单地改变弹出窗口的大小来改变图形的比例。如果我使用 set_aspect,那么我只是固定 z 轴和 x-y 平面的比率。如果我不切换情节顺序,这可行,但是一旦我按照您的建议切换情节顺序,那么它就不会改变我想要的比例。现在我需要 x 轴比 y 轴和 z 轴长 2.5 倍,并且始终保持整个图形的纵横比不变。
  • @Physicist 也许您可以在新问题中提供some code,如有必要。
  • 我编辑了这个问题。在您的示例中,z 轴是“压缩的”。我希望所有三个轴都具有相同的比例,即使我调整了弹出窗口的大小,但 z 轴旋转到水平方向。
猜你喜欢
  • 1970-01-01
  • 2016-04-21
  • 1970-01-01
  • 2012-12-18
  • 2021-07-22
  • 2014-08-11
  • 2015-02-24
  • 1970-01-01
  • 2022-01-22
相关资源
最近更新 更多