第一个图看起来是正确的,只是没有显示负值。可以通过明确设置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()