npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

svgmap

v2.12.1

Published

svgMap is a JavaScript library that lets you easily create an interactable world map comparing customizable data for each country.

Downloads

33,758

Readme

svgMap

svgMap is a JavaScript library that lets you easily create an interactable world map comparing customizable data for each country.

Live demo: https://stephanwagner.me/create-world-map-charts-with-svgmap#svgMapDemoGDP


Install

ES6

npm install --save svgmap
import svgMap from 'svgmap';
import 'svgmap/dist/svgMap.min.css';

CDN

<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/svg-pan-zoom.min.js"></script>
<script src="https://cdn.jsdelivr.net/gh/StephanWagner/[email protected]/dist/svgMap.min.js"></script>
<link href="https://cdn.jsdelivr.net/gh/StephanWagner/[email protected]/dist/svgMap.min.css" rel="stylesheet">

Usage

Create an HTML element where to show your map, then use JavaScript to initialize:

<div id="svgMap"></div>
new svgMap({
  targetElementID: 'svgMap',
  data: {
    data: {
      gdp: {
        name: 'GDP per capita',
        format: '{0} USD',
        thousandSeparator: ',',
        thresholdMax: 50000,
        thresholdMin: 1000
      },
      change: {
        name: 'Change to year before',
        format: '{0} %'
      }
    },
    applyData: 'gdp',
    values: {
      AF: { gdp: 587, change: 4.73 },
      AL: { gdp: 4583, change: 11.09 },
      DZ: { gdp: 4293, change: 10.01 }
      // ...
    }
  }
});

This example code creates a world map with the GDP per capita and its change to the previous year: https://stephanwagner.me/create-world-map-charts-with-svgmap#svgMapDemoGDP


Options

You can pass the following options into svgMap:

| Option | Type | Default | | |----------------------------------------------------------------|----------------------|-----------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | targetElementID | string | | The ID of the element where the world map will render (Required) | | minZoom | float | 1 | Minimal zoom level | | maxZoom | float | 25 | Maximal zoom level | | initialZoom | float | 1.06 | Initial zoom level | | initialPan | object | | Initial pan on x and y axis (e.g. { x: 30, y: 60 }) | | showContinentSelector | boolean | false | Show continent selector | | zoomScaleSensitivity | float | 0.2 | Sensitivity when zooming | | showZoomReset | boolean | false | Show zoom reset button | | mouseWheelZoomEnabled | boolean | true | Enables or disables zooming with the scroll wheel | | mouseWheelZoomWithKey | boolean | false | Allow zooming only when one of the following keys is pressed: SHIFT, CONTROL, ALT, COMMAND, OPTION | | mouseWheelKeyMessage | string | 'Press the [ALT] key to zoom' | The message when trying to scroll without a key | | mouseWheelKeyMessageMac | string | Press the [COMMAND] key to zoom | The message when trying to scroll without a key on MacOS | | colorMax | string | '#CC0033' | Color for highest value. Accepts CSS vars, color names, rgb or hex values. | | colorMin | string | '#FFE5D9' | Color for lowest value. Accepts CSS vars, color names, rgb or hex values. | | colorNoData | string | '#E2E2E2' | Color when there is no data. Accepts CSS vars, color names, rgb or hex values. | | flagType | 'image', 'emoji' | 'image' | The type of the flag in the tooltip | | flagURL | string | | The URL to the flags when using flag type 'image'. The placeholder {0} will get replaced with the lowercase ISO 3166-1 alpha-2 country code. Default: 'https://cdn.jsdelivr.net/gh/hjnilsson/country-flags@latest/svg/{0}.svg' | | hideFlag | boolean | false | Hide the flag in tooltips | | noDataText | string | 'No data available' | The text to be shown when no data is present | | touchLink | boolean | false | Set to true to open the link (see data.values.link) on mobile devices, by default the tooltip will be shown | | onGetTooltip | function | | Called when a tooltip is created to custimize the tooltip content (function (tooltipDiv, countryID, countryValues) { return 'Custom HTML'; }) | | countries | object | | Additional options specific to countries: | |    ↳ EH | boolean | true | When set to false, Western Sahara (EH) will be combined with Morocco (MA) | | data | object | | The chart data to use for coloring and to show in the tooltip. Use a unique data-id as key and provide following options as value: | |    ↳ name | string | | The name of the data, it will be shown in the tooltip | |    ↳ format | string | | The format for the data value, {0} will be replaced with the actual value | |    ↳ thousandSeparator | string | ',' | The character to use as thousand separator | |    ↳ thresholdMax | number | null | Maximal value to use for coloring calculations | |    ↳ thresholdMin | number | 0 | Minimum value to use for coloring calculations | |    ↳ applyData | string | | The ID (key) of the data that will be used for coloring | |    ↳ values | object | | An object with the ISO 3166-1 alpha-2 country code as key and the chart data for each country as value | |         ↳ color | string | | Forces a color for this country | |         ↳ link | string | | An URL to redirect to when clicking the country | |         ↳ linkTarget | string | | The target of the link. By default the link will be opened in the same tab. Use '_blank' to open the link in a new tab | | countryNames | object | | An object with the ISO 3166-1 alpha-2 country code as key and the country name as value |

Styling

You can overwrite the following scss variables to customize the style of the map:

| Variable | Default | |---------------------------------|------------------------------| | $textColor | #111 | | $textColorLight | #777 | | $oceanColor | #d9ecff | | $mapActiveStrokeColor | #333 | | $mapActiveStrokeWidth | 1.5 | | $blockZoomNoticeColor | #fff | | $blockZoomNoticeBackgroundColor | rgba(0, 0, 0, 0.8) | | $mapControlsColor | #fff | | $mapControlsBackgroundColor | #fff | | $mapControlsIconColor | #ccc | | $mapControlsIconColorActive | #000 | | $mapControlsDisabledColor | #eee | | $mapControlsBoxShadow | 0 0 0 2px rgba(0, 0, 0, 0.1) | | $mapTooltipColor | #111 | | $mapTooltipBackgroundColor | #fff | | $mapTooltipFlagBackgroundColor | rgba(0, 0, 0, 0.15) | | $mapTooltipBoxShadowColor | rgba(0, 0, 0, 0.2) | | $continentControlsBoxShadow | 0 0 0 2px rgba(0, 0, 0, 0.1) | | $countryStrokeColor | #fff |

Localize

Use the option countryNames to translate country names. In the folder demo/html/local or demo/es6/local you can find translations in following languages: Arabic, Chinese, English, French, German, Hindi, Portuguese, Russian, Spanish, Urdu.

To create your own translations, check out country-list by Saša Stamenković.


Attribution

If you need more detailed maps or more options for your data, there is a great open source project called datawrapper out there, with a lot more power than svgMap.

svgMap uses svg-pan-zoom by Anders Riutta (now maintained by bumpu).

The country flag images are from country-flags by Hampus Joakim Borgos.

Most data in the demos was taken from Wikipedia.