2016-01-16 194 views

回答

1

可以使用正弦/余弦,Arcarrow画一个圆圈,并在matplotlib旋转箭头:

import math 
from matplotlib.patches import Arc 
import matplotlib.pyplot as plt 

ax = plt.axes() 
x0, y0 = 0.5, 0.5 
radius = 0.4 
angle = 135 
angle_rad = angle * math.pi/180 # degrees to radians 
# Draw circle 
circle = plt.Circle((x0,y0), radius, color='red', fill=False) 
fig = plt.gcf() 
fig.gca().add_artist(circle) 
# Draw radius arrow 
head_length = 0.05 
ax.arrow(x0, y0, 
     (radius - head_length) * math.cos(angle_rad), 
     (radius - head_length) * math.sin(angle_rad), 
     head_width=0.05, head_length=head_length, fc='k', ec='k') 
# Draw arc with arrow. 
arc_radius = radius/4 
arc = Arc((x0, y0), 
      arc_radius*2, arc_radius*2, # ellipse width and height 
      theta1=0, theta2=angle, linestyle='dashed') 
ax.add_patch(arc) 
arc_arrow_length = 0.03 
arc_arrow_dx = arc_arrow_length * math.cos(angle_rad + math.pi/2) 
arc_arrow_dy = arc_arrow_length * math.sin(angle_rad + math.pi/2) 
ax.arrow(
    x0 + arc_radius * math.cos(angle_rad) - arc_arrow_dx, 
    y0 + arc_radius * math.sin(angle_rad) - arc_arrow_dy, 
    # We want to define a vector, 
    # but we don't want to draw any line besides arrow head, 
    # so we make arrow "body" unnoticeable. 
    arc_arrow_dx * 0.000001, 
    arc_arrow_dy * 0.000001, 
    head_width=0.01, 
    head_length=0.03, 
    color='black') 
plt.show() 

Result

请注意,这个解决方案是不干净的,有可能是一个更好的方式一次绘制弧线和箭头。

你可能想尝试FancyArrowPatch绘制一个不错的箭头。

+0

感谢您的回复。这很有帮助。但是我想要做的就是在假想线' - '上绘制旋转箭头。 –

+0

@韩正祖这个问题出人意料的困难。我添加了一个解决方案,但感觉像是一个黑客。无法找到用箭头结束弧线的正确方法。 – alexanderlukanin13

+0

非常感谢。我会尽力。 –

1

使用plt.annotate,在箭头参数中可以传递连接样式,该连接样式将定义您绘制的线条的曲率。这里是来自SciPy文档的an example。之后,您只需设置线型并为每个图确定开始点和结束点。