Home > database >  How to annotate line with text rotated along the line in matplotlib
How to annotate line with text rotated along the line in matplotlib

Time:02-23

I would like to add an annotation between 2 points with text at the middle and rotate the text to align with the line. Current example does not rotate as expected:

import matplotlib.pyplot as plt
import numpy as np

def ann_distance(ax,xyfrom,xyto,text=None):
    midx = (xyto[0] xyfrom[0])/2
    midy = (xyto[1] xyfrom[1])/2
    if text is None:
        text = str(np.sqrt( (xyfrom[0]-xyto[0])**2   (xyfrom[1]-xyto[1])**2 ))

    ax.annotate("",xyfrom,xyto,arrowprops=dict(arrowstyle='<->'))
    p1 = ax.transData.transform_point((xyfrom[0], xyfrom[1]))
    p2 = ax.transData.transform_point((xyto[0], xyto[1]))
    rotn = np.degrees(np.arctan2(p2[1]-p1[1], p2[0]-p1[0]))
    ax.text(midx,midy,text,ha='center', va='bottom',rotation=rotn,fontsize=16)
    return

x = np.linspace(0,2*np.pi,100)

width = 800
height = 600

fig, ax = plt.subplots()
ax.plot(x,np.sin(x))
ann_distance(plt.gca(),[np.pi/2,1],[2*np.pi,0],'$sample$')
plt.show()

Current output: enter image description here

CodePudding user response:

Add two

  • Related