How do I offset lines in matplotlib by X points
matplotlib, python
Solution
The following code does what I desired. It uses ax.transData and figure.get_dpi():
import matplotlib.pyplot as plt
import matplotlib.transforms as transforms
fig, ax = plt.subplots()
x = [0, 1]
y = [0, 0]
ax.plot(x, y)
dy = 5/72
i = 1 # 0 for dx
tmp = ax.transData.transform([(0,0), (1,1)])
tmp = tmp[1,i] - tmp[0,i] # 1 unit in display coords
tmp = 1/tmp # 1 pixel in display coords
tmp = tmp*dy*ax.get_figure().get_dpi() # shift pixels in display coords
ax.plot(x, y)
ax.annotate("", [0,tmp], [1,tmp],
size = 10,
arrowprops = dict(arrowstyle = '<|-|>'))
plt.show()
Problem
I'm using matplotlib to plot some data that I wish to annotate with arrows (distance markers). These arrows should be offset by several points so as not to overlap with the plotted data: ``` import matplotlib.pyplot as plt import matplotlib.transforms as transforms fig, ax = plt.subplots() x = [0, 1] y = [0, 0] # Plot horizontal line ax.plot(x, y) dy = 5/72 offset = transforms.ScaledTranslation(0, dy, ax.get_figure().dpi_scale_trans) verttrans = ax.transData+offset # Plot horizontal line 5 points above (works!) ax.plot(x, y, transform = verttrans) # Draw arrow 5 points above line (doesn't work--not vertically translated) ax.annotate("", (0,0), (1,0), size = 10, transform=verttrans, arrowprops = dict(arrowstyle = '<|-|>')) plt.show() ``` Is there any way to make lines drawn by `ax.annotate()` be offset by X points? I wish to use absolute coordinates (e.g., points or inches) instead of data coordinates because the axis limits are prone to changing. Thanks!