2016-01-24 519 views
0

如何旋转matplotlib图形的z轴以使其显示为横轴?我已经创建了下面的3D图形: enter image description here旋转matplotlib中的z轴3d图

我试着在

ax.view_init()调整值 但无论什么样的价值观我用,我不能翻转z轴这样这三个轴的方向显示为像在下面的图中的那些: enter image description here

我想改变的所有数据的三个组成部分,这样我使用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() 

回答

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

enter image description here

改变输入顺序:

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

enter image description here

+0

它的工作原理。问题是我想在所有3个轴上保持图形的比例相同。例如,在附图中,数据在z方向上的范围扩大了2.5倍,所以我只是使用ax.set_aspect并将2.5设置为比率。如果我将输入顺序更改为ax.plot(z,x,y),那么如何保持比例不变(这意味着现在的x轴必须​​更长) – Physicist

+0

@Physicist http://stackoverflow.com/a/12371373/1461850 – atomh33ls

+0

我尝试了ax.auto_scale_xyz,但它仍然不能修正长宽比,所以我仍然可以通过改变弹出窗口的大小来改变图的比例。如果我使用set_aspect,那么我只需要确定z轴和x-y平面的比例。如果我不切换绘图顺序,这将起作用,但是如果按照您的建议切换绘图顺序,那么它不会改变我想要的比例。现在我需要x轴比y轴和z轴长2.5倍,并且始终保持整个图形的宽高比不变。 – Physicist