更改matplotlib中注释箭头的宽度

时间:2016-07-21 11:06:32

标签: python python-2.7 matplotlib

我正在使用matplotlibannotate中绘制一个箭头。我想让箭更胖。我所追求的效果是一个带有细边线的双头箭头,我可以控制箭头宽度,即不改变linewidth。我在this回答之后尝试了kwargs width,但这导致了错误,我还尝试了arrowstyleconnectorstyle的不同变体而没有运气。我确定这是一个简单的!

到目前为止我的代码是:

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

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

,并提供:

enter image description here