2016-09-09 1 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() 

Ich habe den obigen Code geschrieben, um 1000 Punkte zufällig auf einem Einheitskreis zu zeichnen. Wenn ich diesen Code ausführe, zeichnet er aus irgendeinem Grund ein Oval. Warum ist das?Erzeugen von Punkten auf einem Kreis

enter image description here

Antwort

5

Es ist ein Kreis - Das Problem ist, dass das Seitenverhältnis Ihrer Achsen nicht 1 ist, so dass es wie ein Oval aussieht, wenn Sie es zeichnen. Um ein Seitenverhältnis von 1 zu erhalten, können Sie verwenden:

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

Dies wird in einem demo hervorgehoben.

+0

Ich verstehe nicht ganz ... warum würde es nicht einfach einen Kreis innerhalb der 1,5 bis 1,5 Achsen zeichnen? – Apollo

+0

Während die Achsen auf beiden Achsen den gleichen Bereich (3 Einheiten) umfassen, unterscheidet sich der physische Abstand, den die Arbeitsfläche in der X- und Y-Achse einnimmt. Sie müssen matplotlib sagen, um es explizit zu machen. – mgilson

+0

Ich sehe, danke! – Apollo

Verwandte Themen