使用 matplotlib 可视化 3D 矢量

Visualization of 3D vector using matplotlib

我正在尝试使用 matplotlib 可视化两个 3D 列向量。 这是向量

v1 = (0, 2 , 1)
v2 = (2, 2, 0)

我从书中得到的上述向量的可视化。

[来源:线性代数导论,第五版(2016 年),作者 Gilbert Strang]

我正在尝试将其形象化。这是代码和情节。


import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as plticker
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

soa = np.array([[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0],
                [0, 0, 0, 0, 0, 0], [0, 0, 4, 0.5, 0.7, 0]])

X, Y, Z, U, V, W = zip(*soa)
ax.quiver(X, Y, Z, U, V, W)
ax.set_xlim([-1, 5])
ax.set_ylim([-1, 5])
ax.set_zlim([-1, 8])
plt.show()

查看:

我不确定这个观点。这是对的吗?如果我在这里错了需要帮助。

连线:

soa = np.array([[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0],
                [0, 0, 0, 0, 0, 0], [0, 0, 4, 0.5, 0.7, 0]])

您正在定义 4 个 3D 向量,其中 3 个的长度为 0,最后一个从 (0, 0, 4) 开始并具有分量 (0.5, 0.7, 0)。所以代码符合你报告的图像。
如果你想绘制向量 v1v2,都从原点开始,你应该使用:

soa = np.array([[0, 0, 0, 0, 2, 1], [0, 0, 0, 2, 2, 0]])

完整代码

import numpy as np
import matplotlib.pyplot as plt


fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

soa = np.array([[0, 0, 0, 0, 2, 1], [0, 0, 0, 2, 2, 0]])

X, Y, Z, U, V, W = zip(*soa)
ax.quiver(X, Y, Z, U, V, W)
ax.set_xlim([-1, 5])
ax.set_ylim([-1, 5])
ax.set_zlim([-1, 8])
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')

plt.show()