我在绘制对数(或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)
首先,我很惊讶在正常log
轴上绘制了标有红叉的线段:该段正上方的点(y=0.05
)等于1,下面的点在y=0
处为零并且无法在log
轴上绘制,那么为什么matplotlib会绘制此段?这样,该图给出的印象是,例如, y=0.01
,x
等于一,这是不正确的。
(编辑:semilogy
会丢弃标记的线段...)
其次,我试图通过使用symlog
轴(右侧面板),使用linthresy
设置线性区域来解决此问题,但这似乎不起作用(在这种情况下) 。这不应该创建像y = { 0, 10^-2, 10^-1, 10^0 }
标签的均匀间隔的y轴吗?
答案 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)