我正在使用matplotlib
在annotate
中绘制一个箭头。我想让箭更胖。我所追求的效果是一个带有细边线的双头箭头,我可以控制箭头宽度,即不改变linewidth
。我在this回答之后尝试了kwargs
width
,但这导致了错误,我还尝试了arrowstyle
和connectorstyle
的不同变体而没有运气。我确定这是一个简单的!
到目前为止我的代码是:
import matplotlib.pyplot as plt
plt.figure(figsize=(5, 5))
plt.annotate('', xy=(.2, .2), xycoords='data',
xytext=(.8, .8), textcoords='data',
arrowprops=dict(arrowstyle='<|-|>',
facecolor='w',
edgecolor='k', lw=1))
plt.show()
我正在使用Python 2.7和Matplotlib 1.5.1
答案 0 :(得分:1)
最简单的方法是使用带有darrow(双箭头)选项的FancyBboxPatch
。这种方法的一个棘手的部分是箭头不会围绕其尖端旋转,而是围绕定义箭头主体的矩形边缘。我证明了在旋转位置放置了一个红点。
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import matplotlib as mpl
fig = plt.figure()
ax = fig.add_subplot(111)
#Variables of the arrow
x0 = 20
y0 = 20
width = 20
height = 2
rotation = 45
facecol = 'cyan'
edgecol = 'black'
linewidth=5
# create arrow
arr = patches.FancyBboxPatch((x0,y0),width,height,boxstyle='darrow',
lw=linewidth,ec=edgecol,fc=facecol)
#Rotate the arrow. Note that it does not rotate about the tip
t2 = mpl.transforms.Affine2D().rotate_deg_around(x0,y0,rotation) + ax.transData
plt.plot(x0,y0,'ro') # We rotate around this point
arr.set_transform(t2) # Rotate the arrow
ax.add_patch(arr)
plt.xlim(10, 60)
plt.ylim(10, 60)
plt.grid(True)
plt.show()
,并提供: