2012-08-10 113 views
0

我有一个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)是我设置标签偏移的地方。我一直在挖掘,但我还没有找到我在找什么。如果您对如何实现这一目标有所了解,我很乐意听到它。

谢谢。

回答

1

有一些策略,你可以尝试:

  1. 如果该点是在情节的右半边,把注释与负偏移:

    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(...) 
    
  2. 放大情节所以所有的注释符合情节。

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

UPDATE

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

中标注一个条件语句,只是可以工作。你知道有什么方法知道轴的极限(没有明确设置它们),所以我可以知道什么时候触发这个? – deadstump 2012-08-10 21:09:50

+0

@deadstump刚刚更新了答案,以显示如何获取图形的“xlim”。 – 2012-08-10 21:30:37