2017-04-14 239 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()