Skip to main content

SpotMap

Interactive epidemiological spot maps for India

SpotMap turns a CSV of case/control coordinates into a publication-ready interactive HTML map with:

  • Dot density clustering (cases only)
  • Spot map pins (cases and/or controls) with custom colours
  • Automatic state/district boundary overlays (bundled data — no shapefile setup needed)
  • Sidebar with mode toggle, colour pickers, pin size slider, and PNG/PDF export
  • Smart auto-detection of latitude, longitude, and outcome columns

Installation

pip install spotmap

Quick start

Interactive (no coding required)

The easiest way — works great in Google Colab or a Jupyter notebook. Install it, then run these two lines:

!pip install spotmap

import spotmap
spotmap.run()

SpotMap then walks you through a few simple prompts:

  1. Upload your data file (in Colab an upload button appears; elsewhere it asks for the file path).
  2. Confirm which columns hold latitude, longitude, and the case/control outcome (SpotMap pre-selects its best guess).
  3. Pick which value means "case".

The finished map is shown right in the notebook cell — no need to hunt for a file — and is also saved as spotmap.html (pass a different name with spotmap_run("my_map.html")).

In a plain terminal, spotmap_run() reads your answers from the keyboard and saves an HTML file to open in your browser. For automated scripts, use the Python API below instead.

Python API

from spotmap import SpotMap

SpotMap("my_data.csv").build().save("map.html")

Command line

spotmap my_data.csv -o map.html

CSV format

SpotMap auto-detects columns — no strict naming required.

Requirement Details
Coordinates Separate lat / lon columns or a combined "lat,lon" column
Outcome A column named outcome, status, case_control, etc. with values like case / control

Example:

latitude,longitude,outcome
28.6,77.2,case
19.0,72.8,control
13.0,80.2,case

Python API reference

SpotMap(
    csv_path,                       # required
    state_shp=None,                 # custom state boundary (shapefile/GeoPackage)
    district_shp=None,              # custom district boundary
    lat_col=None,                   # override auto-detection
    long_col=None,
    outcome_col=None,
    case_value=None,                # value that means "case" in outcome_col
    count_cutoff=2,                 # districts ≤ cutoff → district zoom
    margin_deg=1.0,                 # boundary crop padding
    cluster_color="#E85252",        # dot-density bubble colour
    case_color="#D55757",           # case pin colour
    control_color="#7676E7",        # control pin colour
)

Chain calls:

sm = SpotMap("data.csv", case_color="#FF0000").build()
sm.save("map.html")

# Access the raw Folium map for further customisation
folium_map = sm.map

CLI reference

usage: spotmap [-h] [-o OUTPUT] [--state-shp STATE_SHP]
               [--district-shp DISTRICT_SHP] [--lat-col LAT_COL]
               [--lon-col LON_COL] [--outcome-col OUTCOME_COL]
               [--case-value CASE_VALUE] [--count-cutoff COUNT_CUTOFF]
               [--cluster-color CLUSTER_COLOR] [--case-color CASE_COLOR]
               [--control-color CONTROL_COLOR]
               csv

Team

SpotMap is developed by the ADARV team:

Name Role
Muniraj Mallesan Maintainer
Dr. Sharan Murali Team Lead
Manikandan K
Shanmuga Sundharam
Yogita Chaudhary
Barath U
Balaji S
Deepana R

License

MIT © ADARV

Release files for spotmap 0.1.32

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for spotmap 0.1.32
File Size Uploaded
spotmap-0.1.32.tar.gz 1.9 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for spotmap 0.1.32
File Interpreter ABI Platform
spotmap-0.1.32-py3-none-any.whl Python 3 none any Details

Total release size: 3.8 MB

Release files / spotmap-0.1.32.tar.gz

Download URL spotmap-0.1.32.tar.gz
Size 1.9 MB
Tags Source
SHA-256 checksum
How to use checksums
1d67830b9892e28c8959b9d39844492b3e21e3dd2d4b743ebc201e247c5fe9ce
BLAKE2b-256 checksum
How to use checksums
4428faf7a94295c94dae73c4ef569f2dea0b33cbffa1e6b9af1e0ba8c22cbdf2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.3

Release files / spotmap-0.1.32-py3-none-any.whl

Download URL spotmap-0.1.32-py3-none-any.whl
Size 1.9 MB
Tags Python 3
SHA-256 checksum
How to use checksums
e205c7d00a7464ba7d9da0947ca52cb7d1ab78bd8f4301156455db55ee65927c
BLAKE2b-256 checksum
How to use checksums
a46a958b6feccc1fac3a37da795048b1abb7e0cdac3fbfbd870a3c9a336045ae
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.3

Release history Release notifications | RSS feed

0.1.35

2 release files

0.1.34

2 release files

0.1.33

2 release files

This release

0.1.32 This release

2 release files

0.1.31

2 release files

0.1.30

2 release files

0.1.27

2 release files

0.1.26

2 release files

0.1.25

2 release files

0.1.24

2 release files

0.1.23

2 release files

0.1.22

2 release files

0.1.20

2 release files

0.1.19

2 release files

0.1.18

2 release files

0.1.17

2 release files

0.1.16

2 release files

0.1.15

2 release files

0.1.14

2 release files

0.1.11

2 release files

0.1.10

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page