27

我目前正在使用 logscale 以便有更大的可能性来绘制我的数据。尽管如此,我的数据也包含零值。我知道这些零值在 logscale 上不起作用,因为 log(0) 没有定义。

例如,

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot([0,1,2],[10,10,100],marker='o',linestyle='-')
ax.set_yscale('log')
ax.set_xscale('log')

完全忽略零值。这种行为可以接受吗?至少应该有某种警告。我只是偶然认出了它。是否还有一种方法可以在对数刻度中绘制零值数据?

谢谢!

PS:我希望这适合stackoverflow。我没有找到 matplotlib 的邮件列表。

4

1 回答 1

47

为此目的,最容易使用“符号日志”图。0 附近的区间将是线性刻度,因此可以显示 0。

import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot([0,1,2],[10,10,100],marker='o',linestyle='-')
ax.set_yscale('symlog')
ax.set_xscale('symlog')
plt.show()

在此处输入图像描述

Symlog 设置一个接近零的小间隔(上下)以使用线性刻度。这允许事物越过 0 而不会导致log(x)爆炸(或者转到 -inf,而是)。

这里有一个很好的视觉比较作为 SO 答案: https ://stackoverflow.com/a/3513150/325565

于 2013-06-03T20:00:52.660 回答