Creating labels where line appears in matplotlib figure

前端 未结 2 1200
眼角桃花
眼角桃花 2021-02-01 00:37

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 la

2条回答
  •  情歌与酒
    2021-02-01 01:13

    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()
    

提交回复
热议问题