python-logpp图中的Matplotlib箭头

我正在尝试使用matplotlib在日志记录图中绘制箭头,如下所示:

enter image description here

我知道有人建议关闭轴(Matplotlib: Draw a vertical arrow in a log-log plot),但我确实需要轴.另外,该建议似乎没有任何改变(除了按预期关闭轴以外):

plt.figure();plt.loglog([1,10,60],[1,0.1,0.005])
plt.axis('off')
plt.arrow(2,0.002,5,0.098,'k',head_length=0.3)

到目前为止,我的工作一直是用线性轴环境创建一个不可见的插图(意思是:轴关闭),并在该插图中绘制箭头,此方法虽然有效,但确实有点令人不愉快.有没有更简单的方法?还是有人建议通过例如添加这些类型的附加功能.在主图绘制完成后,inkscape?

最佳答案

您可以使用plt.annotate而不是plt.arrow.这在documentation for plt.arrow中有说明:

The resulting arrow is affected by the axes aspect ratio and limits.
This may produce an arrow whose head is not square with its stem. To
create an arrow whose head is square with its stem, use annotate()

例如:

import matplotlib.pyplot as plt

plt.figure()
plt.loglog([1,10,60],[1,0.1,0.005])
plt.annotate('', xy=(5, 0.098), xytext=(2, 0.002), 
            arrowprops=dict(facecolor='black', shrink=0.),
            )

plt.ylim(0.001, 10)

plt.show()

enter image description here

请注意,您可能需要调整轴限制以使箭头适合绘图.在这里,我不得不更换ylim.