在matplotlib中具有零值的Logscale图

fso*_*ety 11 python matplotlib

我目前正在使用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')
Run Code Online (Sandbox Code Playgroud)

完全省略零值.这种行为可以接受吗?至少应该有某种警告.我只是意外地认出来了.是否还有一种在logscale中绘制零值数据的方法?

谢谢!

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

Joe*_*ton 25

为此目的,最简单的方法是使用"symlog"图.接近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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Symlog设置接近零的小间隔(上下两个)以使用线性比例.这允许事物穿过0而不会导致log(x)爆炸(或转到-inf,而不是).

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