我想在matplotlib图中注释某些长度。例如,A点和B点之间的距离。
为此,我想我可以使用annotate并弄清楚如何提供箭头的开始和结束位置。或者,使用arrow并标记该点。
我尝试使用后者,但我无法弄清楚如何获得双头箭头:
from pylab import *
for i in [0, 1]:
for j in [0, 1]:
plot(i, j, 'rx')
axis([-1, 2, -1, 2])
arrow(0.1, 0, 0, 1, length_includes_head=True, head_width=.03) # Draws a 1-headed arrow
show()
如何制作双头箭头?更好的是,在matplotlib图中是否有另一种(更简单的)标记尺寸的方法?
答案 0 :(得分:6)
您可以使用arrowstyle
属性更改箭头的样式,例如
ax.annotate(..., arrowprops=dict(arrowstyle='<->'))
给出一个双头箭头。
可以找到一个完整的示例here大约三分之一的页面,可能有不同的样式。
至于在地块上标记尺寸的“更好”方式,我无法想到任何一个问题。
编辑:这是一个完整的例子,如果它有用,你可以使用
import matplotlib.pyplot as plt
import numpy as np
def annotate_dim(ax,xyfrom,xyto,text=None):
if text is None:
text = str(np.sqrt( (xyfrom[0]-xyto[0])**2 + (xyfrom[1]-xyto[1])**2 ))
ax.annotate("",xyfrom,xyto,arrowprops=dict(arrowstyle='<->'))
ax.text((xyto[0]+xyfrom[0])/2,(xyto[1]+xyfrom[1])/2,text,fontsize=16)
x = np.linspace(0,2*np.pi,100)
plt.plot(x,np.sin(x))
annotate_dim(plt.gca(),[0,0],[np.pi,0],'$\pi$')
plt.show()
答案 1 :(得分:0)
以下内容为您的绘图提供了一个很好的维度:使用不同的箭头道具('<->' 和 '|-|')添加了两次注释,然后将文本放在行的中间和一个 bbox用于覆盖标签下的线条。
axs[0].annotate("", xy=(0, ht), xytext=(w, ht), textcoords=axs[0].transData, arrowprops=dict(arrowstyle='<->'))
axs[0].annotate("", xy=(0, ht), xytext=(w, ht), textcoords=axs[0].transData, arrowprops=dict(arrowstyle='|-|'))
bbox=dict(fc="white", ec="none")
axs[0].text(w/2, ht, "L=200 m", ha="center", va="center", bbox=bbox)