使用 matplotlib 绘制具有负半径的函数的极坐标图

Polar plot of a function with negative radii using matplotlib

以下 python 代码应在 [-pi/2、pi/2].

范围内绘制 r(theta) = theta
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) 的负值?

第一个情节似乎是正确的。它只是不显示负值。这可以通过明确设置 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()