Matplotlib symlog线性区域

时间:2015-11-26 10:08:04

标签: python matplotlib

我在绘制对数(或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)

enter image description here

首先,我很惊讶在正常log轴上绘制了标有红叉的线段:该段正上方的点(y=0.05)等于1,下面的点在y=0处为零并且无法在log轴上绘制,那么为什么matplotlib会绘制此段?这样,该图给出的印象是,例如, y=0.01x等于一,这是不正确的。

编辑semilogy会丢弃标记的线段...)

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

1 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,直到我意识到关键字是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)

enter image description here