我正在为不同的数据集制作对数 - 对数图,需要包含最合适的线方程。我知道在图中的位置我应该放置方程,但由于数据集的值非常不同,我想在注释中使用相对坐标。 (否则,注释将针对每个数据集移动。)
我知道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')
,则注释会出现在图表的正中间(应该在哪里)。否则,它不会出现。
提前感谢您的帮助!
答案 0 :(得分:2)
这可能是@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 scale绘制了数据。也就是说,而不是:
ax.plot(samplevalues,samplevalues,'o',color='black')
ax.set_xscale('log')
ax.set_yscale('log')
我做了:
ax.loglog(samplevalues,samplevalues,'o',color='black')