2017-04-14 64 views
0

我使用Matplotlib底圖繪製地圖和點帶標籤:Matplotlib底圖:避免文本重疊

map = Basemap(...) 

x, y = map(lons, lats)  
for label, xpt, ypt in zip(labels, x, y): 
    plt.text(xpt + 10, ypt + 10, label, size=2) 

我獲得了大量的密集區域重疊的標籤。有沒有辦法防止標籤重疊?

+0

不知道的方式開箱做的,我做的估計文本邊框手動黑客,然後計算重疊到以前的文字繪製的像素格,如果沒有找到重疊,我繪製文本並將其邊界框矩形添加到像素網格。 – daryl

+0

你可以看看[這個問題]的答案(https://stackoverflow.com/questions/19073683/matplotlib-overlapping-annotations-text)。希望它是有道理的。 – Boorn

回答

1

我能想到的唯一方法是

  1. 調整距離從文本開始打印(您已指定爲10)
  2. 放大到地圖上同時顯示標記點
爲點2

Full view Map

粗例子

further Zoom High Zoom

from mpl_toolkits.basemap import Basemap 
import matplotlib.pyplot as plt 
m = Basemap(width=120000,height=90000,projection='aeqd', 
      resolution=None,lat_0=30.,lon_0=80.) 
lats=[30.0,30.1,30.2,30.0,30.1,30.2] 
lons=[80.0,80.1,80.2,80.3,80.4,80.5] 
m.bluemarble() 
x, y = m(lons,lats) 
labels=['Point1','Point2','Point3','Point4','Point5','Point6'] 
m.scatter(x,y,10,marker='o',color='k') 
for label, xpt, ypt in zip(labels, x, y): 
    plt.text(xpt + 10, ypt + 10, label, size=20) 
plt.show()