【问题标题】:Adding text to Folium FastMarkerCluster markers?将文本添加到 Folium FastMarkerCluster 标记?
【发布时间】:2018-06-02 21:28:28
【问题描述】:

使用以下代码,我尝试将文本添加到我的 folium FastMarkerCluster 标记中。下面的代码生成了一个地图,但没有成功添加文本。文本包含为对应于每个 lon lat 对的字符串。

我认为问题与包含文本列的 df 是熊猫系列对象这一事实有关。据我了解,这是在这种情况下应该如何指定“df.columnname”。然而,这并没有奏效。我也尝试将列变成一个列表,但这种方法也没有成功。任何指针都非常感谢。

xlat = guns2013['latitude'].tolist()
xlon = guns2013['longitude'].tolist()
locations = list(zip(xlat, xlon))
map2 = folium.Map(location=[38.9, -77.05], tiles='CartoDB dark_matter', 
zoom_start=1)
marker_cluster = MarkerCluster().add_to(map2)
for point in range(0, len(locations)):
   folium.Marker(locations[point], 
   popup='guns2013.texts'[point]).add_to(marker_cluster)

map2

【问题讨论】:

  • 请注意,您使用的是MarkerCluster,而不是FastMarkerCluster。使用 FastMarkerCluster 时,您可以传递 Javascript 回调来设置标记的样式(例如更改图标),但我不确定您是否可以添加弹出窗口。见这里:medium.com/@bobhaffner/…

标签: python text data-visualization folium


【解决方案1】:

我玩过这个,最终你可以将弹出窗口从 python 传递给 callback 函数,如下所示:

some_map = folium.Map(location=[df['latitude'].mean(), 
   df['longitude'].mean()], 
 zoom_start=9)
               
callback = ('function (row) {' 
                'var marker = L.marker(new L.LatLng(row[0], row[1]), {color: "red"});'
                'var icon = L.AwesomeMarkers.icon({'
                "icon: 'info-sign',"
                "iconColor: 'white',"
                "markerColor: 'green',"
                "prefix: 'glyphicon',"
                "extraClasses: 'fa-rotate-0'"
                    '});'
                'marker.setIcon(icon);'
                "var popup = L.popup({maxWidth: '300'});"
                "const display_text = {text: row[2]};"
                "var mytext = $(`<div id='mytext' class='display_text' style='width: 100.0%; height: 100.0%;'> ${display_text.text}</div>`)[0];"
                "popup.setContent(mytext);"
                "marker.bindPopup(popup);"
                'return marker};')
                             
some_map.add_child(FastMarkerCluster(df[['latitude', 'longitude','use_code_name']].values.tolist(), callback=callback))

【讨论】:

  • 你知道是否可以在弹出窗口中添加多个文本吗?即df[['latitude', 'longitude','use_code_name1','use_code_name2','use_code_name3'] ?
【解决方案2】:

果然,答案来了。也许这可以帮助面临同样问题的人。如果文本没有被映射,请检查包含它的 df 是否不是 pandas 系列对象,如果是,则使用第一行转换为 pandas df。其余的工作。

df_text = df_old[['texts']]

xlat = guns2013['latitude'].tolist()
xlon = guns2013['longitude'].tolist()
locations = list(zip(xlat, xlon))
map2 = folium.Map(location=[38.9, -77.05], tiles='CartoDB dark_matter', 
zoom_start=1)
marker_cluster = MarkerCluster().add_to(map2)
try:
   for point in range(0, len(locations)):
   folium.Marker(locations[point], popup = folium.Popup(df_text['texts'] 
   [point])).add_to(marker_cluster)    
except:
   pass
map2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    • 2021-08-15
    • 2011-05-12
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多