Matplotlib: построение произвольных векторов на полярных осях - PullRequest
1 голос
/ 18 октября 2019

Есть предыдущие вопросы о колчанах на полярных осях в matplotlib, однако они касаются векторных полей. Я заинтересован в рисовании произвольных векторов на полярных осях. Если есть подлинный дубликат, пожалуйста, свяжите его.

Я пишу программное обеспечение, которое касается кругового мира. Я строю траекторию агента от центра круговой арены к краю. Это визуализируется путем рисования вектора от центра круга к краю. Я пытаюсь использовать колчан Matplotlib для построения векторов на множестве полярных осей. Вот минимальный рабочий пример:

import matplotlib.pyplot as plt
import numpy as np

if __name__ == '__main__':
    fig = plt.figure()
    ax = fig.add_subplot(111, projection='polar')

    # Plot origin (agent's start point)
    ax.plot(0, 0, color='black', marker='o', markersize=5)

    # Plot agent's path
    ax.quiver((0, 0), (0, 1), color='black')

    # Example of where (0, 1) should be
    ax.plot(0, 1, color='black', marker='o', markersize=5)

    # Plot configuration
    ax.set_rticks([])
    ax.set_rmin(0)
    ax.set_rmax(1)
    ax.set_thetalim(-np.pi, np.pi)
    ax.set_xticks(np.linspace(np.pi, -np.pi, 4, endpoint=False))
    ax.grid(False)
    ax.set_theta_direction(-1)
    ax.set_theta_zero_location("N")

    plt.show()

Если вы запустите код, вы получите этот график

График показывает правильно начертанный график, примерукажите точку (0, 1), чтобы показать, где должен заканчиваться вектор, а затем сам вектор, который кажется слишком коротким (хотя направление верное). Из документов я понимаю, что quiver берет декартовы координаты (x, y), обозначающие начальную точку вектора, и (u, v), обозначающие направление вектора. В моем предыдущем опыте с quiver (u, v) по существу обозначает, где будет вершина вектора, поэтому в этом случае мы ожидаем, что вектор будет отрисован от (0,0) до (0,1), что не 'В этом случае, и я не знаю, почему.

Короче говоря, я хочу иметь возможность рисовать произвольные векторы на множестве полярных осей, и quiver не работает, как я ожидал. Три вопроса:

  1. Является ли мой код разумным с учетом моей цели? Я хочу нарисовать единичный вектор от начала координат до края полярного графика.

  2. Совершенно ли я неправильно понимаю, как использовать quiver?

  3. Как нарисовать произвольные векторы на полярных осях в matplotlib? Я знаю о arrow, и я собираюсь попробовать, хотя первоначальные попытки были неудачными.

Если не использовать стандартный график и просто определить свою собственную полярную систему внутри него, яЯ в тупике.

1 Ответ

1 голос
/ 18 октября 2019

Вы не указали u и v в ax.quiver(x,y,u,v). Чтобы убедиться, что стрелка имеет длину 1 единицу, вам также необходимо установить масштаб и единицы измерения.

ax.quiver(0,0,0,1, color='black', angles="xy", scale_units='xy', scale=1.)
...