消除matplotlib中yticklabel的偏差

时间:2011-12-05 21:07:44

标签: python matplotlib

我的问题是,当我绘制非常接近的y值时,matplotlib会使用yticklabel的偏差,如下图所示(左上角为+1.2)。 output image

我不想要偏见,因为它不会减少yticklabels的长度。如何消除偏差,使其显示1.2000010,1.2000012 ...

以下是我用来生成示例的代码:

from pylab import *

plot((0,1),(1.200001,1.200002))
show()

3 个答案:

答案 0 :(得分:3)

使用pyplot接口实现此目的的最简单(也可能是首选)方法是使用提供的函数pyplot.ticklabel_format,其方式类似于

from pylab import *

plot((0,1),(1.200001,1.200002))
ticklabel_format(useOffset=False)
show()

其他提出的解决方案可以为您提供更直接的控制。

答案 1 :(得分:2)

看起来您只需要调整yticklabels的格式,您可以直接执行此操作。使用this示例,我得到了这个工作:

from pylab import *
from matplotlib.ticker import FormatStrFormatter

plt.clf()
ax = subplot(111)
plot((0,1),(1.200001,1.200002))
majorFormatter = FormatStrFormatter('%.7f')
ax.yaxis.set_major_formatter(majorFormatter)
show()

答案 2 :(得分:0)

您可以使用yticks() method控制在每个ytick处绘制的文字。这是一段代码,可以满足您的需求:

from pylab import *

plot((0,1),(1.200001,1.200002))
ticks,ticklabels =  yticks()
newTickLabels = []
for tick in ticks:
    newTickLabels.append("%10.7f"%tick)
yticks(ticks,newTickLabels)
show()

我使用yticks()没有参数来获取刻度和相应的标签,我忽略了它们。然后我创建一个新的字符串数组,每个字符串一个。每个标签都是字符串格式的刻度值。您必须调整格式字符串"%10.7f"才能获得所需的外观。然后我将标记和标签返回到yticks()方法以重新定义它们。

结果如下: enter image description here

看起来y限制也会自动改变;这可以使用ylim()进行调整。