Matplotlib 注释在对数刻度上不起作用?

ire*_*ene 6 annotate matplotlib

我正在为不同的数据集制作对数图,并且需要包含最佳拟合线方程。我知道应该在图中的哪个位置放置方程,但是由于数据集具有非常不同的值,我想在注释中使用相对坐标。(否则,注释将针对每个数据集移动。)

我知道 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()
Run Code Online (Sandbox Code Playgroud)

如果我注释掉ax.set_xcale('log')and ax.set_ycale('log'),注释就会出现在图的中间(它应该在的地方)。否则,它不会出现。

在此先感谢您的帮助!

Chr*_*lis 5

正如@tcaswell 在评论中指出的那样,这可能真的是一个错误,但解决方法是在轴坐标中使用 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()
Run Code Online (Sandbox Code Playgroud)

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

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

ax.plot(samplevalues,samplevalues,'o',color='black')
ax.set_xscale('log')
ax.set_yscale('log')
Run Code Online (Sandbox Code Playgroud)

我做了:

ax.loglog(samplevalues,samplevalues,'o',color='black')
Run Code Online (Sandbox Code Playgroud)