2013-10-23 2 views
1

12 개의 다른 점이 있으며 그 중 10 개의 점은 처음 두 점과 관련되어 있습니다. 이 10 포인트 각각에 대해 라벨을 개별적으로 설정하려고하지만 때로는 둘 이상의 좌표가 동일하지만 해당 좌표에 대한 모든 라벨을 표시하려고합니다 (서로 위에 있지 않지만 읽을 수 없음)
가능한 한 같은 좌표 한 지점의 아래 그림 두 세트에보고 그들의 레이블동일한 좌표 점에 대한 주석 설정 matplotlib

booleanFunction = np.array(["K","I","H" ,"G", "F", "E" , "D" , "M", "B", "A"]) 
pointsx = np.empty((rs.shape[1],1)) 
pointsy = np.empty((rs.shape[1],1)) 
.... 
.... 
.... 
pl.figure() 
pl.hold(True) 
pl.plot(X1, Y1, 'ro', X2, Y2, 'y<') 
pl.plot(pointsx, pointsy, 'b3') 

for i in range (len(pointsx)): 
    pl.annotate(booleanFunction[i], xy=(pointsx[i], pointsy[i]), xycoords='data', textcoords='data') 

dd

답변

2
나는 같은 것을 할 주석의 중복을 피하기 위해 내 코드

나는 하나의 중복이 있습니다

xoffset = 0.1 
switch = -1 
for i in range (len(pointsx)): 
    pl.annotate(booleanFunction[i], xy=(pointsx[i], pointsy[i]), 
       xytext=(pointsx[i]+switch*xoffset, pointsy[i]), 
       xycoords='data', textcoords='data') 

    switch*=-1 

주석을 달기를 원하는 지점에서 주석 텍스트를 좌우로 번갈아 가며 씁니다. xoffset. 물론 y 방향이나 두 방향 모두 비슷한 것을 사용할 수 있습니다.

+0

두 점이 서로 겹치도록 두 점이 겹치는 점 (동일한 좌표를 갖는 두 개의 다른 점에 속하기 때문에) – Am1rr3zA

+1

두 개의 겹치는 점이 예를 들어 2와 4의 인덱스에있는 경우 점 목록이 있으면 레이블은 여전히 ​​겹칩니다. 여기에 몇 가지 가능성이 있습니다 : 1. 포인트가 많지 않으면 x ** 및 ** 방향으로 오프셋하면 충분할 수 있습니다. 2) 점과 레이블을 정렬하고 오프셋을 사용합니다. 3) 루프에서 새로운 점이 이미 주석이 달린 점들과 겹쳐 지는지 확인하고'xytext'를 사용하여 주석을 이동시킵니다 –