Matplotlib注释在对数坐标轴上不起作用?

6
我正在为不同的数据集制作对数-对数图,并需要包含最佳拟合线方程式。我知道应该在图中哪个位置放置方程式,但由于数据集有非常不同的值,因此我想在注释中使用相对坐标。(否则,注释将针对每个数据集移动。)我熟悉matplotlib的annotate()函数,并且知道我可以使用textcoords='axes fraction'来启用相对坐标。当我在常规比例尺上绘制数据时,它能正常工作。但是一旦我将至少一个比例尺更改为对数尺度,注释就会消失。我没有收到任何错误消息。以下是我的代码:
plt.clf()
samplevalues = [100,1000,5000,10^4]
ax = plt.subplot(111)
ax.plot(samplevalues,samplevalues,'o',color='black')
ax.annotate('hi',(0.5,0.5), textcoords='axes fraction')
ax.set_xscale('log')
ax.set_yscale('log')
plt.show()

如果我将ax.set_xcale('log')ax.set_ycale('log')注释掉,那么注释就会出现在图的中心位置(正常情况)。否则,它不会出现。谢谢您的帮助!

我怀疑这与我一段时间前报告的 https://github.com/matplotlib/matplotlib/issues/1311 有关,但我认为还没有人追踪到它。很可能这是一些奇怪的浮点问题。 - tacaswell
@tcaswell,你知道我如何向matplotlib开发人员报告此问题吗?谢谢! - irene
我也是其中之一,所以你已经完成了一部分的工作 ;) 你能在那个问题上留下评论吗?除了代码外,你还能包括你使用的 mpl 版本 (matplotlib.__version__) 吗? - tacaswell
@tcaswell 我正在使用matplotlib 0.99.3。谢谢! - irene
哦,我正在使用Enthought Python发行版。他们倾向于在捆绑包中包含旧版本... - irene
显示剩余3条评论
1个回答

5

正如评论区 @tcaswell 指出的那样,这可能是一个 bug,但解决方法是在坐标轴中使用 text():

plt.clf()
samplevalues = [100,1000,5000,10^4]
ax = plt.subplot(111)
ax.loglog(samplevalues,samplevalues,'o',color='black')
ax.text(0.5, 0.5,'hi',transform=ax.transAxes)
plt.show()

另一种方法是使用figtext(),但如果已经有几个图(面板),那么使用起来会更加繁琐。

顺便说一下,在上面的代码中,我直接使用对数-对数比例尺绘制了数据。也就是说,不是:

ax.plot(samplevalues,samplevalues,'o',color='black')
ax.set_xscale('log')
ax.set_yscale('log')

我做了:

ax.loglog(samplevalues,samplevalues,'o',color='black')

非常顺利地完成了工作。谢谢。 - irene

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接