我正在轨道中的特定点生成航天器轨迹。 我有一段代码在3dMatplotlib中产生一个3d线图(这里显示了我的代码和图形的一部分(我已经大大减少了X,Y,Z中的点数到每个阵列~20个以简化它更容易复制和粘贴原理相同):
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.axes3d import Axes3D
from numpy import *
XdS=[14.54156005, 14.53922242, 14.53688586, 14.53454823, 14.5322106 , 14.52987297, 14.52753426, 14.52519555, 14.52285792, 14.52051922, 14.51818051, 14.51584073, 14.51350095, 14.51116117, 14.5088214 , 14.50648162, 14.50414076, 14.50179991, 14.49945906, 14.49711821]
YdS=[31.13035144, 31.12920087, 31.12805245, 31.12690188, 31.12575131, 31.12460073, 31.12345016, 31.12229745, 31.12114473, 31.11999201, 31.1188393 , 31.11768443, 31.11652957, 31.11537471, 31.11421984, 31.11306283, 31.11190582, 31.11074882, 31.10959181, 31.1084348]
ZdS=[3.94109446, 3.94060316, 3.94011186, 3.93962083, 3.93912926, 3.93863796, 3.93814639, 3.93765482, 3.93716325, 3.93667169, 3.93617985, 3.93568828, 3.93519618, 3.93470434, 3.9342125 , 3.9337204 , 3.93322829, 3.93273592, 3.93224382, 3.93175144]
fig=plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot(XdS,YdS,ZdS,c='black',linewidth=2)
ax.set_xlabel('XKSM (Saturn Radii)')
ax.set_ylabel('YKSM (Saturn Radii)')
ax.set_zlabel('ZKSM (Saturn Radii)')
plt.show()
我想要做的是能够在该图的边缘/平面上绘制2d图X对Y,X对Z和Y对Z,即显示3轨迹在3中看起来如何2d平面并在当前图的每个轴上显示它们。 (它实际上并不像听起来那么复杂,因为我已经有了轨迹的X,Y,Z值)。在这里我找到了一个类似的例子来实现这一点,但是利用了所有的3d绘图函数,可以在http://matplotlib.org/1.3.1/examples/mplot3d/contour3d_demo3.html获得:如果你看看检查链接,它将显示我想要实现的图像类型。
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
from matplotlib import cm
fig = plt.figure()
ax = fig.gca(projection='3d')
X, Y, Z = axes3d.get_test_data(0.05)
ax.plot_surface(X, Y, Z, rstride=8, cstride=8, alpha=0.3)
cset = ax.contour(X, Y, Z, zdir='z', offset=-100, cmap=cm.coolwarm)
cset = ax.contour(X, Y, Z, zdir='x', offset=-40, cmap=cm.coolwarm)
cset = ax.contour(X, Y, Z, zdir='y', offset=40, cmap=cm.coolwarm)
ax.set_xlabel('X')
ax.set_xlim(-40, 40)
ax.set_ylabel('Y')
ax.set_ylim(-40, 40)
ax.set_zlabel('Z')
ax.set_zlim(-100, 100)
plt.show()
理论上这正是我所需要的,就像它对3d情况的平面视图一样。但是我不能在3d轴上实现2d线图,也不能在2d图中使用offset命令(得到错误:TypeError:没有线属性"偏移")。
是否有2d相当于3d“offset”命令,是否可以按照我的要求在3d图的平面上绘制2d值?还有一种方法可以绘制初始化3d投影的2d线吗?任何人都可以提出任何想法/指向我一般的任何方向来帮助我实现这个目标吗?
如果这篇文章的任何部分出现故障,请提前致以诚挚的谢意,这是我的第一个!
答案 0 :(得分:2)
试试这个:
xmin = min(XdS)
ymax = max(YdS)
zmin = min(ZdS)
length_of_array = len(XdS)
xmin_array = [xmin] * length_of_array
ymax_array = [ymax] * length_of_array
zmin_array = [zmin] * length_of_array
fig=plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot(XdS,YdS,ZdS,zdir='z', c='r')
ax.plot(XdS,YdS,zmin_array, zdir='z', c='g')
ax.plot(xmin_array, YdS, ZdS, 'y')
ax.plot(XdS,ymax_array,ZdS,'b')
ax.set_xlabel('XKSM (Saturn Radii)')
ax.set_ylabel('YKSM (Saturn Radii)')
ax.set_zlabel('ZKSM (Saturn Radii)')
plt.show()