在 Folium 地图上创建图例
Create a Legend on a Folium map
此时 Folium 文档不完整:https://folium.readthedocs.io/en/latest/
根据不完整文档的索引,支持或将支持 Legends 和 Layers。我花了一些时间在网上寻找示例,但到目前为止一无所获。如果有人知道如何创建这些东西,或者可以给我指点文档或教程,我将不胜感激。
尝试使用
feature_group = FeatureGroup(name='Layer1')
feature_group2 = FeatureGroup(name='Layer2')
然后添加到您的地图
map = folium.Map(zoom_start=6)
# coordinates to locate your marker
COORDINATE = [(333,333)] # example coordinate
COORDINATE2 = [(444,444)]
# add marker to your map
folium.Marker(location=COORDINATE).add_to(feature_group)
folium.Marker(location=COORDINATE2).add_to(feature_group2)
map.add_child(feature_group)
map.add_child(feature_group2)
# turn on layer control
map.add_child(folium.map.LayerControl())
我遇到了同样的问题,并使用这个快速破解到 Folium 生成的 HTML 来添加图例。它不是特别优雅,但它确实有效。因为我只需要几次,所以我手动将图例生成为图像 (legend.png),但我想如果您经常这样做,您可以创建一个脚本来自动创建图例。我在 Folium 将我的地图输出到的 HTML 文件的适当部分添加了以下组件:
<style> #background_img {
position : absolute;
background:url('legend.png');
width : 16.9%;
height: 17.7%;
right: 20px;
bottom: 50px;
z-index: 99;
background-repeat: no-repeat;
background-size: contain;
}
</style>
<div id="background_img" class="backgroundimg" ></div>
您还需要将地图样式元素的 z-index 更改为小于 99 的值,以便图例位于地图上方。
Folium 现在可以通过 0.15 版轻松添加图像。
from folium.plugins import FloatImage
image_file = 'image.PNG'
FloatImage(image_file, bottom=0, left=86).add_to(mymap)
您可以很容易地添加图例;
#specify the min and max values of your data
colormap = branca.colormap.linear.YlOrRd_09.scale(0, 8500)
colormap = colormap.to_step(index=[0, 1000, 3000, 5000, 8500])
colormap.caption = 'Incidents of Crime in Victoria (year ending June 2018)'
colormap.add_to(world_map)
你可以在这里看到我的完整例子;
如果您将 html 添加到标记或折线的名称参数中,您可以在图层控件中使用 text/label 颜色完成一半的工作:
import folium
print( folium.__version__)
import numpy as np
lon_ct = 50
fkt=10
num = 60
m = folium.Map((lon_ct, 6), tiles='stamentoner', zoom_start=6 )
lats = (lon_ct * np.cos(np.linspace(0, 2*np.pi, num))/fkt ) + lon_ct
lons = (lon_ct * np.sin(np.linspace(0, 2*np.pi, num))/fkt ) + 10
colors = np.sin(5 * np.linspace(0, 2*np.pi, num))
lgd_txt = '<span style="color: {col};">{txt}</span>'
for idx, color in enumerate( ['red', 'blue']): # color choice is limited
print(color)
fg = folium.FeatureGroup(name= lgd_txt.format( txt= color+' egg', col= color))
pl = folium.features.PolyLine(
list(zip(lats, lons - idx*fkt)),
color=color,
weight=10, )
fg.add_child(pl)
m.add_child( fg)
folium.map.LayerControl('topleft', collapsed= False).add_to(m)
m
来源:html_legend
如果你知道一点HTML:
item_txt = """<br> {item} <i class="fa fa-map-marker fa-2x" style="color:{col}"></i>"""
html_itms = item_txt.format( item= "mark_1" , col= "red")
legend_html = """
<div style="
position: fixed;
bottom: 50px; left: 50px; width: 200px; height: 160px;
border:2px solid grey; z-index:9999;
background-color:white;
opacity: .85;
font-size:14px;
font-weight: bold;
">
{title}
{itm_txt}
</div> """.format( title = "Legend html", itm_txt= html_itms)
map.get_root().html.add_child(folium.Element( legend_html ))
Link basic
Link advanced
m.get_root().html
<branca.element.Element at 0x7f5e1ca61250>
https://pypi.org/project/branca/
- 进一步操作
此时 Folium 文档不完整:https://folium.readthedocs.io/en/latest/
根据不完整文档的索引,支持或将支持 Legends 和 Layers。我花了一些时间在网上寻找示例,但到目前为止一无所获。如果有人知道如何创建这些东西,或者可以给我指点文档或教程,我将不胜感激。
尝试使用
feature_group = FeatureGroup(name='Layer1')
feature_group2 = FeatureGroup(name='Layer2')
然后添加到您的地图
map = folium.Map(zoom_start=6)
# coordinates to locate your marker
COORDINATE = [(333,333)] # example coordinate
COORDINATE2 = [(444,444)]
# add marker to your map
folium.Marker(location=COORDINATE).add_to(feature_group)
folium.Marker(location=COORDINATE2).add_to(feature_group2)
map.add_child(feature_group)
map.add_child(feature_group2)
# turn on layer control
map.add_child(folium.map.LayerControl())
我遇到了同样的问题,并使用这个快速破解到 Folium 生成的 HTML 来添加图例。它不是特别优雅,但它确实有效。因为我只需要几次,所以我手动将图例生成为图像 (legend.png),但我想如果您经常这样做,您可以创建一个脚本来自动创建图例。我在 Folium 将我的地图输出到的 HTML 文件的适当部分添加了以下组件:
<style> #background_img {
position : absolute;
background:url('legend.png');
width : 16.9%;
height: 17.7%;
right: 20px;
bottom: 50px;
z-index: 99;
background-repeat: no-repeat;
background-size: contain;
}
</style>
<div id="background_img" class="backgroundimg" ></div>
您还需要将地图样式元素的 z-index 更改为小于 99 的值,以便图例位于地图上方。
Folium 现在可以通过 0.15 版轻松添加图像。
from folium.plugins import FloatImage
image_file = 'image.PNG'
FloatImage(image_file, bottom=0, left=86).add_to(mymap)
您可以很容易地添加图例;
#specify the min and max values of your data
colormap = branca.colormap.linear.YlOrRd_09.scale(0, 8500)
colormap = colormap.to_step(index=[0, 1000, 3000, 5000, 8500])
colormap.caption = 'Incidents of Crime in Victoria (year ending June 2018)'
colormap.add_to(world_map)
你可以在这里看到我的完整例子;
如果您将 html 添加到标记或折线的名称参数中,您可以在图层控件中使用 text/label 颜色完成一半的工作:
import folium
print( folium.__version__)
import numpy as np
lon_ct = 50
fkt=10
num = 60
m = folium.Map((lon_ct, 6), tiles='stamentoner', zoom_start=6 )
lats = (lon_ct * np.cos(np.linspace(0, 2*np.pi, num))/fkt ) + lon_ct
lons = (lon_ct * np.sin(np.linspace(0, 2*np.pi, num))/fkt ) + 10
colors = np.sin(5 * np.linspace(0, 2*np.pi, num))
lgd_txt = '<span style="color: {col};">{txt}</span>'
for idx, color in enumerate( ['red', 'blue']): # color choice is limited
print(color)
fg = folium.FeatureGroup(name= lgd_txt.format( txt= color+' egg', col= color))
pl = folium.features.PolyLine(
list(zip(lats, lons - idx*fkt)),
color=color,
weight=10, )
fg.add_child(pl)
m.add_child( fg)
folium.map.LayerControl('topleft', collapsed= False).add_to(m)
m
来源:html_legend
如果你知道一点HTML:
item_txt = """<br> {item} <i class="fa fa-map-marker fa-2x" style="color:{col}"></i>"""
html_itms = item_txt.format( item= "mark_1" , col= "red")
legend_html = """
<div style="
position: fixed;
bottom: 50px; left: 50px; width: 200px; height: 160px;
border:2px solid grey; z-index:9999;
background-color:white;
opacity: .85;
font-size:14px;
font-weight: bold;
">
{title}
{itm_txt}
</div> """.format( title = "Legend html", itm_txt= html_itms)
map.get_root().html.add_child(folium.Element( legend_html ))
Link basic
Link advanced
m.get_root().html
<branca.element.Element at 0x7f5e1ca61250>
https://pypi.org/project/branca/
- 进一步操作