Создайте легенду на карте Folium


person sparrow    schedule 26.05.2016    source источник


Ответы (5)


Вы можете довольно легко добавить легенду;

#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)

Вы можете увидеть мой полный пример здесь;

Карта фолиума с примером легенды

person Harley    schedule 25.10.2018
comment
Спасибо @user, это очень полезно, я больше искал способ создать легенду на основе дискретных значений, которые были представлены в виде маркеров определенными цветами. - person sparrow; 25.10.2018
comment
Как увеличить размер подписи, пожалуйста, помогите мне - person Naveen Srikanth; 21.08.2020

Попробуйте использовать

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())
person Penny Pang    schedule 07.06.2017
comment
Спасибо, это не совсем легенда, поскольку она не связывает маркер на карте с конкретным предметом, но это все же полезный совет. - person sparrow; 28.06.2017

В Folium теперь есть возможность легко добавлять изображения в версии 0.15.

from folium.plugins import FloatImage
image_file = 'image.PNG'

FloatImage(image_file, bottom=0, left=86).add_to(mymap)
person sparrow    schedule 18.12.2017
comment
Могу я тоже удалить изображение с карты? - person Jas; 16.06.2019

Вы можете пройти половину пути с цветом текста / метки в элементе управления слоем, если вы добавите html в параметр имени маркера или полилинии:

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> &nbsp; {item} &nbsp; <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;
     
     ">
     &nbsp; {title} 
     
     {itm_txt}

      </div> """.format( title = "Legend html", itm_txt= html_itms)
map.get_root().html.add_child(folium.Element( legend_html ))

Ссылка basic

Ссылка расширенный


m.get_root().html
<branca.element.Element at 0x7f5e1ca61250>

https://pypi.org/project/branca/

  • для дальнейших манипуляций
person InLaw    schedule 24.09.2019
comment
Это здорово, но я не могу найти эти методы в документации, не могли бы поделиться ссылкой? Я хотел бы знать, можно ли позже удалить дочерний элемент html - person Ricardo Sanchez; 23.01.2021
comment
@RicardoSanchez это branca.element.Element - person InLaw; 23.01.2021
comment
Это действительно хорошо. - person delimiter; 01.04.2021

У меня была такая же проблема, и я использовал этот быстрый взлом HTML-кода, созданного Folium, чтобы добавить легенду. Это не особо изящно, но работает. Поскольку мне это нужно было всего несколько раз, я вручную сгенерировал легенду как изображение (legend.png), но я полагаю, что вы могли бы создать сценарий для автоматического создания легенды, если бы вы делали это часто. Я добавил следующие компоненты в соответствующие разделы HTML-файла, в который Folium выводит мою карту:

         <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, чтобы легенда располагалась над картой.

person Dan Kinn    schedule 11.12.2017