2016-09-09 8 views
3
import random 
import math 
import matplotlib.pyplot as plt 


def circle(): 
    x = [] 
    y = [] 
    for i in range(0,1000): 
     angle = random.uniform(0,1)*(math.pi*2) 
     x.append(math.cos(angle)); 
     y.append(math.sin(angle)); 
    plt.scatter(x,y) 
    plt.show() 
circle() 

私は単位円にランダムに1000点を描画するために上記のコードを書いています。しかし、このコードを実行すると、何らかの理由で楕円が描かれます。どうしてこれなの?円上に点を生成する

enter image description here

答えて

5

それは円である - 問題は、あなたがそれをプロットするとき、あなたの軸のアスペクト比は、それが楕円形のように見えない1されていることです。 1のアスペクト比を取得するには、使用することができます。

plt.axes().set_aspect('equal', 'datalim') # before `plt.show()` 

これはdemoで強調表示されます。

+0

私はかなり理解していません... 1.5から1.5軸の中に円を描くのはなぜですか? – Apollo

+0

軸は両方の軸で同じ範囲(3単位)にわたりますが、x軸とy軸でキャンバスが占める物理空間は異なります。 matplotlibに明示的に同じように伝える必要があります。 – mgilson

+0

私は、ありがとう! – Apollo

関連する問題