如何在matplotlib

时间:2018-05-03 15:07:19

标签: python matplotlib

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

查看垂直轴与水平轴相比如何压扁。轴('等于')似乎没有效果。

See how the vertical axis is squashed compared to the horizontal. axis('equal') seems to have no effect.

1 个答案:

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

给出了:

enter image description here