I have a figure created in matplotlib (time-series data) over which are a series of
matplotlib.pyplot.axvline
lines. I would like to create labels on the plot that appear close to (probably on the RHS of the line and towards the top of the figure) these vertical lines.
You can use something like
plt.axvline(10)
plt.text(10.1,0,'blah',rotation=90)
you might have to play around with the x and y value in text
to get it to align properly.
You can find the more complete documentation here.
A solution without manual placement is to use "blended transformations".
Transformations transform coordinates from one coordinate system to another. By specifying a transformation through the transform
parameter of text
, you can give the x
and y
coordinates of the text in the axis coordinate system (going from 0 to 1 from left to right/top to bottom of the x/y axes, respectively). With blended transformations, you can used a mixed coordinate system.
This is exactly what you need: you have the x coordinate given by the data and you want to place the text on the y axes somewhere relative to the axis, say in the center. The code to do this looks like this:
import matplotlib.transforms as transforms
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
# the x coords of this transformation are data, and the
# y coord are axes
trans = ax.get_xaxis_transform()
x = 10
ax.axvline(x)
plt.text(x, .5, 'hello', transform=trans)
plt.show()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With