Это можно сделать с помощью пользовательских маркеров, используя метод DivIcon:
import folium
from folium.features import DivIcon
m = folium.Map(location=(53.8747,27.4768), zoom_start=16)
locations = [[53.8730, 27.4712, 12.5], [53.8752, 27.4728, 15.4]]
for loc in locations:
folium.map.Marker(
location=loc[:2],
icon=DivIcon(
icon_size=(60,36),
icon_anchor=(0,0),
html=f"""<div style="font-size: 16pt; color: white">
<g>
<svg>
<rect width="60" height="30" fill="blue" opacity=".9" rx="15"/>
<text x="10" y="20" font-family="Verdana" font-size="16" fill="white">{loc[2]}</text>
</g>
</svg></div>"""
)
).add_to(m)
в этом примере в списке locations представлены подсписки с широтой, долготой и содержанием текста для каждой точки. Единственное - как подбирать размеры rect - экспериментируйте сами.
