Полярный график функции с отрицательными радиусами с использованием matplotlib

Следующий код python должен отображать r (theta) = theta на диапазоне [-pi / 2, pi / 2].

import matplotlib.pyplot as plt import numpy theta = numpy.linspace(-numpy.pi / 2, numpy.pi / 2, 64 + 1) r = theta plt.polar(theta, r) plt.savefig('polar.png') 

Это дает график:

полярный участок

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

ожидаемый полярный график

Отрицательные значения r (theta) кажутся обрезанными. Как сделать так, чтобы matplotlib отображал отрицательные значения r (theta)?

One Solution collect form web for “Полярный график функции с отрицательными радиусами с использованием matplotlib”

Первый сюжет кажется правильным. Он просто не показывает отрицательные значения. Это можно преодолеть, явно устанавливая пределы осей r.

 import matplotlib.pyplot as plt import numpy theta = numpy.linspace(-numpy.pi / 2, numpy.pi / 2, 64 + 1) r = theta plt.polar(theta, r) plt.ylim(theta.min(),theta.max()) plt.yticks([-1, 0,1]) plt.show() 

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

Это поведение основано на предположении, что любое количество должно быть пригодным для использования на полярном графике, что может быть полезно для технических вопросов относительно относительных величин. Например, можно спросить об отклонении величины в периодической системе от ее среднего значения. В этом случае соглашение, используемое matplotlib, идеально подходит.

С более математической (теоретической) точки зрения можно утверждать, что отрицательные радиусы являются точечным отражением начала координат. Чтобы воспроизвести это поведение, нужно повернуть точки отрицательных значений r на π. Таким образом, ожидаемый график вопроса может быть воспроизведен следующим кодом

 import matplotlib.pyplot as plt import numpy as np theta = np.linspace(-np.pi / 2, np.pi / 2, 64 + 1) r = theta plt.polar(theta+(r<0)*np.pi, np.abs(r)) plt.show() 

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

Python - лучший язык программирования в мире.