Han*_*gzu 1 visualization matplotlib python-2.7
这是我从纸上剪下来的图表。
http://i11.tietuku.com/e1c71d1b84b37a51.png
我可以绘制圆形和直箭头,但如何绘制特定角度的旋转箭头?
您可以使用 sine/cosine、 Arc和arrow在 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()
Run Code Online (Sandbox Code Playgroud)
请注意,这个解决方案不是最干净的,可能有更好的方法来一次绘制圆弧和箭头。
您可能想尝试FancyArrowPatch来绘制漂亮的箭头。
| 归档时间: |
|
| 查看次数: |
2967 次 |
| 最近记录: |