#!/usr/bin/env python # coding: utf-8 # # How to create Popups # In[1]: import sys sys.path.insert(0,'..') import folium print (folium.__file__) print (folium.__version__) # ## Simple popups # You can define your popup at the feature creation, but you can also overwrite them afterwards: # In[2]: m = folium.Map([45,0], zoom_start=4) folium.Marker([45,-30], popup="inline implicit popup").add_to(m) folium.CircleMarker([45,-10], radius=1e5, popup=folium.Popup("inline explicit Popup")).add_to(m) ls = folium.PolyLine([[43,7],[43,13],[47,13],[47,7],[43,7]], color='red') ls.add_children(folium.Popup("outline Popup on Polyline")) ls.add_to(m) gj = folium.GeoJson({ "type": "Polygon", "coordinates": [[[27,43],[33,43],[33,47],[27,47]]]}) gj.add_children(folium.Popup("outline Popup on GeoJSON")) gj.add_to(m) m # ## Vega Popup # You may know that it's possible to create awesome Vega charts with (or without) `vincent`. If you're willing to put one inside a popup, it's possible thanks to `folium.Vega`. # In[3]: import vincent, json import numpy as np scatter_points = { 'x' : np.random.uniform(size=(100,)), 'y' : np.random.uniform(size=(100,)), } # Let's create the vincent chart. scatter_chart = vincent.Scatter(scatter_points, iter_idx='x', width=600, height=300) # Let's convert it to JSON. scatter_json = scatter_chart.to_json() # Let's convert it to dict. scatter_dict = json.loads(scatter_json) # In[4]: m = folium.Map([43,-100], zoom_start=4) # Let's create a Vega popup based on scatter_chart. popup = folium.Popup(max_width=800) folium.Vega(scatter_chart, height=350, width=650).add_to(popup) folium.Marker([30,-120], popup=popup).add_to(m) # Let's create a Vega popup based on scatter_json. popup = folium.Popup(max_width=800) folium.Vega(scatter_json, height=350, width=650).add_to(popup) folium.Marker([30,-100], popup=popup).add_to(m) # Let's create a Vega popup based on scatter_dict. popup = folium.Popup(max_width=800) folium.Vega(scatter_dict, height=350, width=650).add_to(popup) folium.Marker([30,-80], popup=popup).add_to(m) m # ## Fancy HTML popup # Now, you can put any HTML code inside of a Popup, thaks to the `IFrame` object. # In[5]: m = folium.Map([43,-100], zoom_start=4) html="""

This is a big popup


With a few lines of code...

from numpy import *
exp(-2*pi)

""" iframe = folium.element.IFrame(html=html, width=500, height=300) popup = folium.Popup(iframe, max_width=2650) folium.Marker([30,-100], popup=popup).add_to(m) m # Note that you can put another `Figure` into an `IFrame` ; this should let you do stange things... # In[6]: # Let's create a Figure, with a map inside. f = folium.element.Figure() folium.Map([-25,150], zoom_start=3).add_to(f) # Let's put the figure into an IFrame. iframe = folium.element.IFrame(width=500, height=300) f.add_to(iframe) # Let's put the IFrame in a Popup popup = folium.Popup(iframe, max_width=2650) # Let's create another map. m = folium.Map([43,-100], zoom_start=4) # Let's put the Popup on a marker, in the second map. folium.Marker([30,-100], popup=popup).add_to(m) # We get a map in a Popup. Not really useful, but powerful. m # ## Conclusion # # That's all folks ! # # Hope it'll be useful to you. Don't hesitate to provide a feedback on what can be improved, which method do you prefer, etc.