【问题标题】:Polar plot of a function with negative radii using matplotlib使用 matplotlib 的具有负半径的函数的极坐标图
【发布时间】:2017-03-23 16:51:24
【问题描述】:

以下 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) 的负值?

【问题讨论】:

  • 看起来这个问题从未解决。 github.com/matplotlib/matplotlib/issues/2203
  • @Alexander Kleinhans 这个问题是关于另一个问题的。它讨论的问题是无法为负半径值设置网格,而不是无法绘制负半径值。
  • 我不确定这个链接的问题是否真的相关,但如果是的话,我想说,它现在已经解决了。

标签: python matplotlib polar-coordinates


【解决方案1】:

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

【讨论】:

  • 它应该看起来像预期的图,因为负半径与相反方向的正半径相同。比较 wolfram alpha:wolframalpha.com/input/…
  • 这是一个很好的通用解决方法,但它有点老套。我知道可能没有,如果有一些设置可以切换,我更愿意。
猜你喜欢
  • 2022-11-29
  • 2017-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多