/ / Polardiagramm einer Funktion mit negativen Radien unter Verwendung von Matplotlib - Python, Matplotlib, Polarkoordinaten

Polardiagramm einer Funktion mit negativen Radien unter Verwendung von Matplotlib - Python, Matplotlib, Polarkoordinaten

Der folgende Python-Code sollte r (Theta) = Theta im Bereich [-pi / 2, pi / 2] darstellen.

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

Dies erzeugt die Handlung:

Polardiagramm

Ich würde jedoch erwarten, dass es Folgendes produziert:

erwartete Polardiagramm

Die negativen Werte von r (Theta) scheinen abgeschnitten zu sein. Wie mache ich es so, dass Matplotlib die negativen Werte von r (Theta) aufträgt?

Antworten:

1 für die Antwort № 1

Die erste Handlung scheint korrekt zu sein. Es zeigt einfach nicht die negativen Werte an. Dies kann durch explizites Setzen der Grenzen der r Achsen überwunden werden.

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

Bildbeschreibung hier eingeben

Dieses Verhalten basiert auf der Annahme, dassJede Menge sollte in einer polaren Grafik plottierbar sein, was für technische Fragen zu relativen Mengen von Vorteil sein könnte. Z.B. man könnte nach der Abweichung einer Menge in einem periodischen System von ihrem Mittelwert fragen. In diesem Fall ist die Konvention von Matplotlib ideal geeignet.

Von einem mathematischeren (theoretischen)Perspektive könnte man argumentieren, dass negative Radien eine Punktspiegelung auf den Ursprung sind. Um dieses Verhalten zu replizieren, muss man die negativen Punkte rotieren r Werte um π. Der erwartete Graph aus der Frage kann somit durch den folgenden Code wiedergegeben werden

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

Bildbeschreibung hier eingeben