Python: значение поворота для текста, размещенного по кругу. - PullRequest
0 голосов
/ 05 августа 2020

Вот фрагмент кода:

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()

Я хочу разместить текст по кругу, но не могу найти правильные значения поворота. Некоторый код взят из здесь Я изменил некоторые биты в коде, но, похоже, не нашел правильных значений поворота. Может кто поможет?

Вывод: enter image description here

Edit 01:

I want something like this screenshot taken from здесь .

введите описание изображения здесь

1 Ответ

3 голосов
/ 05 августа 2020

Вы не говорите точно, каким должен быть ваш предполагаемый результат. Если нижняя часть каждой текстовой метки совпадает с касательной к окружности, вы почти у цели; вы можете сделать это:

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)

т.е. удалить строки кода, которые изменяют a после вычисления x и y, а затем использовать минус угол a, чтобы установить поворот текст.

введите описание изображения здесь

Чтобы ответить на отредактированный вопрос, вы можете просто использовать:

    if y < 0:
        a += np.pi 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...