У меня есть карта расположения городов по всему миру, и я хочу нанести название города рядом с каждой точкой. У меня есть датафрейм, который содержит название города, а также широту и долготу каждого города и некоторую дополнительную информацию.
Rank Name Pop_2019 Pop_2018 Change latitude longitude TC Risk
0 1 Tokyo 37393129 37435191 -0.0011 35.682839 139.759455 1.0
1 2 Delhi 30290936 29399141 0.0303 28.651718 77.221939 0.0
2 3 Shanghai 27058479 26317104 0.0282 31.232276 121.469207 1.0
3 4 Sao Paulo 22043028 21846507 0.0090 -23.550651 -46.633382 0.0
4 5 Mexico City 21782378 21671908 0.0051 19.432630 -99.133178 0.0
Я беру эту информацию и запускаю небольшой скрипт, который создает карту, наносит черную точку на точку lon, lat, а затем добавляет текст названия.
ax1 = plt.axes(projection=ccrs.PlateCarree())
ax1.stock_img()
x = data.loc[data['TC Risk'] == 1, 'longitude']
y = data.loc[data['TC Risk'] == 1, 'latitude']
names=data.loc[data['TC Risk'] == 1, 'Name']
ax1.scatter(x,y, s=3, c='k', transform=ccrs.Geodetic())
xy=list(zip(x, y))
for (x,y), label in zip(xy, names):
ax1.text(x, y, label, ha='center', size=10, transform=ccrs.PlateCarree())
plt.show()
Однако некоторые города расположены очень близко друг к другу, например, в Китае, и их невозможно прочитать имена. Кроме того, текст наносится поверх точки. Я хотел бы, чтобы некоторые строки кода динамически распределяли текст так, чтобы он был читабельным, но все же указывал, к какой точке он принадлежит. Любые идеи о том, как я бы go об этом? Я приложу изображение карты для справки. ![Global map](https://i.stack.imgur.com/S0Wdg.png)