擅长:python、mysql、java
<p>我已经设计了一个函数来很好地实现这一点:</p>
<pre><code>import numpy as np
import matplotlib.pyplot as plt
def annotate_point_pair(ax, text, xy_start, xy_end, xycoords='data', text_offset=6, arrowprops = None):
"""
Annotates two points by connecting them with an arrow.
The annotation text is placed near the center of the arrow.
"""
if arrowprops is None:
arrowprops = dict(arrowstyle= '<->')
assert isinstance(text,str)
xy_text = ((xy_start[0] + xy_end[0])/2. , (xy_start[1] + xy_end[1])/2.)
arrow_vector = xy_end[0]-xy_start[0] + (xy_end[1] - xy_start[1]) * 1j
arrow_angle = np.angle(arrow_vector)
text_angle = arrow_angle - 0.5*np.pi
ax.annotate(
'', xy=xy_end, xycoords=xycoords,
xytext=xy_start, textcoords=xycoords,
arrowprops=arrowprops)
label = ax.annotate(
text,
xy=xy_text,
xycoords=xycoords,
xytext=(text_offset * np.cos(text_angle), text_offset * np.sin(text_angle)),
textcoords='offset points')
return label
</code></pre>