【问题标题】:How to draw a circle with matplotlib.pyplot [duplicate]如何用matplotlib.pyplot画一个圆[重复]
【发布时间】:2020-09-20 22:18:04
【问题描述】:

我正在尝试使用 pyplot 画一个圆圈。但是,在情节中看起来像一个椭圆。

变量 r 可以有任何值。

theta = np.linspace(0, 2*np.pi, 100)
   
r= r/2

x = r*np.cos(theta)
y = r*np.sin(theta)
   
plt.plot(x,y)

【问题讨论】:

    标签: python matplotlib geometry


    【解决方案1】:

    使用pyplot.axis('equal') 方法(documentation)。这将告诉 matplotlib 自动保持 x 和 y 轴缩放相等,即使您更改轴限制也将起作用:

    import matplotlib.pyplot as plt
    import numpy as np
    
    theta = np.linspace(0, 2*np.pi, 100)
    r= 2
    x = r*np.cos(theta)
    y = r*np.sin(theta)
    plt.plot(x,y)
    plt.axis('equal')
    plt.show()
    

    如您所见,即使 x 和 y 轴有不同的限制,这也会导致圆成为圆。如果将其他项目添加到绘图中,它还允许自动缩放,并且当通过添加轴标签或绘图标题修改绘图区域时,它将保持纵横比。

    Matplotlib 文档中还有其他示例:Axis Equal Demo

    另一个选项是使用pyplot.axis('scaled'),它会更改绘图框的尺寸以使轴缩放相等。不同的是,此选项在设置后会阻止进一步的自动缩放。

    例如,对于“缩放”轴,matplotlib 将尊重您为 x 轴和 y 轴范围指定的值:

    import matplotlib.pyplot as plt
    import numpy as np
    
    theta = np.linspace(0, 2*np.pi, 100)
    r= 2
    x = r*np.cos(theta)
    y = r*np.sin(theta)
    plt.plot(x,y)
    plt.axis('scaled')
    plt.ylim(-3, 3)
    plt.xlim(-3, 3)
    plt.show()
    

    【讨论】:

    • 我想知道是否有办法在 y 轴上也有(-3 到 3)。我的意思是相同的 x 和 y 轴。
    • @proxima - 这就是“缩放”选项的作用。请参阅我的更新答案以获取示例。
    • 有没有办法自动缩放两个轴?
    • 我不完全确定你想要什么,但如果你不手动设置限制,它会自动缩放。我这样做是因为您要求两个轴上的范围为(-3 到 3)。查看我链接的演示以查看其他示例。
    • 例如,我有一个带有 plt.axis('equal') 的圆 250x250,但图形或框不是正方形,它更像是 x=500 和 y=250,但圆是没有拉伸。我不必用相同的 x 和 y 框自动缩放。
    【解决方案2】:

    您的代码是正确的。您的图形的纵横比很可能不相等。将 figsize 设置为相等的参数应该可以解决这个问题

    theta = np.linspace(0, 2*np.pi, 100)
    r= r/2
    x = r*np.cos(theta)
    y = r*np.sin(theta)
    plt.figure(figsize=(10,10))
    plt.plot(x,y)
    

    【讨论】:

      猜你喜欢
      • 2015-01-08
      • 1970-01-01
      • 2013-02-12
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多