当轴限制改变时,很好地标记没有图例的线条?

时间:2012-12-06 16:12:56

标签: python matplotlib plot legend labels

当绘图上有许多线条时,图例并不总是标记它们的最佳方式。我经常做这样的事情来标记图的右边缘的线条:

def p():
    fig, ax = plt.subplots()
    x = arange(1, 3, 0.01)
    for i,c in zip(range(4), ('r','g','b','m')):
        ax.plot(x, x**i, c=c, lw=2)
        ax.annotate('$x^%d$' % i, (1.01, x[-1]**i),
                    xycoords=('axes fraction', 'data'), color=c)
    return ax

这只是一个简单的例子,只有几行。它看起来像这样:

>>> p()

enter image description here

但是如果我需要更改绘图的限制,标签就在错误的位置:

>>> p().set_xlim((1.0, 2.0))

enter image description here

问题:最简单的方法是直接在绘图上标记线条(不使用图例),不会因为更改轴限制而破坏?

1 个答案:

答案 0 :(得分:2)

你只需要这样做:

xlim = 2.0    
def p():
        fig, ax = plt.subplots()
        x = np.arange(1, 3, 0.01)
        for i,c in zip(range(4), ('r','g','b','m')):
            ax.plot(x, x**i, c=c, lw=2)
            ax.annotate('$x^%d$' % i, (1.01, min(x, key=lambda x:abs(x-xlim))**i),
                        xycoords=('axes fraction', 'data'), color=c)
        return ax

差异

min(x, key=lambda x:abs(x-xlim))

这个东西在列表X中找到输入数字

附近的数字

enter image description here