我在绘制在对数(或symlog)轴上变为零的线时遇到一些困难。考虑以下简单示例:

import numpy as np
import matplotlib.pylab as pl

pl.close('all')

z = np.linspace(0,1,20)
x = np.ones_like(z)
x[0] = 0

pl.figure()
pl.subplot(131)
pl.plot(x, z, '-x')
pl.xlim(-0.1,1.1)

pl.subplot(132)
pl.plot(x, z, '-x')
pl.yscale('log')
pl.xlim(-0.1,1.1)

pl.subplot(133)
pl.plot(x, z, '-x')
pl.yscale('symlog', linthresy=1e-2)
pl.xlim(-0.1,1.1)


python - Matplotlib Symlog线性区域-LMLPHP

首先,我感到惊讶的是,在正常的log轴上绘制了标有红色十字的线段:该线段正上方的点(在y=0.05处)等于1,而在y=0下方的点为零,不能在log轴上绘制,那么matplotlib为什么绘制此线段?这样,该图给人的印象是例如y=0.01x等于1,这是不正确的。

(编辑:semilogy确实放弃了标记的线段...)

其次,我试图通过使用symlog轴(右面板)来解决此问题,并使用linthresy设置线性区域,但这似乎不起作用(在这种情况下)。这是否不应该创建带有y = { 0, 10^-2, 10^-1, 10^0 }标签的均匀间隔的y轴?

最佳答案

在意识到关键字是linthreshy而不是linthresy之前,我遇到了同样的问题:

import numpy as np
import matplotlib.pylab as pl

pl.close('all')

z = np.linspace(0,1,20)
x = np.ones_like(z)
x[0] = 0

pl.figure()
pl.subplot(121)
pl.plot(x, z, '-x')
pl.yscale('symlog', linthresy=1e-2)
pl.xlim(-0.1,1.1)

pl.subplot(122)
pl.plot(x, z, '-x')
pl.yscale('symlog', linthreshy=1e-2)
pl.xlim(-0.1,1.1)


python - Matplotlib Symlog线性区域-LMLPHP

09-30 20:19