去除matplotlib中yticklabel的偏差
我的问题是,当我绘制的y值非常接近时,matplotlib会在y轴标签上加一个偏差,就像下面图片中看到的那样(左上角的+1.2)。
我不想要这个偏差,因为它并没有减少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()
方法,重新定义它们。
这是结果:
另外,看起来 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()
不过,其他提出的解决方案会让你有更直接的控制权。