2016-01-16 192 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。之後,您只需設置線型併爲每個圖確定開始點和結束點。