繁体   English   中英

Matplotlib图有斜线

[英]Matplotlib plot has slanted lines

我正在尝试将坐标的投影图绘制到一条线上,但是由于某些原因,Matplotlib会以稍微倾斜的方式绘制投影图。 理想情况下,我希望(蓝色)投影垂直于(绿色)线。 这是带有示例数据的外观的图像:

在此处输入图片说明

如您所见,蓝线和绿线之间的角度略为钝角,而不是右角。 我尝试将rotation参数与annotate函数配合使用,但这没有帮助。 该图的代码如下,尽管由于未生成随机数生成器,因此数据看起来可能有些不同:

import numpy as np
import matplotlib.pyplot as plt

prefs = {'color':'purple','edgecolors':'black'}
X = np.dot(np.random.rand(2,2), np.random.rand(2,50)).T
pts = np.linspace(-1,1)
v1_m = 0.8076549717643662

plt.scatter(X[:,0],X[:,1],**prefs)
plt.plot(pts, [v1_m*x for x in pts], color='lightgreen')

for x,y in X:
    # slope of connecting line
    # y = mx+b
    m = -np.reciprocal(v1_m)
    b = y-m*x

    # find intersecting point
    zx = b/(v1_m-m)
    zy = v1_m*zx

    # draw line
    plt.annotate('',(zx,zy),(x,y),arrowprops=dict(linewidth=2,arrowstyle='-',color='lightblue'))

plt.show()

问题出在不相等的轴上,这使得它们看起来好像不是直角。 使用plt.axis('equal')在x和y轴上具有相等的轴跨度,并在高度和宽度上具有相等的正方形。 plt.axis('scaled')工作方式相同。 正如@CedricZoppolo指出的那样,您应该在plt.show()之前设置相等的纵横比。 根据文档,将宽高比设置为“相等”意味着

x和y从数据到绘图单位的比例缩放

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(8,8))

# Your code here
plt.axis('equal')
plt.show()

在此处输入图片说明

不必选择方形图形,因为它也适用于矩形图形,因为

fig = plt.figure(figsize=(8,6))
# Your code here
plt.axis('equal')
plt.show()

在此处输入图片说明

蓝线不垂直是由于轴不相等。

您只需要在plt.show()之前添加以下行

plt.gca().set_aspect('equal')

您可以在下面看到结果图:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM