Python 如何在matplotlib中在圆上均匀分布点?

Python 如何在matplotlib中在圆上均匀分布点?,python,matplotlib,Python,Matplotlib,我试着在一个圆上创建10个点,就像手表一样,但是用10个数字而不是12个数字。并且能够使用点/点在它们之间绘制线。 这是我用来创建圆的代码,但我不知道如何使它们成为10个点,也不知道如何在代码中使用点的坐标 import matplotlib.pyplot as plt import numpy as np # T = testing # myList = testing.digitcounter(18, 20) def circle_points(r, n): circles =

我试着在一个圆上创建10个点,就像手表一样,但是用10个数字而不是12个数字。并且能够使用点/点在它们之间绘制线。 这是我用来创建圆的代码,但我不知道如何使它们成为10个点,也不知道如何在代码中使用点的坐标

import matplotlib.pyplot as plt
import numpy as np

# T = testing
# myList = testing.digitcounter(18, 20)

def circle_points(r, n):
    circles = []
    for r, n in zip(r, n):
        t = np.linspace(0, 2*np.pi, n)
        x = r * np.cos(t)
        y = r * np.sin(t)
        circles.append(np.c_[x, y])
    return circles

r = [0.15]
n = [15]
circles = circle_points(r, n)

fig, ax = plt.subplots()
for circle in circles:
    ax.scatter(circle[:, 0], circle[:, 1])
ax.set_aspect('equal')
plt.show()
使用
t=np.linspace(0,2*np.pi,10,endpoint=False)
,可以创建10个均匀分布在圆上的角度。默认的
endpoint=True
将使第一个角度和最后一个角度重合。要使第一个点位于顶部并顺时针移动,请在公式中交换
cos
sin

要在数字之间绘制一条连续线,您可以使用
ax.plot(圆[digits,0],圆[digits,1])
,使用
数字
一个介于0和1之间的整数数组。请注意,当两个后续数字相等时,这将包含长度为零的行

导入matplotlib.pyplot作为plt
将numpy作为np导入
def循环_点(r,n):
圆圈=[]
对于拉链中的r,n(r,n):
t=np.linspace(0,2*np.pi,n,端点=False)
x=r*np.sin(t)
y=r*np.cos(t)
圆.append(np.c_ux,y])
返回圈
digits=np.random.randint(0,10,7)#0和9之间的7个随机数字
圆10=圆上的圆#u点([0.15],[10])[0]#10点
圆圈10=圆圈10[(名词短语arange(10)-3)%10,:]#顶部为3
图,ax=plt.子批次()
最大散射(圆圈10[:,0],圆圈10[:,1],颜色为深红色)
ax.绘图(圆圈10[数字,0],圆圈10[数字,1],color='dodgerblue',lw=3)
对于枚举(圆圈10)中的i,(x,y):
ax.text(x*1.1,y*1.1,i,ha='center',va='center',color='crimson')
ax.set_方面(“相等”)
ax.margins(x=0.1,y=0.1)#额外的边距,因为默认边距不考虑文本
ax.set_title(“.”join([f'{d}'表示数字中的d]),size=16)
ax.轴(“关闭”)
plt.show()

类似地,17角星可以用以下符号绘制:

N=17
圆=圆_点([0.15],[N])[0]
对于范围(N)中的i:
ax.绘图([圆[i,0],圆[(i+6)%N,0]],
[圈[i,1],圈[(i+6)%N,1]],
颜色class='dodgerblue',lw=3)

您可以使用
np.linspace(0,2*np.pi,n,endpoint=false)
n
点均匀分布在一个圆上。默认
np.linspace(0,2*np.pi,n,endpoint=true)
将最后一个点与第一个点以相同的角度放置。谢谢,这可以使n个点均匀地分布在一个圆上,但是如何在这些点之间绘制线?您希望如何连接它们?像一个n-gon?还是一颗n尖星?或对于n-gon,您可以尝试创建
n+1
点(
np.linspace(0,2*np.pi,n+1,endpoint=True)
),然后调用
ax.plot(圆[:,0],圆[:,1])
<代码>n+1第一个和最后一个重合的点需要闭合n-gon。假设我有一个随机数字列表/dic(0到9),每个数字与我绘制的10个点中的一个点(x,y)相关联,我想根据它们在列表中的外观连接随后的每2个点“数字”。基本上我想把这些点随机连接起来,所以我必须能够在我的代码中使用它们的x,y坐标来实现这一点。非常感谢,这非常有效。如果可以的话,还有一个问题,如果我想让圆的点从0以外的数字开始,例如,我想让3在12点,然后其余的点像往常一样从4点到2点,我该如何实现呢?我添加了
circle10=circle10[(np.arange(10)-3)%10,:]
将点移动到顶部有3个点