Python:放置在圆周围的文本的旋转值

2024-04-26 20:13:13 发布

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

以下是代码片段:

fig, ax = plt.subplots(figsize=(30, 20))
ax.axis('equal')

ax.set(xlim=(-10, 10), ylim=(-10, 10))

circle = plt.Circle((0, 0), 3.1, fc='cyan')
ax.add_patch(circle)

def kex(N):
    alpha=2*np.pi/N
    alphas = alpha*np.arange(N)
    coordX = np.cos(alphas)
    coordY = np.sin(alphas)

    return np.c_[coordX, coordY, alphas]

data = 'P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 P11 P12 P13 P14'.split(' ')
radius = 3.3
points = kex(len(data))

for i in range(0, len(data)):
    a = points[i,2] 
    x,y = (radius*np.sin(a), radius*np.cos(a))
    
    a = a - 0.5*np.pi
    
    if points[i, 1] < 0:
        a = a - np.pi
    
    ax.text(x, y, data[i], rotation=np.rad2deg(a), ha="center", va="center", fontsize=15)
    
ax.axis("off")

plt.show()

我想将文本放在一个圆周围,但似乎找不到正确的旋转值。一些代码取自here我调整了代码中的一些位,但似乎没有找到正确的旋转值。有人能帮忙吗

输出为: enter image description here

编辑01:

我想要从here拍摄的类似于此的屏幕截图

enter image description here


Tags: 代码alphadatanppipltcosax
1条回答
网友
1楼 · 发布于 2024-04-26 20:13:13

你没有说你的预期输出应该是什么。如果是每个文本标签的底部与圆的切线对齐,那么您几乎就到了;您可以这样做:

for i in range(0, len(data)):
    a = points[i,2] 
    x,y = (radius*np.sin(a), radius*np.cos(a))
       
    ax.text(x, y, data[i], rotation=-np.rad2deg(a), ha="center", va="center", fontsize=15)

也就是说,在计算xy之后,删除修改a的代码行,然后使用减去角度a来设置文本的旋转

enter image description here

要回答已编辑的问题,您只需使用:

    if y < 0:
        a += np.pi 

相关问题 更多 >