1

更新到 matplotlib 1.3.1 后,它停止使用数量包。例如:

import matplotlib.pyplot as plt
import quantities as pq
import numpy as np
t = np.arange(0,10,0.1) * pq.sec
x = np.arange(0,10,0.1)**2 * pq.m
plt.plot(t,x)

带来一个长而丑陋的异常日志,以“调用 Python 对象时超出最大递归深度”结尾。matplotlib.units 的 get_converter() 方法和数量数组似乎有问题。

我发现这个问题的方法是:

plt.plot(t.magnitude,x.magnitude);

哪个效果很好,但是我有很多脚本我不想更改。有没有其他方法可以解决这个问题?

4

1 回答 1

0

这是一个令人讨厌的例外。不幸的是,除了修改 Quantities 或 Matplotlib 源代码之外,我想不出任何真正好的解决方案。我会将其作为一个错误发布到Matplotlib 问题。我建议将它发布到 Matplotlib 而不是 Quantities,因为这个问题似乎在 Matplotlib v1.3.0 中没有发生,但在 Quantities 方面这可能更容易解决。

所以我认为你的三个选择是

  1. 按照你的建议做,x改成x.magnitude.
  2. 编写您自己的绘图包装器,执行x.magnitude,以及可能在使用 的单位的轴上放置标签,对单位x进行任何转换(如 Matplotlib 试图做的那样),或者您想对单位做的任何其他事情.
  3. 将您的 Matplotlib 安装降级到 1.3.0 版。
于 2013-11-11T19:20:22.777 回答