Python-matplotlib polarplot问题-“ posx和posy应该是有限值”

时间:2018-07-31 09:56:03

标签: python matplotlib

切换到新系统后,我在matplotlib上遇到一个奇怪的错误。我正在尝试创建一个r轴倒置的极坐标图。因此,以我的情况为90到0。在我以前的系统中,使用最少的工作示例就可以很好地工作:

import matplotlib.pyplot as plt
from random import randint

fig, ax = plt.subplots(subplot_kw=dict(projection='polar'))
plt.scatter([randint(0, 360)], [randint(0, 90)])
ax.set_rlim(90, 0) 
ax.set_theta_zero_location('N')
ax.set_theta_direction('clockwise')

plt.show()

在新系统上运行会产生收益

posx and posy should be finite values
posx and posy should be finite values
/usr/local/lib/python3.5/dist-packages/numpy/core/fromnumeric.py:83: RuntimeWarning: invalid value encountered in reduce
  return ufunc.reduce(obj, axis, dtype, out, **passkwargs)
posx and posy should be finite values
posx and posy should be finite values
posx and posy should be finite values

到目前为止,我发现错误是由包含ax.set_rlim(90, 0)的行中的r轴倒置触发的(使用ax.set_rlim(0, 90)可以正常工作)。

我的系统设置为

  • Debian 4.9.110-1(2018-07-05)x86_64 GNU / Linux
  • Python 3.5.3
  • Matplotlib 2.2.2

旧系统非常相似,我无法恢复使用过的版本。这是较新版本中的某些已知错误吗?在极坐标图中,我找不到与此错误消息相关的任何内容。

1 个答案:

答案 0 :(得分:0)

我现在通过

只是将标签的范围从90更改为0,从而做出了相当草率的解决方法。
ticklabels = ax.get_yticklabels()
labels = range(80, 0, -10)
for i in range(0, len(labels)):
  ticklabels[i] = str(labels[i])
ax.set_yticklabels(ticklabels)

所有半径值也必须相应地进行调整。在这种情况下,必须使用90-r_value才能正确显示。