去除matplotlib中yticklabel的偏差

2 投票
3 回答
767 浏览
提问于 2025-04-17 07:45

我的问题是,当我绘制的y值非常接近时,matplotlib会在y轴标签上加一个偏差,就像下面图片中看到的那样(左上角的+1.2)。 output image

我不想要这个偏差,因为它并没有减少y轴标签的长度。我想去掉这个偏差,这样就能显示成1.2000010、1.2000012……

这是我用来生成这个例子的代码:

from pylab import *

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

3 个回答

0

你可以通过 yticks() 这个方法来控制每个 y 轴刻度上显示的文字。下面是一段可以实现你想要效果的代码:

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() 来手动调整这个范围。

2

看起来你只需要调整一下你的y轴标签的格式,这个可以直接做到。参考这个例子,我成功地实现了:

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()
4

使用pyplot界面来实现这个功能,最简单(也可能是最推荐)的方法就是用提供的函数 pyplot.ticklabel_format,用法类似于

from pylab import *

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

不过,其他提出的解决方案会让你有更直接的控制权。

撰写回答