Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating labels where line appears in matplotlib figure

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.

like image 542
tripkane Avatar asked Nov 16 '12 08:11

tripkane


2 Answers

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.

like image 193
Dan Avatar answered Nov 03 '22 09:11

Dan


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()
like image 26
ingomueller.net Avatar answered Nov 03 '22 07:11

ingomueller.net