Matplotlib plot有斜线

2024-05-13 04:53:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将坐标的投影绘制到一条线上,但由于某些原因,Matplotlib以稍微倾斜的方式绘制投影。理想情况下,我希望(蓝色)投影垂直于(绿色)线。下面是一张它与示例数据的关系图:

enter image description here

正如你所看到的,蓝线和绿线之间的角度是稍微钝角而不是直角。我试着在annotate函数中使用rotation参数,但这没有帮助。此绘图的代码如下所示,但由于随机生成器未设定种子,因此数据看起来可能有些不同:

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

Tags: 数据importasnp绘制pltrandompts
2条回答

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

same scaling from data to plot units for x and y

import numpy as np
import matplotlib.pyplot as plt

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

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

enter image description here

选择一个正方形的图形是没有必要的,因为它也适用于矩形图形作为

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

enter image description here

蓝线不垂直是因为轴线不相等。你知道吗

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

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

下面您可以看到结果图:

enter image description here

相关问题 更多 >