Matplotlib 在图形上保留数据点注释

Matplotlib 在图形上保留数据点注释,matplotlib,python-2.7,Matplotlib,Python 2.7,我有一个pyplot图,其中每个数据点都有一个指向该数据点的箭头标记,并且我对其进行了格式化,以使数据与它所注释的数据点保持恒定的偏移。这很好,直到我用一个数据点太接近图的边缘,注释被切掉。我希望有一种方法可以格式化我的注释,这样它就可以自动地将自己从我的数据中定位出来,并保留在我的图中 for label, x, y in zip(bagOlabels, time, height): ax.annotate( label,

我有一个pyplot图,其中每个数据点都有一个指向该数据点的箭头标记,并且我对其进行了格式化,以使数据与它所注释的数据点保持恒定的偏移。这很好,直到我用一个数据点太接近图的边缘,注释被切掉。我希望有一种方法可以格式化我的注释,这样它就可以自动地将自己从我的数据中定位出来,并保留在我的图中

for label, x, y in zip(bagOlabels, time, height):
    ax.annotate(
                label,
                xy = (x,y), xytext = (50,-20),
                textcoords = 'offset points', ha = 'right', va = 'top',
                arrowprops = dict(arrowstyle = '->', 
                connectionstyle = 'arc3,rad=0')
                )
xytext=(50,-20)
是我设置标签偏移量的地方。我一直在挖,但我还没有找到我要找的东西。如果你对如何实现这一目标有任何见解,我很乐意听到


谢谢。

您可以尝试以下策略:

  • 如果该点位于绘图的右半部分,则放置具有负偏移的注释:

    for label, x, y in zip(bagOlabels, time, height):
        offset = (50, 20)
        if x > mid_x:
           offset = (-50, 20)  # (-50, -20) could be better
    
    ax.annotate(...)
    
  • 放大绘图,使所有注释都适合绘图

  • 在第一种情况下,注释可能相互重叠

    更新

    方法
    get_xlim
    返回绘图在x轴上的限制:

    x = range(0, 100)
    y = map(lambda x: x*x, x)
    
    fig = pyplot.figure()
    ax1 = fig.add_subplot(1, 1, 1)
    ax1.plot(x, y, 'r.', x, y, 'r-')
    xlim = ax1.get_xlim()
    

    注释中的条件语句可以正常工作。你知道有什么方法可以知道轴的极限(没有明确设置),这样我就可以知道什么时候触发它了吗?@deadstump刚刚更新了答案,展示了如何获取图形的
    xlim