o = np.array([0, 0])
buffer = 0.1
lim = np.array([-1, 1]) * (1 + buffer)
ticks = [-1, 0, 1]
datasets = [
[np.array([1, 0]), np.array([0, 1])],
[np.array([1.1, 0.9]), np.array([0.9, 1.1])],
[np.array([1, 1]), np.array([-1, -1])],
]
m = len(datasets)
fig, axes = plt.subplots(ncols=m, figsize=[m*3, 2.5])
for i in range(m):
a, b = datasets[i]
axes[i].arrow(*o, *a, width=0.02, color="black", length_includes_head=True, alpha=0.7)
axes[i].arrow(*o, *b, width=0.02, color="black", length_includes_head=True, alpha=0.7)
axes[i].grid(True, alpha=0.3)
axes[i].set(title=f"cos(a, b) = {cos(a, b):.2f}", xticks=ticks, yticks=ticks, xlim=lim, ylim=lim)
fig.show()