Python Data. Leaflet.js Maps.

Overview

PyPI Package Travis Build Status Gitter DOI binder

folium

folium

Python Data, Leaflet.js Maps

folium builds on the data wrangling strengths of the Python ecosystem and the mapping strengths of the Leaflet.js library. Manipulate your data in Python, then visualize it in a Leaflet map via folium.

Installation

$ pip install folium

or

$ conda install -c conda-forge folium

Documentation

https://python-visualization.github.io/folium/

Gallery

There are two galleries of Jupyter notebooks with examples, which you can see using Jupyter's nbviewer:

https://nbviewer.jupyter.org/github/python-visualization/folium/tree/master/examples/

https://nbviewer.jupyter.org/github/python-visualization/folium_contrib/tree/master/notebooks/

Contributing

We love contributions! folium is open source, built on open source, and we'd love to have you hang out in our community.

See our complete contributor's guide for more info.

Changelog

Check the changelog for a detailed list of the latest changes.

Comments
  • Add Search Box on Folium map

    Add Search Box on Folium map

    Can anybody point me towards how to add a Search box on Folium? I know Leaflet has this functionality but couldn't find any documentation on Folium. Thanks in advance.

    plugin feature request 
    opened by sangyh 61
  • Adding popup_attribute to the GeoJson feature

    Adding popup_attribute to the GeoJson feature

    I've made a change to the GeoJson feature to add a popup_attribute parameter. Including this changes the template so that attribute of the feautre is used as the popup for that feature. Based on the map I did for the #gistribe 15 minute map competition.

    opened by om-henners 44
  • Maps with complex polygon layers not rendering in Jupyter Lab/Notebook

    Maps with complex polygon layers not rendering in Jupyter Lab/Notebook

    Please add a code sample or a nbviewer link, copy-pastable if possible

    # Your code here
    
    

    Problem description

    I have been trying to run your sample notebook in examples/Geopandas.ipnyb in both Jupyter Lab and Jupyter Notebook. When I execute the cells, they all execute with no error but no map is rendered. I have had a similar problem in my own notebooks that seems to occur when the polygons are complex and have a lot of data points. I can get it to render simple polygons and so it doesn't seem to be a library problem. Can you confirm this example still works with the latest release?

    Versions below: notebook: 5.2.2 Jupyter Lab: 0.30 (note I upgraded to 0.31 but was having issues getting Lab to load) python: 3.6 Folium: 0.5.0

    Expected Output

    Rendered map in the examples/Geopandas.ipnyb

    Output of folium.__version__

    0.5.0

    jupyter 
    opened by EMarcantonio 41
  • Add image overlay

    Add image overlay

    This PR addresses #149.

    As of submission, it is not complete. I think I am adding layers correctly and put in the right template form, but it is not adding the layer to the rendered map.

    @ocefpaf What am I missing?

    opened by andrewgiessel 39
  • Folium doesn't package as expected when compiling to an executable

    Folium doesn't package as expected when compiling to an executable

    Please add a code sample or a nbviewer link, copy-pastable if possible

    import folium
    from tkinter import *
    
    class UserInterface:
    	"""This is just a basic interface to enter coordinates to test the folium functionality"""
    
    	def __init__(self):
    		super(UserInterface,self).__init__()
    		UserInterface.window = Tk()
    		UserInterface.map_name_label = Label(UserInterface.window, text="Enter A Map Name")
    		UserInterface.map_name_label.grid(row=0, column=0)
    		UserInterface.map_name_text = StringVar()
    		UserInterface.map_name_entry = Entry(UserInterface.window, textvariable=UserInterface.map_name_text)
    		UserInterface.map_name_entry.grid(row=0, column=1)
    
    		UserInterface.lat1label = Label(UserInterface.window, text="Point 1 Lat:")
    		UserInterface.lat1label.grid(row=1, column=0)
    		UserInterface.lat1text = StringVar()
    		UserInterface.lat1_entry = Entry(UserInterface.window, textvariable=UserInterface.lat1text)
    		UserInterface.lat1_entry.grid(row=1, column=1)
    
    		UserInterface.long1label = Label(UserInterface.window, text="Point 1 Long:")
    		UserInterface.long1label.grid(row=2, column=0)
    		UserInterface.long1text = StringVar()
    		UserInterface.lat1_entry = Entry(UserInterface.window, textvariable=UserInterface.long1text)
    		UserInterface.lat1_entry.grid(row=2, column=1)
    
    		UserInterface.lat2label = Label(UserInterface.window, text="Point 2 Lat:")
    		UserInterface.lat2label.grid(row=3, column=0)
    		UserInterface.lat2text = StringVar()
    		UserInterface.lat2_entry = Entry(UserInterface.window, textvariable=UserInterface.lat2text)
    		UserInterface.lat2_entry.grid(row=3, column=1)
    
    		UserInterface.long2label = Label(UserInterface.window, text="Point 2 Long:")
    		UserInterface.long2label.grid(row=4, column=0)
    		UserInterface.long2text = StringVar()
    		UserInterface.long2_entry = Entry(UserInterface.window, textvariable=UserInterface.long2text)
    		UserInterface.long2_entry.grid(row=4, column=1)
    
    		UserInterface.create_map_button = Button(UserInterface.window, text="Get Map", command=UserInterface.get_map, width=20)
    		UserInterface.create_map_button.grid(row=5, columnspan=2)
    		UserInterface.map_status = Label(UserInterface.window, text="")
    		UserInterface.map_status.grid(row=6, column=0)
    		UserInterface.window.mainloop()
    
    	def get_map():
    		UserInterface.map_status = Label(UserInterface.window, text="Getting map...")
    		UserInterface.map_status.grid(row=6, column=0)
    		centerpoint = [float(UserInterface.lat1text.get()), float(UserInterface.long1text.get())]
    		marker = [float(UserInterface.lat2text.get()),float(UserInterface.long2text.get())]
    		MapProgram.mapping.create_map(centerpoint=centerpoint, marker=marker)
    
    class FoliumTest:
    	"""This is just a basic class declaration to test the compiling process of folium when using Pyinstaller"""
    	
    	def __init__(self):
    		super(FoliumTest,self).__init__()
    
    	def create_map(self, centerpoint, marker):
    		map_image = folium.Map(location=[centerpoint[0], centerpoint[1]], zoom_start=14, tiles='OpenStreetMap')
    		centerpoint_icon_url = "http://maps.google.com/mapfiles/kml/shapes/star.png"
    		centerpoint_icon = folium.features.CustomIcon(centerpoint_icon_url, icon_size=(70,70))
    		folium.Marker([centerpoint[0], centerpoint[1]], icon=centerpoint_icon).add_to(map_image)
    		custom_map_icon_url = "http://maps.google.com/mapfiles/kml/shapes/shaded_dot.png"
    		custom_map_icon = folium.features.CustomIcon(custom_map_icon_url, icon_size=(50,50))
    		folium.Marker([marker[0], marker[1]], icon=custom_map_icon).add_to(map_image)
    		map_image.save(outfile=UserInterface.map_name_text.get() + ".html")
    		UserInterface.map_status = Label(UserInterface.window, text="Map created!")
    		UserInterface.map_status.grid(row=6, column=0)
    
    class MapProgram:
    	"""This sets up the interface with the mapping functionality"""
    
    	def __init__(self):
    		MapProgram.mapping = FoliumTest()
    		UserInterface()
    		#Optional Coords to use for testing
    		#centerpoint = [37.9969,-121.2919]
    		#marker = [38.0132,-121.3671])
    
    def main():
    	MapProgram()
    	
    if __name__ == '__main__':
    	main()
    

    Problem description

    When attempting to make an exe using pyinstaller, cx_freeze, py2exe etc, the folium module and its dependencies don't seem to get compiled properly so that the program can run successfully. In the process of trying to determine where the core problem resided, I came across unexpected behavior when typing from folium import * which resulted in an error AttributeError: module 'folium' has no attribute 'GeoJsonStyle' This seemed odd to me and I thought possibly why the exe is not being compiled as it would throw the error that _cnames.json could not be found, which makes sense if GeoJsonStyle doesn't exist in the module but perhaps it's supposed to. If I attempt to compile the above program, but comment out folium, the compiled executable runs fine, so I know it's related to folium specifically.

    Expected Output

    I expected the module to compile and load correctly so that it can be utilized in an executable.

    Output of folium.__version__

    0.7.0

    question 
    opened by nathan3leaf 32
  • Popup on polygon geojson features

    Popup on polygon geojson features

    I am not clear on "Popup on polygon geojson features". How can I construct a popup with polygon features. Where can I find a good example? Regards

    question 
    opened by orkun 31
  • replace GeoJsonStyle by kwarg style_function in GeoJson

    replace GeoJsonStyle by kwarg style_function in GeoJson

    To simplify choropleth generation.

    You have to provide a function feature -> style which is to me the most generic API.

    I need to update Map.geo_json and tests before merge.

    enhancement 
    opened by BibMartin 31
  • Tooltip classes (simple and geojson/topojson)

    Tooltip classes (simple and geojson/topojson)

    Added a new Tooltip class to reference GeoJson feature properties, with tests, documentation, and examples. It's flexible, and can take field names, aliases, that can be turned on/off with the 'labels' boolean, a 'sticky' property, and can incorporate Javascript's .toLocaleString() functionality if desired. The same string can be passed for each object with the 'text' variable as well if you'd rather not use the 'fields'.

    Also updated the GeoJson JS template to reference this Tooltip object, and added a test to make sure that the values passed exist in the properties.

    Use case at this nbviewer

    opened by jtbaker 30
  • Highlight map elements on mouseover/click

    Highlight map elements on mouseover/click

    Hi team,

    Thank you for developing folium, it's immensely helpful. We're using it to display routes on a map. To declutter some complicated routing maps, I would like to be able to highlight tagged groups of polylines (corresponding to a group of routes) by mouseover/clicking on them. I found some related leaflet examples online, but I am uncertain whether that is possible folium.

    enhancement 
    opened by agravier 27
  • Features

    Features

    This is another version of #170 . This is not ready for merge. But I would like to share it and have your point of view.

    At the cost of scrambling things in version 2, I think this is a more robust implementation of #170's ideas.

    The main new thing is a Feature object that has _parent and _children attributes, and a render method. Everything inherits from this (Map, Figure, Layer, ...).

    • The _parent is either another Feature, or None (if this is the root of the tree).
    • The _children is an OrdredDict of Features.
    • The render method calls the render method of each children, it can have a bodre effect on the parent, and it returns a string.
    enhancement 
    opened by BibMartin 24
  • HeatMap doesn't use weights

    HeatMap doesn't use weights

    I spend quite some time tracking down this bug. I think it should be fixed or the limitation should be clearly stated in the docs. This is a major time waster and makes a bad impression on this otherwise great package.

    This is a major bug coming for the upstream Leaflet.heat project.

    • https://github.com/python-visualization/folium/issues/496
    • https://github.com/Leaflet/Leaflet.heat/issues/43
    • https://github.com/Leaflet/Leaflet.heat/issues/74

    Problem description

    The plugins.HeatMap states that the points used to create the heat map can be weighted.

    data (list of points of the form [lat, lng] or [lat, lng, weight])
    

    However weights are simply ignored. This makes it useless for heatmaps that are based on a few points with different weights.

    Expected Output

    Weight should have impact. Or remove this option from the docs.

    bug 
    opened by ibayer 23
  • Add layers in Layer [draft]

    Add layers in Layer [draft]

    Our current approach to adding layers to the map and how that works with LayerControl is:

    • each Layer subclass adds itself to its parent
    • then when rendering LayerControl we remove the layers that have show=False.

    This has two issues, one big and one minor:

    • Performance. Layers are added, then removed, which is overhead. See https://github.com/python-visualization/folium/issues/1573.
    • Conceptually this doesn't correspond to how Leaflet is designed.

    Address this by letting subclasses of Layer only add themselves to their parent if show=True.

    We can remove the code from each of the subclasses and render it in Layer instead.

    If you're asking, whoever did this in the first place? It was me, my first PR on this project :) https://github.com/python-visualization/folium/pull/772. Then slight changes were made in LayerControl in https://github.com/python-visualization/folium/pull/1101.

    Downsides

    Order of multiple base layers

    The downside is that this changes behavior when you add multiple base layers. Currently only the first one is enabled. With this change the last one added will be enabled.

    I'm conflicted whether this is something we should want to avoid. It does fit more closely to how Leaflet works. If you want to add multiple TileLayers, you will have to use the show parameter to define which one you want to see. For example:

    m = Map(tiles='cartodbpositron')
    TileLayer('stamen toner', show=False).add_to(m)
    

    Downstream packages

    Packages that use folium might suffer from this change, which I would call an internal breaking change. End-users shouldn't notice it, but others that develop using folium may. For example tests that test the correctness of renders will have to update.

    Change parent class of two plugins

    • SideBySideLayers currently inherits from Layer, but is not actually a layer-type class. Inherit from MacroElement instead.
    • Same for TimestampedWmsTileLayers`, it's not a layer itself.

    I'll probably split these two changes of into separate PRs.

    opened by Conengmo 0
  • Leaflet Control [draft]

    Leaflet Control [draft]

    Trying out an idea I had based on a number of issues I've encountered. Use the Leaflet Control class to put legends, images or other custom stuff on the map. That way they integrate better with other Leaflet features, such as full screen and potentially layer control.

    Before this is ready I'll look at how this combines with layer control. And what the potential benefits are for other folium classes that are currently outside of Leaflet control.

    Possibly related issues: https://github.com/python-visualization/folium/issues/450 https://github.com/python-visualization/folium/issues/1344 https://github.com/python-visualization/folium/issues/1079 https://github.com/python-visualization/folium/issues/1167

    Some lessons:

    • Nearly everything in Leaflet is meant to move with the map. So inheriting from anything related to L.Layer is not the way to go.
    • L.Control is static, but can't be switched in LayerControl.
    • Adding arbitrary content as a control is one use case, making arbitrary content switchable with layer control is a separate use case.
    opened by Conengmo 0
  • Dark mode feature by wrapping Leaflet.TileLayer.ColorFilter plugin

    Dark mode feature by wrapping Leaflet.TileLayer.ColorFilter plugin

    Creating a dark mode feature for Folium seems necessary. One way to implement this feature is to wrap Leaflet.TileLayer.ColorFilter plugin, which applies CSS filters on map tiles.

    A nice demo is provided here: https://xtk93x.github.io/Leaflet.TileLayer.ColorFilter.updateFilter/

    I would be grateful if someone could take the time and wrap this lightweight plugin for Folium. Please let me know if there is any other workaround for creating dark mode (rather than using original tiles with dark theme).

    sidebyside

    plugin 
    opened by amir-arayeshnia 0
  • TimeSliderChoropleth stroke colour/width

    TimeSliderChoropleth stroke colour/width

    Hi,

    I am having issues with trying to change the line colour/width/opacity/removing dashed line for the TimeSliderChoropleth, is this possible or would it be a possible feature add please? The white dashed lines I am getting are meaning you cannot see the data on the map.

    Thanks (and thanks for all the development on this, its great), Amy

    enhancement 
    opened by amyycb 1
  • Leaflet.Control.Layers.Tree as a plugin in folium

    Leaflet.Control.Layers.Tree as a plugin in folium

    I would love to see Leaflet.Control.Layers.Tree as a plugin in folium! https://github.com/jjimenezshaw/Leaflet.Control.Layers.Tree

    It would boost the ability to interact with mulit-layered data maps created by folium.

    Nice example: https://jjimenezshaw.github.io/Leaflet.Control.Layers.Tree/examples/airports.html

    grafik

    plugin 
    opened by vizsim 2
Releases(v0.14.0)
  • v0.14.0(Dec 12, 2022)

    0.14.0

    Breaking changes

    • Use keyword arguments as CSS properties in FloatImage (@Conengmo #1668)
    • Upgrade Leaflet 1.6.0 to 1.9.3, set default font size (@Conengmo #1660)
    • Upgrade Bootstrap 3.2.0 to 5.2.2 (@Conengmo #1650)

    New plugins

    • Add GroupedLayerControl plugin (@chansooligans #1592)
    • Add SideBySide plugin (@fralc #1292)
    • Add TagFilterButton plugin (@Waffleboy #1343)

    Major improvements

    • Add optional Jenks Natural Breaks Optimization to Choropleth (@pmains #1634)
    • Add Map.show_in_browser() method (@Conengmo #1651)
    • Accept TileProvider objects from the xyzservices package (@martinfleis #1498)
    • Add support for Vega-Lite v4 and v5 (@wd60622 #1525)
    • Upgrade Font Awesome 4.6.3 to 6.2.0 (@Sujithkumardola #1637)

    Minor improvements

    • Allow cql_filter argument in WmsTileLayer (@Conengmo #1673)
    • Silently allow lowerCamelCase for vector path options (@Conengmo #1672)
    • Allow html popups and templating in ClickForMarker (@Conengmo #1666)
    • Add show_geometry_on_click argument to Draw plugin (@Conengmo #1657)
    • Automatically join string and numeric key_on values for Choropleth (@alessioarena #1193)
    • Add speed_slider argument to TimeStampedGeoJson (@gokyori #1279)
    • Add gradient option to vector path options (@nocturnalAndroid #1433)
    • Add initial timestamp argument to TimeSliderChoropleth (@jjbenes #1435)
    • Allow passing TileLayer to Map (@Conengmo #1624)
    • Use fullscreen window in Map._to_png() (@Conengmo #1656)
    • Expose webdriver argument in Map._to_png() (@WooilJeong #1620)
    • Export the map only in Map._to_png() (@Vayel #1197)

    Bug fixes

    • Fix LayerControl visibility on multiple renders (@Conengmo #1674)
    • Fix the new TagFilterButton plugin, it's not a Layer (@Conengmo #1671)
    • Fix TopoJson object path lookup (@Conengmo #1665)
    • Fix Choropleth when bins is a list of integers (@Conengmo #1664)
    • Fix attribution links in Notebooks opening within iframe (@Conengmo #1655)
    • Fix empty geojson failing when using style_function (@agussman #1213)
    • Fix Marker location validation for numpy array (@Conengmo #1647)
    • Fix date sorting in TimeSliderChoropleth (@Ade-StapleHill #1503)
    • Fix unescaped backticks in Popup (@Conengmo #1642)
    • Fix map.get_bounds() when using GeometryCollection (@amrutha1098 #1633)
    • Fix ClickForLatLng not imported in init (@amrutha1098 #1627)

    Documentation

    • More Flask examples (@Conengmo #1675)
    • Add PolyLine example to Quickstart.ipynb (@IamPhytan #1492)

    Thanks to:

    • All contributors to this release
    • @giswqs for fixing typos
    • @pmains for fixing flake8 warnings
    • @amrutha1098 for fixing tests
    • Our maintainers @ocefpaf and @Conengmo
    Source code(tar.gz)
    Source code(zip)
  • v0.13.0(Oct 7, 2022)

    0.13.0

    • Lazy popup: only load content on click (@marciogranzotto #1511)
    • Add Leaflet.VectorGrid plugin: VectorGridProtobuf (@iwpnd #1576)
    • Add blur parameter to HeatMapWithTime plugin (@Demetrio92 #1529)
    • New ClickForLatLng class: click to save lat/lon to clipboard (@BibMartin #1530)
    • Add width parameter to css for FloatImage (@beautah #1570)
    • Add support for tooltips in TimestampedGeoJson objects (@tblundy #1472)
    • Expose GeoJson's web retrieval to its own function (@beautah #1458)

    Bug fixes

    • Restore allowing simple Popup in GeoJson (@ocefpaf #1528)

    Tests

    • Fix test failure with recent branca change on map ids (@oefe #1556)

    Documentation

    • Thanks to @oefe, @Demetrio92 and @giswqs for helping out with the documentation
    Source code(tar.gz)
    Source code(zip)
  • v0.12.1.post1(Nov 19, 2021)

  • v0.12.1(Nov 19, 2021)

  • v0.12.0(Jan 6, 2021)

    0.12.0

    • GeoJson add zoom_on_click option, default False (@conengmo #1349)
    • Add Geocoder plugin (@WBP20 #1323)
    • Replace githack.com CDN with jsdelivr.com (@conengmo #1337)
    • Add SemiCircle plugin (@kuaka #1238)
    • Move hardcoded JS CDN links to class variables (@and-viceversa @conengmo #1312 #1416)
    • Treat data uris as valid (@Kirill888 #1428)
    • Add GeoJson marker option (@jtbaker #957)

    Bug fixes

    • Fix TimeSliderChoropleth breaking when using layer control (@markhudson42 #1380)
    • Fix GeoJson data loading (@conengmo #1353)
    • Fix heatmap weights/intensity (@conengmo #1354 #1282)
    • Fix multiple GeoJsonPopup 'name_getter' JS SyntaxError (@jtbaker #1347)
    • Fix TimestampedWmsTileLayers layer control (@conengmo #1319)

    API changes

    • Remove deprecated Mapbox and Cloudmade tilesets (@conengmo #1339)
    Source code(tar.gz)
    Source code(zip)
  • v0.11.0(May 6, 2020)

    0.11.0

    
    - Upgrade Leaflet 1.5.1 -> 1.6.0 (@conengmo #1241)
    - Add auto_start parameter to locate control plugin (@fullonic #1220)
    - New feature: GeoJsonPopup (@jtbaker #1023)
    
    Bug fixes
    
    - Choropleth: default color for with and without data (@conengmo #1288)
    - Update WMS data url in WmsTimeDimension example notebook (@sknzl #1259)
    - Search plugin: fix position argument (@jjbenes #1304)
    - Fix GeoJsonPopupAndTooltip example notebook (@conengmo #1298)
    - Change geopandas dataframe `to_crs()` usage syntax (@artnikitin #1251)
    - GeoJson: fix `show` parameter when embedding data (@conengmo #1289)
    - Use https CDN for leaflet.timedimension.control.min.css (@sknzl #1256)
    - Host leaflet-heatmap.js under different name to avoid adblockers (@conengmo #1240)
    
    API changes
    
    - Removed unused `folium.utilities.iter_points` function, use instead `iter_coords` (@conengmo #1294)
    Source code(tar.gz)
    Source code(zip)
  • v0.10.1(Dec 2, 2019)

    0.10.1

    Bug fixes

    • Fix TimeSliderChoropleth plugin broken setStyle (@khllkcm #1227)
    • Fix HeatMapWithTime plugin (@farisnanosoft @conengmo #1228)
    • Fix adding GeoJSON to MarkerCluster (@conengmo #1190)

    Documentation

    • Typo corrections in examples/Colormaps.ipynb (@nik-ahuja #1215)
    Source code(tar.gz)
    Source code(zip)
  • v0.10.0(Jul 24, 2019)

    0.10.0

    • Add user location plugin LocateControl (@fullonic #1116)
    • Bump Leaflet version from 1.4.0 to 1.5.1 (@ocefpaf #1149)
    • Choropleth: warn if key_on not found in data (@evwhiz #1144)

    Bug fixes

    • Fix layer control in DualMap plugin (@conengmo #1156)
    • Fix typo in DivIcon options (@fullonic #1181)
    • Fix JS error in Draw plugin export option (@fullonic #1180)
    • Fix typo in color options in Icon (@adnanhemani #1171)
    • Fix draw and edit options in Draw plugin (@mccarthyryanc #1175)
    • Remove warnings about conflicts with Draw plugin (@fullonic #1184)
    • More explicit key_on check in Choropleth (@leandroordonez #1169)

    Documentation

    • Add Flask example (@penguindustin #1140)
    • Improve contribution guide (@leonardofurtado #1173)
    Source code(tar.gz)
    Source code(zip)
  • v0.9.1(May 26, 2019)

  • v0.9.0(May 17, 2019)

    This version drops support for Python 2.7. (#1100, #1104, #1111) Python 3.5+ is required.

    v0.9.0

    • Geojson separate style mapping (conengmo #1058)
    • Warn for wrong color values in Icon (conengmo #1099)
    • Use Jinja2's tojson filter to convert data (conengmo #1101)
    • Pass **kwargs as options to Leaflet classes (conengmo #1101)
    • Explicit coordinate validation (conengmo #1090)
    • Add icon_create_function arg to FastMarkerCluster plugin (Gordonei #1109)
    • Add PolyLineOffset plugin (FabeG #1091)
    • Add Locate Control plugin (fullonic #1116)
    • Add Leaflet CustomPane class (Ipkirwin #1094)

    API changes

    • Remove add_tile_layer method from Map (conengmo #1127)
    • Remove args from Map, if needed use TileLayer instead (conengmo #1127)

    Bug fixes

    • Fix broken attribution for built-in tiles (FabeG #1128)
    • Fix broken prefer_canvas option of Map (FabeG #1133)
    Source code(tar.gz)
    Source code(zip)
  • v0.8.3(Mar 15, 2019)

    0.8.3

    • Relaxing location data type restriction (dskkato #1084)
    • Add options to draw control (EtsuNDmA #1035)
    • folium 0.8.x will be the last version series to support Python 2 (conengmo #1087)

    Bug Fixes

    • Use jquery.com CDN instead of Google (conengmo #1086)
    Source code(tar.gz)
    Source code(zip)
  • v0.8.2(Feb 26, 2019)

  • v0.8.0(Feb 26, 2019)

    0.8.0

    • Warn when using geojson data with GeometryCollection type in GeoJsonToolTip (jtbaker #988)
    • Change default popup width from 300px to 100% (ocefpaf #1040)
    • Automatically detect VegaLite version from specs (JarnoRFB #959)
    • Validate style and highlight functions in GeoJson (jtbaker #1024)
    • AntPath plugin (ocefpaf #1016)
    • Update Leaflet version to 1.4.0 (conengmo #1047)
    • DualMap plugin (conengmo #933)
    • CirclePattern and StripePattern plugins (talbertc-usgs #966)
    • Add option to make Marker draggable (Conengmo #1053)
    • Example notebook on creating polygons from points (HZALK #1056)

    API changes

    • Improved Search plugin (jtbaker #995)

    Bug Fixes

    • Re-add missing GeoJsonTooltip in init (Conengmo #1029)
    • Use Javascript template literals in DivIcon (Conengmo #1054)
    Source code(tar.gz)
    Source code(zip)
  • v0.7.0(Nov 20, 2018)

    0.7.0

    • Fixed HeatMap silently fail on incompatible data types (ocefpaf 1017)
    • Proper scaling on mobile phones (Conengmo 992)
    • Update leaflet to 1.3.4 (ocefpaf #939)
    • More options (tms, opacity, kwargs) in TileLayer (mpickering #948)
    • Add MousePosition plugin (btozer #916)
    • Add Minimap plugin (talbertc-usgs #968)
    • Replace Rawgit CDN with Githack (jtbaker #1002)
    • Handling of NaN and missing values in choropleth (FloChehab #1005)

    API changes

    • threshold_scale argument of choropleth is replaced by bins (FloChehab #1005)
    • Map.choropleth() moved to Choropleth class, former is deprecated (Conengmo #1011)

    Bug Fixes

    • Fix wrong default value for fmt argument of WmsTileLayer (conengmo #950)
    • Fix icon_create_function argument in MarkerCluster (conengmo #954)
    • Update stylesheet url in TimestampedGeoJson (frodebjerke #963)
    • Use Javascript template literals in Tooltip and Popup (jtbaker #955 #962)
    • Proper scaling on mobile phones (conengmo #992)
    Source code(tar.gz)
    Source code(zip)
  • v0.6.0(Aug 13, 2018)

    0.6.0

    • Popup accepts new arguments show (render open on page load) and sticky (popups only close when explicitly clicked) (jwhendy #778)
    • Added leaflet-search plugin (ghandic #759)
    • Improved Vector Layers docs, notebooks, and optional arguments (ocefpaf #731)
    • Implemented export=False/True option to the Draw plugin layer for saving GeoJSON files (ocefpaf #727)
    • Internal re-factor to reflect leaflet's organization (ocefpaf #725)
    • Added tooltip support to Markers (ocefpaf #724)
    • Added tooltip support to all vector layers (ocefpaf #722)
    • Added TimeSliderChoropleth plugin (halfdanrump #736)
    • Added show parameter to choose which overlays to show on opening (conengmo #772)
    • Added BeautifyIcon Plugin (arthuralvim and jeremybyu #819)
    • Explicit WMSTileLayer options, accept all **kwargs (conengmo #838)
    • Updated links to Draw plugin (conengmo #868)
    • Ingest any object that __geo_interface__ (ocefpaf #880)
    • Added FeatureGroupSubGroup plugin (shtrom #875)
    • Added duration option to TimestampedGeoJson (andy23512 #894)
    • Added zoom_control to Map to toggle zoom controls as per enhancement (#795) (okomarov #899)
    • Change default date_options in TimestampedGeoJson (andy23512 #914)
    • Added gradient argument to HeatMapWithTime (jtbaker #925)
    • Added Tooltip and GeoJsonTooltip classes (jtbaker #883)

    API changes

    • Refactor ImageOverlay, VideoOverlay, WmsTileLayer, and TileLayer to a new raster_layers.py module (ocefpaf #729)
    • Rectangle and Polygon were renamed and set to leaflet's defaults. Both now accepted all Path's optional arguments (ocefpaf #722)

    Bug Fixes

    • Fixed numpy array bug (#749) in _flatten
    • Unify get_bounds routine to avoid wrong responses
    • If Path option fill_color is present it will override fill=False
    • Fix disappearing layer control when using FastMarkerCluster (conengmo #866)
    • Host heatmap.js to circumvent adblockers (conengmo #886)
    • Fix permission error in Map._to_png() due to tempfile (conengmo #887)
    • Replace strftime use in TimesliderChoropleth example (conengmo #919)
    Source code(tar.gz)
    Source code(zip)
  • v0.5.0(Sep 13, 2017)

    v0.5.0

    • Added Draw plugin (ocefpaf #720)
    • Better handling of URL input (ocefpaf #717)
    • Versioned docs! Visit http://python-visualization.github.io/folium/docs-v0.5.0 or simply http://python-visualization.github.io/folium/ for the current master version.

    Bug Fixes

    • Fix VideoOverlay import (ocefpaf #719)
    • Fix choropleth docstring (lsetiawan #713)
    • Fix choropleth name in LayerControl (ocefpaf #493)
    Source code(tar.gz)
    Source code(zip)
  • v0.4.0(Sep 4, 2017)

    0.4.0

    • Optional iconCreateFunction for MarkerCluster to customize the icons (odovad #701)
    • Added HeatMapWithTime (Padarn #567)
    • Added MeasureControl (ocefpaf #669)
    • Added VideoOverlay plugin (ocefpaf #665)
    • Added TimestampedWmsTileLayers plugin (acrosby #644 and #660)
    • Vega-Lite features support via altair (njwilson23 #643)
    • Experimental support for a static png output (ocefpaf #634)
    • Added support for subdomains options in TileLayer (damselem #623)
    • Updated to leaflet 1.2.0 (ocefpaf #693)
    • Added FastMarkerCluster (James Gardiner #585 (proposed by @ruoyu0088))
    • Use the GIS standard "pixelated" css image-rendering in image overlays by default (dirkvdb #684 and ocefpaf #686)

    API changes

    • Removed features MarkerCluster in lieu of the plugin version (ocefpaf #704)
    • choropleth now takes a single geo_data instad of geo_path/geo_str leaving the parsing to GeoJSON, remove the unused data_out option, add geopandas support (ocefpaf #702)
    • All popups are considered HTML text by default (ocefpaf #689) If a popup requires rendering use the kwarg parse_html=True.
    • PolyLine, Circle and CircleMarker are set to leaflet's defaults and accepted all Path's optional arguments (ocefpaf #683 and #697)
    • WmsTileLayer and ImageOverlay are set to leaflet's defaults and accepted all TileLayer.WMS and ImageOverlay optional arguments respectively (ocefpaf #695 and #697)
    • Changed default max_bounds to False to reflect leaflet's default value (rdd9999 #641)
    • Modified Fullscreen plugin kwargs to be more "pythonic"
    • All .format properties are now .fmt for consistency
    • Removed the kwarg continuous_world that is no longer in leaflet's API (ocefpaf #695)

    Bug Fixes

    • subdomain option in TileLayer should be a list and WmsTileLayer overlay default is True (ocefpaf #707)
    • Checking if the lat, lon locations are floats to avoid empty maps (radumas #626)
    Source code(tar.gz)
    Source code(zip)
  • v0.3.0(Mar 6, 2017)

    0.3.0

    • Switched to leaflet 1.0.1 (juoceano #531 and ocefpaf #535)
    • Added continuous_world, world_copy_jump, and no_wrap options (ocefpaf #508)
    • Update font-awesome to 4.6.3 (ocefpaf #478)
    • Added text path (talespaiva #451 and ocefpaf #474)
    • More options added to LayerControl (qingkaikong #473)
    • More options added to fullscreen plugin (qingkaikong #468)
    • Added ColorLine object (bibmartin #449)
    • Added highlight function to GeoJSON, and Chrorpleth (JoshuaCano #341)
    • Added fullscreen plugin (sanga #437)
    • Added smooth_factoroption to GeoJSON, TopoJSON and Choropleth (JamesGardiner #428)
    • Map object now accepts Leaflet global switches (sgvandijk #424)
    • Added weight option to CircleMarker (palewire #581)

    Bug Fixes

    • Fixed image order (juoceano #536)
    • Fixed Icon rotation (juoceano #530 and sseemayer #527)
    • Fixed MIME type (text/plain) is not executable (talespaiva #440)
    • Update Travis-CI testing to incorporate branca and fix notebook tests (ocefpaf #436)
    • Removed MultiPolyLine and MultiPolygon, both are handled by PolyLine and PolyLine in leaflet 1.0.* (ocefpaf #554)
    • Removed deprecated MapQuest tiles (HashCode55 #562)
    Source code(tar.gz)
    Source code(zip)
  • v0.2.1(Apr 2, 2016)

    v0.2.1

    This is mostly a bugfix release

    • TopoJson.get_bounds() returns [lon,lat] instead of [lat,lon](eddies #383)
    • HeatMap was not passing "name" argument (eddies #380)
    • Fix heatmap.fit_bounds (same bug as #383) (BibMartin #384)
    • Fix WMS rendering (ocefpaf #404)
    • Change Leaflet.awesome-markers URL (BibMartin #393)
    Source code(tar.gz)
    Source code(zip)
  • v0.2.0(Feb 12, 2016)

    v0.2.0

    Major changes to the API with the new plugin system, and several new features in this version. For more information check the docs: http://python-visualization.github.io/folium/

    • Added control_scale (BibMartin and jelmelk #355)
    • WMS styles (ocefpaf #348)
    • Docs! (BibMartin #344, #337, #329)
    • No tile option (ocefpaf #330)
    • GeoJSON and TopoJSON style_function (BibMartin #317 and #266)
    • Colormaps (BibMartin # 300)
    • Map CRS (BibMartin #297)
    • GeoPandas drawing (BibMartin #296)
    • Div Icons (BibMartin #250)
    • CustomIcon (BibMartin #230)
    • HeatMap (BibMartin #213)

    And many bug fixes! (See https://github.com/python-visualization/folium/issues?&q=milestone:v0.2.0+is:closed+label:bug)

    Source code(tar.gz)
    Source code(zip)
  • v0.1.6(Nov 9, 2015)

    0.1.6

    • Added default options to tile_layer (ozak 1ad2336)
    • Introduce free scale for geo_json (Nikolay Koldunov 21e2757)
    • Added Image Overlay. (andrewgiessel b625613)
    • All popups can take a popup_width keyword to adjust the width in text/HTML (ocefpaf #157).
    • CAVEAT! Backwards incompatibly change: the keyword width in popups is now popup_width to avoid confusion with map width.
    • Simpler HTML repr (ocefpaf a343106)

    Bug Fixes

    • WMS layer (Martin Journois 610b42d)
    • Stamentoner URL (ocefpaf 7003dc5)
    Source code(tar.gz)
    Source code(zip)
  • v0.1.5(Aug 13, 2015)

    Version 0.1.5

    • Popups on lines. (themiurgo #122)
    • Map auto bounds. (themiurgo #134)
    • GeoJSON popup. (ocefpaf 7aad5e0)
    • Added cartodb positron and dark_matter tiles (ocefpaf d4daee7)
    • Forcing HTTPS when available. (ocefpaf c69ac89)
    • Added Stamen Watercolor tiles. (ocefpaf 8c1f837)
    • Added non-pixel width and height. (ocefpaf a87a449)
    • Default map size is defined as non-pixel and equal to 100% of the window. (ocefpaf dcaf575)

    Bug Fixes

    • Draw GeoJSON first. (ocefpaf d92bdbe)
    • Removed keyword unnecessary popup_on. (themiurgo 204d722)
    • Fixed MapQuest Open Aerial URL. (ocefpaf 5e787fa)
    Source code(tar.gz)
    Source code(zip)
  • v0.1.4(Apr 1, 2015)

    New features

    • Popups allow unicode. @apatil
    • Support for https protocol. @apatil
    • Custom popup width. @ocefpaf
    • Support multiPolyLine. @scari
    • Added max and min zoom keywords. @Paradoxeuh

    Bug Fixes

    • Remove margins from leaflet-tiles (Fixes #64). @lennart0901
    • Template not found on Windows OSes (Fixes #50). @Paradoxeuh
    • WMS layer on python 3. @ocefpaf
    Source code(tar.gz)
    Source code(zip)
  • v0.1.3(Dec 4, 2014)

PyPassword is a simple follow up to PyPassphrase

PyPassword PyPassword is a simple follow up to PyPassphrase. After finishing that project it occured to me that while some may wish to use that option

Scotty 2 Jan 22, 2022
A curated list of awesome Dash (plotly) resources

Awesome Dash A curated list of awesome Dash (plotly) resources Dash is a productive Python framework for building web applications. Written on top of

Luke Singham 1.7k Jan 07, 2023
Tools for writing, submitting, debugging, and monitoring Storm topologies in pure Python

Petrel Tools for writing, submitting, debugging, and monitoring Storm topologies in pure Python. NOTE: The base Storm package provides storm.py, which

AirSage 247 Dec 18, 2021
a python function to plot a geopandas dataframe

Pretty GeoDataFrame A minimum python function (~60 lines) to draw pretty geodataframe. Based on matplotlib, shapely, descartes. Installation just use

haoming 27 Dec 05, 2022
These data visualizations were created as homework for my CS40 class. I hope you enjoy!

Data Visualizations These data visualizations were created as homework for my CS40 class. I hope you enjoy! Nobel Laureates by their Country of Birth

9 Sep 02, 2022
Shaded 😎 quantile plots

shadyquant 😎 This python package allows you to quantile and plot lines where you have multiple samples, typically for visualizing uncertainty. Your d

Mehrad Ansari 13 Sep 29, 2022
A script written in Python that generate output custom color (HEX or RGB input to x1b hexadecimal)

ColorShell ─ 1.5 Planned for v2: setup.sh for setup alias This script converts HEX and RGB code to x1b x1b is code for colorize outputs, works on ou

Riley 4 Oct 31, 2021
Easily convert matplotlib plots from Python into interactive Leaflet web maps.

mplleaflet mplleaflet is a Python library that converts a matplotlib plot into a webpage containing a pannable, zoomable Leaflet map. It can also embe

Jacob Wasserman 502 Dec 28, 2022
Lumen provides a framework for visual analytics, which allows users to build data-driven dashboards from a simple yaml specification

Lumen project provides a framework for visual analytics, which allows users to build data-driven dashboards from a simple yaml specification

HoloViz 120 Jan 04, 2023
An interactive UMAP visualization of the MNIST data set.

Code for an interactive UMAP visualization of the MNIST data set. Demo at https://grantcuster.github.io/umap-explorer/. You can read more about the de

grant 70 Dec 27, 2022
πŸ—Ύ Streamlit Component for rendering kepler.gl maps

streamlit-keplergl πŸ—Ύ Streamlit Component for rendering kepler.gl maps in a streamlit app. 🎈 Live Demo 🎈 Installation pip install streamlit-keplergl

Christoph Rieke 39 Dec 14, 2022
A GUI for Pandas DataFrames

About Demo Installation Usage Features More Info About PandasGUI is a GUI for viewing, plotting and analyzing Pandas DataFrames. Demo Installation Ins

Adam Rose 2.8k Dec 24, 2022
WhatsApp Chat Analyzer is a WebApp and it can be used by anyone to analyze their chat. πŸ˜„

WhatsApp-Chat-Analyzer You can view the working project here. WhatsApp chat Analyzer is a WebApp where anyone either tech or non-tech person can analy

Prem Chandra Singh 26 Nov 02, 2022
A site that displays up to date COVID-19 stats, powered by fastpages.

https://covid19dashboards.com This project was built with fastpages Background This project showcases how you can use fastpages to create a static das

GitHub 1.6k Jan 07, 2023
This is a place where I'm playing around with pandas to analyze data in a csv/excel file.

pandas-csv-excel-analysis This is a place where I'm playing around with pandas to analyze data in a csv/excel file. 0-start A very simple cheat sheet

Chuqin 3 Oct 05, 2022
Import, visualize, and analyze SpiderFoot OSINT data in Neo4j, a graph database

SpiderFoot Neo4j Tools Import, visualize, and analyze SpiderFoot OSINT data in Neo4j, a graph database Step 1: Installation NOTE: This installs the sf

Black Lantern Security 42 Dec 26, 2022
Simple python implementation with matplotlib to manually fit MIST isochrones to Gaia DR2 color-magnitude diagrams

Simple python implementation with matplotlib to manually fit MIST isochrones to Gaia DR2 color-magnitude diagrams

Karl Jaehnig 7 Oct 22, 2022
The Metabolomics Integrator (MINT) is a post-processing tool for liquid chromatography-mass spectrometry (LCMS) based metabolomics.

MINT (Metabolomics Integrator) The Metabolomics Integrator (MINT) is a post-processing tool for liquid chromatography-mass spectrometry (LCMS) based m

SΓΆren Wacker 0 May 04, 2022
Political elections, appointment, analysis and visualization in Python

Political elections, appointment, analysis and visualization in Python poli-sci-kit is a Python package for political science appointment and election

Andrew Tavis McAllister 9 Dec 01, 2022
Statistics and Visualization of acceptance rate, main keyword of CVPR 2021 accepted papers for the main Computer Vision conference (CVPR)

Statistics and Visualization of acceptance rate, main keyword of CVPR 2021 accepted papers for the main Computer Vision conference (CVPR)

Hoseong Lee 78 Aug 23, 2022