使用matplotlib.pyplot我需要绘制基本的2D矢量空间图,我需要x轴和y轴单位在视觉上长度相等(1到1),这样每个网格单元看起来都是方形的(不是压扁的) ,不拉长)。要清楚,我不需要或想要一个方形图,但无论图形纵横比或任一轴的长度,我都要求单位始终看起来正方形。
我尝试使用过轴('等于'),但这并不起作用。请注意,我在Jupyter笔记本中工作,这似乎想要限制比例的高度。 (这可能对pyplot有一些干扰限制?我不知道)。我已经和它搏斗了好几个小时,但我找不到任何有用的东西。
def plot_vector2d(vector2d, origin=[0, 0], **options):
return plt.arrow(origin[0], origin[1], vector2d[0], vector2d[1],
head_width=0.2, head_length=0.3, length_includes_head=True,
width=0.02,
**options)
plot_vector2d([1,0], color='g')
plot_vector2d([0,1], color='g')
plot_vector2d([2,10], color='r')
plot_vector2d([3,1], color='r')
plt.axis([-3, 6, -2, 11], 'equal')
plt.xticks(np.arange(-3, 7, 1))
plt.yticks(np.arange(-2, 11, 1))
plt.grid()
plt.show()
查看垂直轴与水平轴相比如何压扁。轴('等于')似乎没有效果。
答案 0 :(得分:2)
您需要将轴的纵横比设置为"等于"。您可以使用set_aspect
执行此操作。文档说明:
'相等'从数据到x和y的绘图单位的相同缩放
然后您的代码变为:
def plot_vector2d(vector2d, origin=[0, 0], **options):
return plt.arrow(origin[0], origin[1], vector2d[0], vector2d[1],
head_width=0.2, head_length=0.3, length_includes_head=True,
width=0.02,
**options)
plot_vector2d([1,0], color='g')
plot_vector2d([0,1], color='g')
plot_vector2d([2,10], color='r')
plot_vector2d([3,1], color='r')
plt.axis([-3, 6, -2, 11], 'equal')
plt.grid()
plt.gca().set_aspect("equal")
plt.show()
给出了: