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')and ax.set_ycale('log'),注释就会出现在图的中间(它应该在的地方)。否则,它不会出现。

在此先感谢您的帮助!

4

1 回答 1

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

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

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

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

我做了:

ax.loglog(samplevalues,samplevalues,'o',color='black')
于 2014-01-15T15:29:01.803 回答