Как нарисовать кривую линию / дугу в полярном графике с помощью matplotlib? - PullRequest
0 голосов
/ 11 декабря 2018

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

Есть ли другая функция построения, которую мне нужно использовать вместо ax.plot?

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

Как нарисовать изогнутую линию из точки A и точки B на полярном графике?

# Create polar plot object
with plt.style.context("seaborn-white"):
    fig = plt.figure(figsize=(5,5))
    ax = fig.add_subplot(111, projection="polar")
    # Draw 3 lines
    for degree in [90, 210, 330]:
        rad = np.deg2rad(degree)
        ax.plot([rad,rad], [0,1], color="black", linewidth=2)
    # Connect two points with a curve
    for curve in [[[90, 210], [0.5, 0.8]]]:
        curve[0] = np.deg2rad(curve[0])
        ax.plot(curve[0], curve[1])

enter image description here

1 Ответ

0 голосов
/ 11 декабря 2018

Полярная проекция означает, что вы больше не используете систему координат x, y, а полярную.Тем не менее участок между двумя точками все равно будет прямой линией между ними.
То, что вы хотите сделать, это самостоятельно определить дугу так:

from matplotlib import pyplot as plt
from scipy.interpolate import interp1d
import numpy as np

with plt.style.context("seaborn-white"):
    fig = plt.figure(figsize=(5,5))
    ax = fig.add_subplot(111, projection="polar")
    # Draw 3 lines
    for degree in [90, 210, 330]:
        rad = np.deg2rad(degree)
        ax.plot([rad,rad], [0,1], color="black", linewidth=2)
    # Connect two points with a curve
    for curve in [[[90, 210], [0.5, 0.8]]]:
        curve[0] = np.deg2rad(curve[0])
        x = np.linspace( curve[0][0], curve[0][1], 500)
        y = interp1d( curve[0], curve[1])( x)
        ax.plot(x, y)

plt.show()

enter image description here

...