Нарисуй стрелку в матплотлибе - PullRequest
0 голосов
/ 05 марта 2020

Рассмотрим следующий пример: этот код создаст круг с центром 180, 150 и радиусом 15. Далее точка будет добавлена ​​в позиции a, b.

%matplotlib inline
import matplotlib.pyplot as plt
import math
import numpy as np

def get_circle(x, y, r):
    """ Get a cirlce with a specific position and radius"""
    result = plt.Circle((x, y), r, color='k', fill=False)
    return result

def rpoint(x, y, r, deg):
    """ Get a point on a radius at deg degrees."""
    rang = np.deg2rad(deg)
    x1 = x + r * np.sin(rang)
    y1 = y + r * np.cos(rang)
    return (x1, y1)

fig, ax = plt.subplots(1, 1, figsize=(6,6))

ax.set_aspect('equal', adjustable='datalim')
ax.axes.get_xaxis().set_visible(False)
ax.axes.get_yaxis().set_visible(False)

x1, y1, r = 180, 150, 15
ax.add_patch(get_circle(x1, y1, r))
a, b = rpoint(x1, y1, r, 180)
plt.plot(a,b,'ok')

enter image description here

Теперь я хочу просто добавить стрелку, которая показывает направление черной точки с половиной радиуса. Из документов я попытался добавить нужную стрелку следующим образом.

plt.arrow(x1, y1, a, b)

или

plt.arrow(x1, y1, x1 + abs(x1 - a), y1 + abs(y1 - b))

Оба способа приводят к одному и тому же результату:

enter image description here

Направление и длина стрелок совершенно неправильные, хотя я использовал правильные координаты a, b. Что я делаю неправильно?

Ответы [ 2 ]

2 голосов
/ 05 марта 2020

Я не до конца понимаю, что произошло, но источником вашего круга является (0, 0), поэтому вам нужно придать ему отрицательное значение. Это работает:

plt.arrow(x1, y1, 0, -r / 2, head_width=1, head_length=1)

Или с точки зрения ваших переменных:

plt.arrow(x1, y1, a - x1, (b - y1) / 2, head_width=1, head_length=1)
2 голосов
/ 05 марта 2020

Второй и третий аргументы plt.arrow - это dx и dy, а не координаты конечных точек (из do c).

Поэтому используйте plt.arrow(x1, y1, a - x1, (b - y1)/2). Обратите внимание, что деление на два происходит из-за того, что вы хотите, чтобы стрелка заканчивалась на половине радиуса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...