旋转一个三维图形的z轴。

3
如何将matplotlib图形的z轴旋转,使其显示为水平轴?我创建了以下3D图形: enter image description here 我尝试调整以下代码中的值:
ax.view_init()
但无论我使用什么值,都无法翻转z轴,使得三个轴的方向与下图中的轴相同: enter image description here 我考虑过改变所有数据的三个分量,以便使用x轴来绘制数据的z分量,但这样做会对我的许多计算非常不方便,更重要的是,我不知道如何使用ax.set_aspect来保持整个图形在一个矩形框中的相同比例(矩形框之所以是矩形,是因为(原始)数据的z分量通常跨越的范围比x和y分量大)。
那么,如何将z轴旋转90度?

编辑:

只是为了澄清我的问题。使用答案中提供的示例,我有以下代码可以生成一个具有相同比例的图形,并且即使调整弹出窗口的大小,该图形在三个轴上仍然具有相同的纵横比并且看起来相同。这就是我想要的,但是希望将z轴旋转90度使其水平显示(期望的坐标系统看起来像上图中的电磁波图)。如果我交换三个轴的绘制顺序,我确实可以得到一个水平的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()

这个回答解决了你的问题吗?在3D matplotlib图中交换y和z轴的位置 - bluenote10
1个回答

0

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

使用这个例子

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()

enter image description here

改变输入顺序:
ax.plot_wireframe(X, Z, Y, rstride=10, cstride=10)

enter image description here


它能工作。问题是我想在所有三个轴上保持图形的比例尺不变。例如,在我附上的图中,数据在z方向上跨越了一个更大的范围,增加了2.5倍,所以我只需使用ax.set_aspect并将2.5设置为比例。如果我改变输入顺序为ax.plot(z,x,y),那么如何保持比例尺不变(这意味着现在x轴必须更长)? - Physicist
我尝试了ax.auto_scale_xyz,但它仍然不能修复纵横比,所以我仍然可以通过改变弹出窗口的大小来改变图形的比例。如果我使用set_aspect,那么我只是固定了z轴和x-y平面的比例。如果我不改变绘图顺序,这个方法是有效的,但是一旦我按照你的建议改变了绘图顺序,它就不能改变我想要的比例。现在我需要x轴的长度是y轴和z轴的2.5倍,并且始终保持整个图形的纵横比不变。 - Physicist
@物理学家 如果需要的话,你可以提供一些代码,在一个新的问题中。 - Lee
我编辑了这个问题。在你的例子中,z轴被“压缩”了。我想让所有三个轴具有相同的比例尺度,即使我调整弹出窗口的大小,但是z轴应该旋转到水平方向。 - Physicist

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