From b60041dc1a4a4c75ca03c792c980bf011a03afa0 Mon Sep 17 00:00:00 2001 From: troh Date: Sun, 11 Jul 2021 00:50:19 -0700 Subject: [PATCH 01/12] adding pkgdown site --- .Rbuildignore | 3 +++ .github/workflows/pkgdown.yaml | 49 ++++++++++++++++++++++++++++++++++ .gitignore | 1 + NEWS.md | 5 +++- _pkgdown.yml | 6 +++++ 5 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/pkgdown.yaml create mode 100644 _pkgdown.yml diff --git a/.Rbuildignore b/.Rbuildignore index 609365c..8e1c9d0 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -7,3 +7,6 @@ inst/examples/examples.R ^CRAN-RELEASE$ ^doc$ ^Meta$ +^_pkgdown\.yml$ +^docs$ +^pkgdown$ diff --git a/.github/workflows/pkgdown.yaml b/.github/workflows/pkgdown.yaml new file mode 100644 index 0000000..56b9a89 --- /dev/null +++ b/.github/workflows/pkgdown.yaml @@ -0,0 +1,49 @@ +on: + push: + branches: + - main + tags: + -'*' + +name: pkgdown + +jobs: + pkgdown: + runs-on: macOS-latest + env: + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + steps: + - uses: actions/checkout@v2 + + - uses: r-lib/actions/setup-r@v1 + + - uses: r-lib/actions/setup-pandoc@v1 + + - name: Query dependencies + run: | + install.packages('remotes') + saveRDS(remotes::dev_package_deps(dependencies = TRUE), ".github/depends.Rds", version = 2) + writeLines(sprintf("R-%i.%i", getRversion()$major, getRversion()$minor), ".github/R-version") + shell: Rscript {0} + + - name: Restore R package cache + uses: actions/cache@v2 + with: + path: ${{ env.R_LIBS_USER }} + key: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1-${{ hashFiles('.github/depends.Rds') }} + restore-keys: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1- + + - name: Install dependencies + run: | + remotes::install_deps(dependencies = TRUE) + install.packages("pkgdown", type = "binary") + shell: Rscript {0} + + - name: Install package + run: R CMD INSTALL . + + - name: Deploy package + run: | + git config --local user.email "actions@github.com" + git config --local user.name "GitHub Actions" + Rscript -e 'pkgdown::deploy_to_branch(new_process = FALSE)' diff --git a/.gitignore b/.gitignore index a609b3a..fb68c74 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ inst/examples inst/doc doc Meta +docs diff --git a/NEWS.md b/NEWS.md index 58cb2e2..cd06ebc 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,4 +1,4 @@ -# leaflegend 0.3.1 +# leaflegend 0.3.2 * fixes error on makeSizeLegend where fillColor is not evaluated if no argument is provided @@ -8,6 +8,9 @@ * adding number formatting to addSizeLegend +* adding group layer support for legends. Use addLayersControl to turn on/off +legends + # leaflegend 0.3.0 * stroke outlines of shapes are now padded so that the stroke is not cut off diff --git a/_pkgdown.yml b/_pkgdown.yml new file mode 100644 index 0000000..0b30780 --- /dev/null +++ b/_pkgdown.yml @@ -0,0 +1,6 @@ +authors: + Thomas Roh: + href: https://roh.engineering/about +template: + params: + bootswatch: readable From e39c9c61f6c14dabdca107f702247419dae943e5 Mon Sep 17 00:00:00 2001 From: troh Date: Fri, 16 Jul 2021 07:03:22 -0700 Subject: [PATCH 02/12] updating readme --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a792210..7f4fe4d 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,9 @@ [![CRAN status](https://www.r-pkg.org/badges/version/leaflegend)](https://CRAN.R-project.org/package=leaflegend) [![R-CMD-check](https://github.com/tomroh/leaflegend/workflows/R-CMD-check/badge.svg)](https://github.com/tomroh/leaflegend/actions) -[![Lifecycle: experimental](https://img.shields.io/badge/lifecycle-experimental-orange.svg)](https://lifecycle.r-lib.org/articles/stages.html#experimental-1) +[![Lifecycle: stable](https://img.shields.io/badge/lifecycle-stable-brightgreen.svg)](https://lifecycle.r-lib.org/articles/stages.html#stable) +[![](http://cranlogs.r-pkg.org/badges/grand-total/leaflegend?color=green)](https://cran.r-project.org/package=leaflegend) +[![License: MIT License](https://img.shields.io/badge/license-MIT License-blue.svg)](https://cran.r-project.org/web/licenses/MIT License) From 647d37e39f440be2dd03e6ae0ea0ef4ec01732e8 Mon Sep 17 00:00:00 2001 From: troh Date: Fri, 16 Jul 2021 07:05:10 -0700 Subject: [PATCH 03/12] updating docs --- DESCRIPTION | 2 +- README.md | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 6f1d4e7..624ceb9 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: leaflegend Type: Package Title: Add Custom Legends to 'leaflet' Maps -Version: 0.3.0 +Version: 0.4.0 Authors@R: c( person("Thomas", "Roh", email = "thomas@roh.engineering", role = c("aut", "cre")), person("Ricardo Rodrigo", "Basa", email = "radbasa@gmail.com", role = c("ctb"))) diff --git a/README.md b/README.md index 7f4fe4d..e4f5078 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,6 @@ [![R-CMD-check](https://github.com/tomroh/leaflegend/workflows/R-CMD-check/badge.svg)](https://github.com/tomroh/leaflegend/actions) [![Lifecycle: stable](https://img.shields.io/badge/lifecycle-stable-brightgreen.svg)](https://lifecycle.r-lib.org/articles/stages.html#stable) [![](http://cranlogs.r-pkg.org/badges/grand-total/leaflegend?color=green)](https://cran.r-project.org/package=leaflegend) -[![License: MIT License](https://img.shields.io/badge/license-MIT License-blue.svg)](https://cran.r-project.org/web/licenses/MIT License) From 7abb0d552a8d27d09c4d2055885191dfa1c65ae9 Mon Sep 17 00:00:00 2001 From: troh Date: Fri, 16 Jul 2021 07:23:42 -0700 Subject: [PATCH 04/12] updating docs again --- .github/workflows/pkgdown.yaml | 49 --- .gitignore | 1 - docs/404.html | 148 +++++++++ docs/LICENSE-text.html | 150 +++++++++ docs/LICENSE.html | 154 ++++++++++ docs/authors.html | 151 +++++++++ docs/bootstrap-toc.css | 60 ++++ docs/bootstrap-toc.js | 159 ++++++++++ docs/docsearch.css | 148 +++++++++ docs/docsearch.js | 85 ++++++ docs/index.html | 182 +++++++++++ docs/link.svg | 12 + docs/news/index.html | 190 ++++++++++++ docs/pkgdown.css | 367 ++++++++++++++++++++++ docs/pkgdown.js | 108 +++++++ docs/pkgdown.yml | 9 + docs/reference/Rplot001.png | Bin 0 -> 1011 bytes docs/reference/addLeafLegends.html | 470 +++++++++++++++++++++++++++++ docs/reference/addLegendImage.html | 255 ++++++++++++++++ docs/reference/addLegendSize.html | 356 ++++++++++++++++++++++ docs/reference/index.html | 191 ++++++++++++ docs/reference/makeSymbol.html | 219 ++++++++++++++ docs/sitemap.xml | 18 ++ 23 files changed, 3432 insertions(+), 50 deletions(-) delete mode 100644 .github/workflows/pkgdown.yaml create mode 100644 docs/404.html create mode 100644 docs/LICENSE-text.html create mode 100644 docs/LICENSE.html create mode 100644 docs/authors.html create mode 100644 docs/bootstrap-toc.css create mode 100644 docs/bootstrap-toc.js create mode 100644 docs/docsearch.css create mode 100644 docs/docsearch.js create mode 100644 docs/index.html create mode 100644 docs/link.svg create mode 100644 docs/news/index.html create mode 100644 docs/pkgdown.css create mode 100644 docs/pkgdown.js create mode 100644 docs/pkgdown.yml create mode 100644 docs/reference/Rplot001.png create mode 100644 docs/reference/addLeafLegends.html create mode 100644 docs/reference/addLegendImage.html create mode 100644 docs/reference/addLegendSize.html create mode 100644 docs/reference/index.html create mode 100644 docs/reference/makeSymbol.html create mode 100644 docs/sitemap.xml diff --git a/.github/workflows/pkgdown.yaml b/.github/workflows/pkgdown.yaml deleted file mode 100644 index 56b9a89..0000000 --- a/.github/workflows/pkgdown.yaml +++ /dev/null @@ -1,49 +0,0 @@ -on: - push: - branches: - - main - tags: - -'*' - -name: pkgdown - -jobs: - pkgdown: - runs-on: macOS-latest - env: - GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} - steps: - - uses: actions/checkout@v2 - - - uses: r-lib/actions/setup-r@v1 - - - uses: r-lib/actions/setup-pandoc@v1 - - - name: Query dependencies - run: | - install.packages('remotes') - saveRDS(remotes::dev_package_deps(dependencies = TRUE), ".github/depends.Rds", version = 2) - writeLines(sprintf("R-%i.%i", getRversion()$major, getRversion()$minor), ".github/R-version") - shell: Rscript {0} - - - name: Restore R package cache - uses: actions/cache@v2 - with: - path: ${{ env.R_LIBS_USER }} - key: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1-${{ hashFiles('.github/depends.Rds') }} - restore-keys: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1- - - - name: Install dependencies - run: | - remotes::install_deps(dependencies = TRUE) - install.packages("pkgdown", type = "binary") - shell: Rscript {0} - - - name: Install package - run: R CMD INSTALL . - - - name: Deploy package - run: | - git config --local user.email "actions@github.com" - git config --local user.name "GitHub Actions" - Rscript -e 'pkgdown::deploy_to_branch(new_process = FALSE)' diff --git a/.gitignore b/.gitignore index fb68c74..a609b3a 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,3 @@ inst/examples inst/doc doc Meta -docs diff --git a/docs/404.html b/docs/404.html new file mode 100644 index 0000000..1cde69d --- /dev/null +++ b/docs/404.html @@ -0,0 +1,148 @@ + + + + + + + + +Page not found (404) • leaflegend + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+ +
+
+ + +Content not found. Please use links in the navbar. + +
+ + + +
+ + + + +
+ + + + + + + + diff --git a/docs/LICENSE-text.html b/docs/LICENSE-text.html new file mode 100644 index 0000000..8b30a4c --- /dev/null +++ b/docs/LICENSE-text.html @@ -0,0 +1,150 @@ + + + + + + + + +License • leaflegend + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+ +
+
+ + +
YEAR: 2021
+COPYRIGHT HOLDER: Thomas P. Roh
+
+ +
+ + + +
+ + + + +
+ + + + + + + + diff --git a/docs/LICENSE.html b/docs/LICENSE.html new file mode 100644 index 0000000..4adab43 --- /dev/null +++ b/docs/LICENSE.html @@ -0,0 +1,154 @@ + + + + + + + + +MIT License • leaflegend + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+ +
+
+ + +
+ +

Copyright (c) 2021 Thomas P. Roh

+

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

+

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

+

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+
+ +
+ + + +
+ + + + +
+ + + + + + + + diff --git a/docs/authors.html b/docs/authors.html new file mode 100644 index 0000000..f098128 --- /dev/null +++ b/docs/authors.html @@ -0,0 +1,151 @@ + + + + + + + + +Authors • leaflegend + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+ +
+
+ + +
    +
  • +

    Thomas Roh. Author, maintainer. +

    +
  • +
  • +

    Ricardo Rodrigo Basa. Contributor. +

    +
  • +
+ +
+ +
+ + + + +
+ + + + + + + + diff --git a/docs/bootstrap-toc.css b/docs/bootstrap-toc.css new file mode 100644 index 0000000..5a85941 --- /dev/null +++ b/docs/bootstrap-toc.css @@ -0,0 +1,60 @@ +/*! + * Bootstrap Table of Contents v0.4.1 (http://afeld.github.io/bootstrap-toc/) + * Copyright 2015 Aidan Feldman + * Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */ + +/* modified from https://github.com/twbs/bootstrap/blob/94b4076dd2efba9af71f0b18d4ee4b163aa9e0dd/docs/assets/css/src/docs.css#L548-L601 */ + +/* All levels of nav */ +nav[data-toggle='toc'] .nav > li > a { + display: block; + padding: 4px 20px; + font-size: 13px; + font-weight: 500; + color: #767676; +} +nav[data-toggle='toc'] .nav > li > a:hover, +nav[data-toggle='toc'] .nav > li > a:focus { + padding-left: 19px; + color: #563d7c; + text-decoration: none; + background-color: transparent; + border-left: 1px solid #563d7c; +} +nav[data-toggle='toc'] .nav > .active > a, +nav[data-toggle='toc'] .nav > .active:hover > a, +nav[data-toggle='toc'] .nav > .active:focus > a { + padding-left: 18px; + font-weight: bold; + color: #563d7c; + background-color: transparent; + border-left: 2px solid #563d7c; +} + +/* Nav: second level (shown on .active) */ +nav[data-toggle='toc'] .nav .nav { + display: none; /* Hide by default, but at >768px, show it */ + padding-bottom: 10px; +} +nav[data-toggle='toc'] .nav .nav > li > a { + padding-top: 1px; + padding-bottom: 1px; + padding-left: 30px; + font-size: 12px; + font-weight: normal; +} +nav[data-toggle='toc'] .nav .nav > li > a:hover, +nav[data-toggle='toc'] .nav .nav > li > a:focus { + padding-left: 29px; +} +nav[data-toggle='toc'] .nav .nav > .active > a, +nav[data-toggle='toc'] .nav .nav > .active:hover > a, +nav[data-toggle='toc'] .nav .nav > .active:focus > a { + padding-left: 28px; + font-weight: 500; +} + +/* from https://github.com/twbs/bootstrap/blob/e38f066d8c203c3e032da0ff23cd2d6098ee2dd6/docs/assets/css/src/docs.css#L631-L634 */ +nav[data-toggle='toc'] .nav > .active > ul { + display: block; +} diff --git a/docs/bootstrap-toc.js b/docs/bootstrap-toc.js new file mode 100644 index 0000000..1cdd573 --- /dev/null +++ b/docs/bootstrap-toc.js @@ -0,0 +1,159 @@ +/*! + * Bootstrap Table of Contents v0.4.1 (http://afeld.github.io/bootstrap-toc/) + * Copyright 2015 Aidan Feldman + * Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */ +(function() { + 'use strict'; + + window.Toc = { + helpers: { + // return all matching elements in the set, or their descendants + findOrFilter: function($el, selector) { + // http://danielnouri.org/notes/2011/03/14/a-jquery-find-that-also-finds-the-root-element/ + // http://stackoverflow.com/a/12731439/358804 + var $descendants = $el.find(selector); + return $el.filter(selector).add($descendants).filter(':not([data-toc-skip])'); + }, + + generateUniqueIdBase: function(el) { + var text = $(el).text(); + var anchor = text.trim().toLowerCase().replace(/[^A-Za-z0-9]+/g, '-'); + return anchor || el.tagName.toLowerCase(); + }, + + generateUniqueId: function(el) { + var anchorBase = this.generateUniqueIdBase(el); + for (var i = 0; ; i++) { + var anchor = anchorBase; + if (i > 0) { + // add suffix + anchor += '-' + i; + } + // check if ID already exists + if (!document.getElementById(anchor)) { + return anchor; + } + } + }, + + generateAnchor: function(el) { + if (el.id) { + return el.id; + } else { + var anchor = this.generateUniqueId(el); + el.id = anchor; + return anchor; + } + }, + + createNavList: function() { + return $(''); + }, + + createChildNavList: function($parent) { + var $childList = this.createNavList(); + $parent.append($childList); + return $childList; + }, + + generateNavEl: function(anchor, text) { + var $a = $(''); + $a.attr('href', '#' + anchor); + $a.text(text); + var $li = $('
  • '); + $li.append($a); + return $li; + }, + + generateNavItem: function(headingEl) { + var anchor = this.generateAnchor(headingEl); + var $heading = $(headingEl); + var text = $heading.data('toc-text') || $heading.text(); + return this.generateNavEl(anchor, text); + }, + + // Find the first heading level (`

    `, then `

    `, etc.) that has more than one element. Defaults to 1 (for `

    `). + getTopLevel: function($scope) { + for (var i = 1; i <= 6; i++) { + var $headings = this.findOrFilter($scope, 'h' + i); + if ($headings.length > 1) { + return i; + } + } + + return 1; + }, + + // returns the elements for the top level, and the next below it + getHeadings: function($scope, topLevel) { + var topSelector = 'h' + topLevel; + + var secondaryLevel = topLevel + 1; + var secondarySelector = 'h' + secondaryLevel; + + return this.findOrFilter($scope, topSelector + ',' + secondarySelector); + }, + + getNavLevel: function(el) { + return parseInt(el.tagName.charAt(1), 10); + }, + + populateNav: function($topContext, topLevel, $headings) { + var $context = $topContext; + var $prevNav; + + var helpers = this; + $headings.each(function(i, el) { + var $newNav = helpers.generateNavItem(el); + var navLevel = helpers.getNavLevel(el); + + // determine the proper $context + if (navLevel === topLevel) { + // use top level + $context = $topContext; + } else if ($prevNav && $context === $topContext) { + // create a new level of the tree and switch to it + $context = helpers.createChildNavList($prevNav); + } // else use the current $context + + $context.append($newNav); + + $prevNav = $newNav; + }); + }, + + parseOps: function(arg) { + var opts; + if (arg.jquery) { + opts = { + $nav: arg + }; + } else { + opts = arg; + } + opts.$scope = opts.$scope || $(document.body); + return opts; + } + }, + + // accepts a jQuery object, or an options object + init: function(opts) { + opts = this.helpers.parseOps(opts); + + // ensure that the data attribute is in place for styling + opts.$nav.attr('data-toggle', 'toc'); + + var $topContext = this.helpers.createChildNavList(opts.$nav); + var topLevel = this.helpers.getTopLevel(opts.$scope); + var $headings = this.helpers.getHeadings(opts.$scope, topLevel); + this.helpers.populateNav($topContext, topLevel, $headings); + } + }; + + $(function() { + $('nav[data-toggle="toc"]').each(function(i, el) { + var $nav = $(el); + Toc.init($nav); + }); + }); +})(); diff --git a/docs/docsearch.css b/docs/docsearch.css new file mode 100644 index 0000000..e5f1fe1 --- /dev/null +++ b/docs/docsearch.css @@ -0,0 +1,148 @@ +/* Docsearch -------------------------------------------------------------- */ +/* + Source: https://github.com/algolia/docsearch/ + License: MIT +*/ + +.algolia-autocomplete { + display: block; + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1 +} + +.algolia-autocomplete .ds-dropdown-menu { + width: 100%; + min-width: none; + max-width: none; + padding: .75rem 0; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, .1); + box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .175); +} + +@media (min-width:768px) { + .algolia-autocomplete .ds-dropdown-menu { + width: 175% + } +} + +.algolia-autocomplete .ds-dropdown-menu::before { + display: none +} + +.algolia-autocomplete .ds-dropdown-menu [class^=ds-dataset-] { + padding: 0; + background-color: rgb(255,255,255); + border: 0; + max-height: 80vh; +} + +.algolia-autocomplete .ds-dropdown-menu .ds-suggestions { + margin-top: 0 +} + +.algolia-autocomplete .algolia-docsearch-suggestion { + padding: 0; + overflow: visible +} + +.algolia-autocomplete .algolia-docsearch-suggestion--category-header { + padding: .125rem 1rem; + margin-top: 0; + font-size: 1.3em; + font-weight: 500; + color: #00008B; + border-bottom: 0 +} + +.algolia-autocomplete .algolia-docsearch-suggestion--wrapper { + float: none; + padding-top: 0 +} + +.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column { + float: none; + width: auto; + padding: 0; + text-align: left +} + +.algolia-autocomplete .algolia-docsearch-suggestion--content { + float: none; + width: auto; + padding: 0 +} + +.algolia-autocomplete .algolia-docsearch-suggestion--content::before { + display: none +} + +.algolia-autocomplete .ds-suggestion:not(:first-child) .algolia-docsearch-suggestion--category-header { + padding-top: .75rem; + margin-top: .75rem; + border-top: 1px solid rgba(0, 0, 0, .1) +} + +.algolia-autocomplete .ds-suggestion .algolia-docsearch-suggestion--subcategory-column { + display: block; + padding: .1rem 1rem; + margin-bottom: 0.1; + font-size: 1.0em; + font-weight: 400 + /* display: none */ +} + +.algolia-autocomplete .algolia-docsearch-suggestion--title { + display: block; + padding: .25rem 1rem; + margin-bottom: 0; + font-size: 0.9em; + font-weight: 400 +} + +.algolia-autocomplete .algolia-docsearch-suggestion--text { + padding: 0 1rem .5rem; + margin-top: -.25rem; + font-size: 0.8em; + font-weight: 400; + line-height: 1.25 +} + +.algolia-autocomplete .algolia-docsearch-footer { + width: 110px; + height: 20px; + z-index: 3; + margin-top: 10.66667px; + float: right; + font-size: 0; + line-height: 0; +} + +.algolia-autocomplete .algolia-docsearch-footer--logo { + background-image: url("data:image/svg+xml;utf8,"); + background-repeat: no-repeat; + background-position: 50%; + background-size: 100%; + overflow: hidden; + text-indent: -9000px; + width: 100%; + height: 100%; + display: block; + transform: translate(-8px); +} + +.algolia-autocomplete .algolia-docsearch-suggestion--highlight { + color: #FF8C00; + background: rgba(232, 189, 54, 0.1) +} + + +.algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight { + box-shadow: inset 0 -2px 0 0 rgba(105, 105, 105, .5) +} + +.algolia-autocomplete .ds-suggestion.ds-cursor .algolia-docsearch-suggestion--content { + background-color: rgba(192, 192, 192, .15) +} diff --git a/docs/docsearch.js b/docs/docsearch.js new file mode 100644 index 0000000..b35504c --- /dev/null +++ b/docs/docsearch.js @@ -0,0 +1,85 @@ +$(function() { + + // register a handler to move the focus to the search bar + // upon pressing shift + "/" (i.e. "?") + $(document).on('keydown', function(e) { + if (e.shiftKey && e.keyCode == 191) { + e.preventDefault(); + $("#search-input").focus(); + } + }); + + $(document).ready(function() { + // do keyword highlighting + /* modified from https://jsfiddle.net/julmot/bL6bb5oo/ */ + var mark = function() { + + var referrer = document.URL ; + var paramKey = "q" ; + + if (referrer.indexOf("?") !== -1) { + var qs = referrer.substr(referrer.indexOf('?') + 1); + var qs_noanchor = qs.split('#')[0]; + var qsa = qs_noanchor.split('&'); + var keyword = ""; + + for (var i = 0; i < qsa.length; i++) { + var currentParam = qsa[i].split('='); + + if (currentParam.length !== 2) { + continue; + } + + if (currentParam[0] == paramKey) { + keyword = decodeURIComponent(currentParam[1].replace(/\+/g, "%20")); + } + } + + if (keyword !== "") { + $(".contents").unmark({ + done: function() { + $(".contents").mark(keyword); + } + }); + } + } + }; + + mark(); + }); +}); + +/* Search term highlighting ------------------------------*/ + +function matchedWords(hit) { + var words = []; + + var hierarchy = hit._highlightResult.hierarchy; + // loop to fetch from lvl0, lvl1, etc. + for (var idx in hierarchy) { + words = words.concat(hierarchy[idx].matchedWords); + } + + var content = hit._highlightResult.content; + if (content) { + words = words.concat(content.matchedWords); + } + + // return unique words + var words_uniq = [...new Set(words)]; + return words_uniq; +} + +function updateHitURL(hit) { + + var words = matchedWords(hit); + var url = ""; + + if (hit.anchor) { + url = hit.url_without_anchor + '?q=' + escape(words.join(" ")) + '#' + hit.anchor; + } else { + url = hit.url + '?q=' + escape(words.join(" ")); + } + + return url; +} diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..0f5660d --- /dev/null +++ b/docs/index.html @@ -0,0 +1,182 @@ + + + + + + + +Add Custom Legends to leaflet Maps • leaflegend + + + + + + + + + + +
    +
    + + + + +
    +
    + + +
    + +

    This package provides extensions to the leaflet package to customize leaflet legends without adding an outside css file to the output to style legends. The legend extensions allow the user to add images to legends, style the labels of the legend items, change orientation of the legend items, use different symbologies, and style axis ticks. Syntax and style is consistent with the leaflet package.

    +
    +

    +Installation

    +

    You can install the released version of leaflegend from CRAN with:

    +
    +install.packages("leaflegend")
    +

    Install the development version with:

    +
    +devtools::install_github("tomroh/leaflegend")
    +
    +
    +

    +Example

    +

    Use addLegend*() to create easily customizable legends for leaflet.

    +
    +library(leaflegend)
    +library(leaflet)
    +data(quakes)
    +quakes[['group']] <- sample(c('A', 'B', 'C'), nrow(quakes), replace = TRUE)
    +factorPal <- colorFactor('Dark2', quakes$group)
    +leaflet() %>%
    +  addTiles() %>%
    +  addCircleMarkers(
    +    data = quakes,
    +    lat = ~ lat,
    +    lng = ~ long,
    +    color = ~ factorPal(group),
    +    opacity = 1,
    +    fillOpacity = 1
    +  ) %>%
    +  addLegendFactor(
    +    pal = factorPal,
    +    title = htmltools::tags$div('addLegendFactor', style = 'font-size: 24px; color: red;'),
    +    labelStyle = 'font-size: 18px; font-weight: bold;',
    +    orientation = 'horizontal',
    +    values = quakes$group,
    +    position = 'topright',
    +    shape = 'triangle',
    +    width = 30,
    +    height = 30
    +  )
    +
    +
    + +
    + + +
    + + + +
    + + + + + + diff --git a/docs/link.svg b/docs/link.svg new file mode 100644 index 0000000..88ad827 --- /dev/null +++ b/docs/link.svg @@ -0,0 +1,12 @@ + + + + + + diff --git a/docs/news/index.html b/docs/news/index.html new file mode 100644 index 0000000..fae22b1 --- /dev/null +++ b/docs/news/index.html @@ -0,0 +1,190 @@ + + + + + + + + +Changelog • leaflegend + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + +
    + +
    +
    + + +
    +

    +leaflegend 0.3.2 Unreleased +

    +
      +
    • fixes error on makeSizeLegend where fillColor is not evaluated if no argument is provided

    • +
    • adding colorValues as an argument to makeSizeLegend so that symbols can be sized and colored on different vectors of data

    • +
    • fixes warning on addLegendNumeric where the shape default was a vector not a single value

    • +
    • adding number formatting to addSizeLegend

    • +
    • adding group layer support for legends. Use addLayersControl to turn on/off legends

    • +
    +
    +
    +

    +leaflegend 0.3.0 2021-05-21 +

    +
      +
    • stroke outlines of shapes are now padded so that the stroke is not cut off

    • +
    • numeric legends now have appropriate sizing for text

    • +
    • star symbol outline has been fixed

    • +
    • new function makeSizeIcons as a convenience wrapper size scaled symbols

    • +
    +
    +
    +

    +leaflegend 0.2.0 2021-02-23 +

    +
      +
    • new functions addLegendSize, sizeNumeric, and sizeBreaks were added to allow encoding size on symbols.

    • +
    • addLegendImage supports multiple height and width paramaters for images where you want different sizes

    • +
    • addLegendImage now supports using an svg URI from the output of makeSymbol. To supply a custom svg URI, add the ‘svgURI’ class to the character vector.

    • +
    • added more shapes to makeSymbol, addLegendNumeric, addLegendQuantile, addLegendFactor, addLegendBin

    • +
    • Control the opacity of the legend shapes for addLegendNumeric, addLegendQuantile, addLegendFactor, addLegendBin

    • +
    • makeSymbol now returns embeddable svg

    • +
    +
    +
    +

    +leaflegend 0.1.0 2021-01-25 +

    +
      +
    • Added a NEWS.md file to track changes to the package.
    • +
    +
    +
    + + + +
    + + + +
    + + + + + + + + diff --git a/docs/pkgdown.css b/docs/pkgdown.css new file mode 100644 index 0000000..1273238 --- /dev/null +++ b/docs/pkgdown.css @@ -0,0 +1,367 @@ +/* Sticky footer */ + +/** + * Basic idea: https://philipwalton.github.io/solved-by-flexbox/demos/sticky-footer/ + * Details: https://github.com/philipwalton/solved-by-flexbox/blob/master/assets/css/components/site.css + * + * .Site -> body > .container + * .Site-content -> body > .container .row + * .footer -> footer + * + * Key idea seems to be to ensure that .container and __all its parents__ + * have height set to 100% + * + */ + +html, body { + height: 100%; +} + +body { + position: relative; +} + +body > .container { + display: flex; + height: 100%; + flex-direction: column; +} + +body > .container .row { + flex: 1 0 auto; +} + +footer { + margin-top: 45px; + padding: 35px 0 36px; + border-top: 1px solid #e5e5e5; + color: #666; + display: flex; + flex-shrink: 0; +} +footer p { + margin-bottom: 0; +} +footer div { + flex: 1; +} +footer .pkgdown { + text-align: right; +} +footer p { + margin-bottom: 0; +} + +img.icon { + float: right; +} + +img { + max-width: 100%; +} + +/* Fix bug in bootstrap (only seen in firefox) */ +summary { + display: list-item; +} + +/* Typographic tweaking ---------------------------------*/ + +.contents .page-header { + margin-top: calc(-60px + 1em); +} + +dd { + margin-left: 3em; +} + +/* Section anchors ---------------------------------*/ + +a.anchor { + margin-left: -30px; + display:inline-block; + width: 30px; + height: 30px; + visibility: hidden; + + background-image: url(./link.svg); + background-repeat: no-repeat; + background-size: 20px 20px; + background-position: center center; +} + +.hasAnchor:hover a.anchor { + visibility: visible; +} + +@media (max-width: 767px) { + .hasAnchor:hover a.anchor { + visibility: hidden; + } +} + + +/* Fixes for fixed navbar --------------------------*/ + +.contents h1, .contents h2, .contents h3, .contents h4 { + padding-top: 60px; + margin-top: -40px; +} + +/* Navbar submenu --------------------------*/ + +.dropdown-submenu { + position: relative; +} + +.dropdown-submenu>.dropdown-menu { + top: 0; + left: 100%; + margin-top: -6px; + margin-left: -1px; + border-radius: 0 6px 6px 6px; +} + +.dropdown-submenu:hover>.dropdown-menu { + display: block; +} + +.dropdown-submenu>a:after { + display: block; + content: " "; + float: right; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; + border-width: 5px 0 5px 5px; + border-left-color: #cccccc; + margin-top: 5px; + margin-right: -10px; +} + +.dropdown-submenu:hover>a:after { + border-left-color: #ffffff; +} + +.dropdown-submenu.pull-left { + float: none; +} + +.dropdown-submenu.pull-left>.dropdown-menu { + left: -100%; + margin-left: 10px; + border-radius: 6px 0 6px 6px; +} + +/* Sidebar --------------------------*/ + +#pkgdown-sidebar { + margin-top: 30px; + position: -webkit-sticky; + position: sticky; + top: 70px; +} + +#pkgdown-sidebar h2 { + font-size: 1.5em; + margin-top: 1em; +} + +#pkgdown-sidebar h2:first-child { + margin-top: 0; +} + +#pkgdown-sidebar .list-unstyled li { + margin-bottom: 0.5em; +} + +/* bootstrap-toc tweaks ------------------------------------------------------*/ + +/* All levels of nav */ + +nav[data-toggle='toc'] .nav > li > a { + padding: 4px 20px 4px 6px; + font-size: 1.5rem; + font-weight: 400; + color: inherit; +} + +nav[data-toggle='toc'] .nav > li > a:hover, +nav[data-toggle='toc'] .nav > li > a:focus { + padding-left: 5px; + color: inherit; + border-left: 1px solid #878787; +} + +nav[data-toggle='toc'] .nav > .active > a, +nav[data-toggle='toc'] .nav > .active:hover > a, +nav[data-toggle='toc'] .nav > .active:focus > a { + padding-left: 5px; + font-size: 1.5rem; + font-weight: 400; + color: inherit; + border-left: 2px solid #878787; +} + +/* Nav: second level (shown on .active) */ + +nav[data-toggle='toc'] .nav .nav { + display: none; /* Hide by default, but at >768px, show it */ + padding-bottom: 10px; +} + +nav[data-toggle='toc'] .nav .nav > li > a { + padding-left: 16px; + font-size: 1.35rem; +} + +nav[data-toggle='toc'] .nav .nav > li > a:hover, +nav[data-toggle='toc'] .nav .nav > li > a:focus { + padding-left: 15px; +} + +nav[data-toggle='toc'] .nav .nav > .active > a, +nav[data-toggle='toc'] .nav .nav > .active:hover > a, +nav[data-toggle='toc'] .nav .nav > .active:focus > a { + padding-left: 15px; + font-weight: 500; + font-size: 1.35rem; +} + +/* orcid ------------------------------------------------------------------- */ + +.orcid { + font-size: 16px; + color: #A6CE39; + /* margins are required by official ORCID trademark and display guidelines */ + margin-left:4px; + margin-right:4px; + vertical-align: middle; +} + +/* Reference index & topics ----------------------------------------------- */ + +.ref-index th {font-weight: normal;} + +.ref-index td {vertical-align: top; min-width: 100px} +.ref-index .icon {width: 40px;} +.ref-index .alias {width: 40%;} +.ref-index-icons .alias {width: calc(40% - 40px);} +.ref-index .title {width: 60%;} + +.ref-arguments th {text-align: right; padding-right: 10px;} +.ref-arguments th, .ref-arguments td {vertical-align: top; min-width: 100px} +.ref-arguments .name {width: 20%;} +.ref-arguments .desc {width: 80%;} + +/* Nice scrolling for wide elements --------------------------------------- */ + +table { + display: block; + overflow: auto; +} + +/* Syntax highlighting ---------------------------------------------------- */ + +pre { + word-wrap: normal; + word-break: normal; + border: 1px solid #eee; +} + +pre, code { + background-color: #f8f8f8; + color: #333; +} + +pre code { + overflow: auto; + word-wrap: normal; + white-space: pre; +} + +pre .img { + margin: 5px 0; +} + +pre .img img { + background-color: #fff; + display: block; + height: auto; +} + +code a, pre a { + color: #375f84; +} + +a.sourceLine:hover { + text-decoration: none; +} + +.fl {color: #1514b5;} +.fu {color: #000000;} /* function */ +.ch,.st {color: #036a07;} /* string */ +.kw {color: #264D66;} /* keyword */ +.co {color: #888888;} /* comment */ + +.message { color: black; font-weight: bolder;} +.error { color: orange; font-weight: bolder;} +.warning { color: #6A0366; font-weight: bolder;} + +/* Clipboard --------------------------*/ + +.hasCopyButton { + position: relative; +} + +.btn-copy-ex { + position: absolute; + right: 0; + top: 0; + visibility: hidden; +} + +.hasCopyButton:hover button.btn-copy-ex { + visibility: visible; +} + +/* headroom.js ------------------------ */ + +.headroom { + will-change: transform; + transition: transform 200ms linear; +} +.headroom--pinned { + transform: translateY(0%); +} +.headroom--unpinned { + transform: translateY(-100%); +} + +/* mark.js ----------------------------*/ + +mark { + background-color: rgba(255, 255, 51, 0.5); + border-bottom: 2px solid rgba(255, 153, 51, 0.3); + padding: 1px; +} + +/* vertical spacing after htmlwidgets */ +.html-widget { + margin-bottom: 10px; +} + +/* fontawesome ------------------------ */ + +.fab { + font-family: "Font Awesome 5 Brands" !important; +} + +/* don't display links in code chunks when printing */ +/* source: https://stackoverflow.com/a/10781533 */ +@media print { + code a:link:after, code a:visited:after { + content: ""; + } +} diff --git a/docs/pkgdown.js b/docs/pkgdown.js new file mode 100644 index 0000000..7e7048f --- /dev/null +++ b/docs/pkgdown.js @@ -0,0 +1,108 @@ +/* http://gregfranko.com/blog/jquery-best-practices/ */ +(function($) { + $(function() { + + $('.navbar-fixed-top').headroom(); + + $('body').css('padding-top', $('.navbar').height() + 10); + $(window).resize(function(){ + $('body').css('padding-top', $('.navbar').height() + 10); + }); + + $('[data-toggle="tooltip"]').tooltip(); + + var cur_path = paths(location.pathname); + var links = $("#navbar ul li a"); + var max_length = -1; + var pos = -1; + for (var i = 0; i < links.length; i++) { + if (links[i].getAttribute("href") === "#") + continue; + // Ignore external links + if (links[i].host !== location.host) + continue; + + var nav_path = paths(links[i].pathname); + + var length = prefix_length(nav_path, cur_path); + if (length > max_length) { + max_length = length; + pos = i; + } + } + + // Add class to parent
  • , and enclosing
  • if in dropdown + if (pos >= 0) { + var menu_anchor = $(links[pos]); + menu_anchor.parent().addClass("active"); + menu_anchor.closest("li.dropdown").addClass("active"); + } + }); + + function paths(pathname) { + var pieces = pathname.split("/"); + pieces.shift(); // always starts with / + + var end = pieces[pieces.length - 1]; + if (end === "index.html" || end === "") + pieces.pop(); + return(pieces); + } + + // Returns -1 if not found + function prefix_length(needle, haystack) { + if (needle.length > haystack.length) + return(-1); + + // Special case for length-0 haystack, since for loop won't run + if (haystack.length === 0) { + return(needle.length === 0 ? 0 : -1); + } + + for (var i = 0; i < haystack.length; i++) { + if (needle[i] != haystack[i]) + return(i); + } + + return(haystack.length); + } + + /* Clipboard --------------------------*/ + + function changeTooltipMessage(element, msg) { + var tooltipOriginalTitle=element.getAttribute('data-original-title'); + element.setAttribute('data-original-title', msg); + $(element).tooltip('show'); + element.setAttribute('data-original-title', tooltipOriginalTitle); + } + + if(ClipboardJS.isSupported()) { + $(document).ready(function() { + var copyButton = ""; + + $(".examples, div.sourceCode").addClass("hasCopyButton"); + + // Insert copy buttons: + $(copyButton).prependTo(".hasCopyButton"); + + // Initialize tooltips: + $('.btn-copy-ex').tooltip({container: 'body'}); + + // Initialize clipboard: + var clipboardBtnCopies = new ClipboardJS('[data-clipboard-copy]', { + text: function(trigger) { + return trigger.parentNode.textContent; + } + }); + + clipboardBtnCopies.on('success', function(e) { + changeTooltipMessage(e.trigger, 'Copied!'); + e.clearSelection(); + }); + + clipboardBtnCopies.on('error', function() { + changeTooltipMessage(e.trigger,'Press Ctrl+C or Command+C to copy'); + }); + }); + } +})(window.jQuery || window.$) diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml new file mode 100644 index 0000000..86fe7db --- /dev/null +++ b/docs/pkgdown.yml @@ -0,0 +1,9 @@ +pandoc: 2.11.4 +pkgdown: 1.6.1 +pkgdown_sha: ~ +articles: {} +last_built: 2021-07-16T17:33Z +urls: + reference: https://leaflegend.roh.engineering/reference + article: https://leaflegend.roh.engineering/articles + diff --git a/docs/reference/Rplot001.png b/docs/reference/Rplot001.png new file mode 100644 index 0000000000000000000000000000000000000000..17a358060aed2a86950757bbd25c6f92c08c458f GIT binary patch literal 1011 zcmeAS@N?(olHy`uVBq!ia0y~yV0-|=9Be?5+AI5}0x7m6Z+90U4Fo@(ch>_c&H|6f zVg?3oArNM~bhqvg0|WD9PZ!6KiaBo&GBN^{G%5UFpXcEKVvd5*5Eu=C0SJK)8A6*F U7`aXvEC5;V>FVdQ&MBb@00SN#Z2$lO literal 0 HcmV?d00001 diff --git a/docs/reference/addLeafLegends.html b/docs/reference/addLeafLegends.html new file mode 100644 index 0000000..8d1344a --- /dev/null +++ b/docs/reference/addLeafLegends.html @@ -0,0 +1,470 @@ + + + + + + + + +Add Customizable Color Legends to a 'leaflet' map widget — addLeafLegends • leaflegend + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + +
    + +
    +
    + + +
    +

    Functions for more control over the styling of 'leaflet' legends. The 'leaflet' +map is passed through and the output is a 'leaflet' control so that +the legends are integrated with other functionality of the API. Style +the text of the labels, the symbols used, orientation of the legend items, +and sizing of all elements.

    +
    + +
    addLegendNumeric(
    +  map,
    +  pal,
    +  values,
    +  title = NULL,
    +  shape = c("rect", "stadium"),
    +  orientation = c("vertical", "horizontal"),
    +  width = 20,
    +  height = 100,
    +  bins = 7,
    +  numberFormat = function(x) {     prettyNum(x, format = "f", big.mark = ",", digits =
    +    3, scientific = FALSE) },
    +  tickLength = 4,
    +  tickWidth = 1,
    +  decreasing = FALSE,
    +  fillOpacity = 1,
    +  group = NULL,
    +  className = "info legend leaflet-control",
    +  ...
    +)
    +
    +addLegendQuantile(
    +  map,
    +  pal,
    +  values,
    +  title = NULL,
    +  labelStyle = "",
    +  shape = c("rect", "circle", "triangle", "plus", "cross", "diamond", "star",
    +    "stadium"),
    +  orientation = c("vertical", "horizontal"),
    +  width = 24,
    +  height = 24,
    +  numberFormat = function(x) {     prettyNum(x, big.mark = ",", scientific = FALSE,
    +    digits = 1) },
    +  opacity = 1,
    +  fillOpacity = opacity,
    +  group = NULL,
    +  className = "info legend leaflet-control",
    +  ...
    +)
    +
    +addLegendBin(
    +  map,
    +  pal,
    +  values,
    +  title = NULL,
    +  labelStyle = "",
    +  shape = c("rect", "circle", "triangle", "plus", "cross", "diamond", "star",
    +    "stadium"),
    +  orientation = c("vertical", "horizontal"),
    +  width = 24,
    +  height = 24,
    +  opacity = 1,
    +  fillOpacity = opacity,
    +  group = NULL,
    +  className = "info legend leaflet-control",
    +  ...
    +)
    +
    +addLegendFactor(
    +  map,
    +  pal,
    +  values,
    +  title = NULL,
    +  labelStyle = "",
    +  shape = c("rect", "circle", "triangle", "plus", "cross", "diamond", "star",
    +    "stadium"),
    +  orientation = c("vertical", "horizontal"),
    +  width = 24,
    +  height = 24,
    +  opacity = 1,
    +  fillOpacity = opacity,
    +  group = NULL,
    +  className = "info legend leaflet-control",
    +  ...
    +)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    map

    a map widget object created from 'leaflet'

    pal

    the color palette function, generated from colorNumeric

    values

    the values used to generate colors from the palette function

    title

    the legend title, pass in HTML to style

    shape

    shape of the color symbols

    orientation

    stack the legend items vertically or horizontally

    width

    in pixels

    height

    in pixels

    bins

    an approximate number of tick-marks on the color gradient for the colorNumeric palette

    numberFormat

    formatting functions for numbers that are displayed e.g. format, prettyNum

    tickLength

    in pixels

    tickWidth

    in pixels

    decreasing

    order of numbers in the legend

    fillOpacity

    fill opacity of the legend items

    group

    group name of a leaflet layer group

    className

    extra CSS class to append to the control, space separated

    ...

    arguments to pass to addControl

    labelStyle

    character string of style argument for HTML text

    opacity

    opacity of the legend items

    + +

    Value

    + +

    an object from addControl

    + +

    Examples

    +
    library(leaflet) + +data(quakes) + +# Numeric Legend + +numPal <- colorNumeric('viridis', quakes$depth) +leaflet() %>% + addTiles() %>% + addLegendNumeric( + pal = numPal, + values = quakes$depth, + position = 'topright', + title = 'addLegendNumeric (Horizontal)', + orientation = 'horizontal', + shape = 'rect', + decreasing = FALSE, + height = 20, + width = 100 + ) %>% + addLegendNumeric( + pal = numPal, + values = quakes$depth, + position = 'topright', + title = htmltools::tags$div('addLegendNumeric (Decreasing)', + style = 'font-size: 24px; text-align: center; margin-bottom: 5px;'), + orientation = 'vertical', + shape = 'stadium', + decreasing = TRUE, + height = 100, + width = 20 + ) %>% + addLegend(pal = numPal, values = quakes$depth, title = 'addLegend') + +# Quantile Legend +# defaults to adding quantile numeric break points + +quantPal <- colorQuantile('viridis', quakes$mag, n = 5) +leaflet() %>% + addTiles() %>% + addCircleMarkers(data = quakes, + lat = ~lat, + lng = ~long, + color = ~quantPal(mag), + opacity = 1, + fillOpacity = 1 + ) %>% + addLegendQuantile(pal = quantPal, + values = quakes$mag, + position = 'topright', + title = 'addLegendQuantile', + numberFormat = function(x) {prettyNum(x, big.mark = ',', + scientific = FALSE, digits = 2)}, + shape = 'circle') %>% + addLegendQuantile(pal = quantPal, + values = quakes$mag, + position = 'topright', + title = htmltools::tags$div('addLegendQuantile', + htmltools::tags$br(), + '(Omit Numbers)'), + numberFormat = NULL, + shape = 'circle') %>% + addLegend(pal = quantPal, values = quakes$mag, title = 'addLegend') + +# Factor Legend +# Style the title with html tags, several shapes are supported drawn with svg + +quakes[['group']] <- sample(c('A', 'B', 'C'), nrow(quakes), replace = TRUE) +factorPal <- colorFactor('Dark2', quakes$group) +leaflet() %>% + addTiles() %>% + addCircleMarkers( + data = quakes, + lat = ~ lat, + lng = ~ long, + color = ~ factorPal(group), + opacity = 1, + fillOpacity = 1 + ) %>% + addLegendFactor( + pal = factorPal, + title = htmltools::tags$div('addLegendFactor', style = 'font-size: 24px; color: red;'), + values = quakes$group, + position = 'topright', + shape = 'triangle', + width = 50, + height = 50 + ) %>% + addLegend(pal = factorPal, + values = quakes$group, + title = 'addLegend') + +# Bin Legend +# Restyle the text of the labels, change the legend item orientation + +binPal <- colorBin('Set1', quakes$mag) +leaflet() %>% + addTiles() %>% + addCircleMarkers( + data = quakes, + lat = ~ lat, + lng = ~ long, + color = ~ binPal(mag), + opacity = 1, + fillOpacity = 1 + ) %>% + addLegendBin( + pal = binPal, + values = quakes$mag, + position = 'topright', + title = 'addLegendBin', + labelStyle = 'font-size: 18px; font-weight: bold;', + orientation = 'horizontal' + ) %>% + addLegend(pal = binPal, + values = quakes$mag, + title = 'addLegend') + +# Group Layer Control +# Works with baseGroups and overlayGroups + +leaflet() %>% + addTiles() %>% + addLegendNumeric( + pal = numPal, + values = quakes$depth, + position = 'topright', + title = 'addLegendNumeric', + group = 'Numeric Data' + ) %>% + addLegendQuantile( + pal = quantPal, + values = quakes$mag, + position = 'topright', + title = 'addLegendQuantile', + group = 'Quantile' + ) %>% + addLegendBin( + pal = binPal, + values = quakes$mag, + position = 'bottomleft', + title = 'addLegendBin', + group = 'Bin' + ) %>% + addLayersControl( + baseGroups = c('Numeric Data', 'Quantile'), overlayGroups = c('Bin'), + position = 'bottomright' + ) +
    +
    + +
    + + + +
    + + + + + + + + diff --git a/docs/reference/addLegendImage.html b/docs/reference/addLegendImage.html new file mode 100644 index 0000000..1b3ecff --- /dev/null +++ b/docs/reference/addLegendImage.html @@ -0,0 +1,255 @@ + + + + + + + + +Add a Legend with Images — addLegendImage • leaflegend + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + +
    + +
    +
    + + +
    +

    Creates a legend with images that are embedded into a 'leaflet' map so that +images do not need to be packaged when saving a 'leaflet' map as HTML. Full +control over the label and title style. The 'leaflet' map is passed through +and the output is a control so that legend is fully integrated with other +functionalities.

    +
    + +
    addLegendImage(
    +  map,
    +  images,
    +  labels,
    +  title = "",
    +  labelStyle = "font-size: 24px; vertical-align: middle;",
    +  orientation = c("vertical", "horizontal"),
    +  width = 20,
    +  height = 20,
    +  group = NULL,
    +  className = "info legend leaflet-control",
    +  ...
    +)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    map

    a map widget object created from 'leaflet'

    images

    path to the image file

    labels

    labels for each image

    title

    the legend title, pass in HTML to style

    labelStyle

    character string of style argument for HTML text

    orientation

    stack the legend items vertically or horizontally

    width

    in pixels

    height

    in pixels

    group

    group name of a leaflet layer group

    className

    extra CSS class to append to the control, space separated

    ...

    arguments to pass to addControl

    + +

    Value

    + +

    an object from addControl

    + +

    Examples

    +
    +library(leaflet) +data(quakes) + +quakes1 <- quakes[1:10,] + +leafIcons <- icons( + iconUrl = ifelse(quakes1$mag < 4.6, + "http://leafletjs.com/examples/custom-icons/leaf-green.png", + "http://leafletjs.com/examples/custom-icons/leaf-red.png" + ), + iconWidth = 38, iconHeight = 95, + iconAnchorX = 22, iconAnchorY = 94, + shadowUrl = "http://leafletjs.com/examples/custom-icons/leaf-shadow.png", + shadowWidth = 50, shadowHeight = 64, + shadowAnchorX = 4, shadowAnchorY = 62 +) + +leaflet(data = quakes1) %>% addTiles() %>% + addMarkers(~long, ~lat, icon = leafIcons, group = 'Quake Leaves') %>% + addLegendImage(images = c("http://leafletjs.com/examples/custom-icons/leaf-green.png", + "http://leafletjs.com/examples/custom-icons/leaf-red.png"), + labels = c('Green', 'Red'),width = 38, height = 95, + title = htmltools::tags$div('Leaf', + style = 'font-size: 24px; text-align: center;'), + position = 'topright', + group = 'Quake Leaves') %>% + addLayersControl(overlayGroups = c('Quake Leaves'), position = 'bottomright') +
    +
    + +
    + + + +
    + + + + + + + + diff --git a/docs/reference/addLegendSize.html b/docs/reference/addLegendSize.html new file mode 100644 index 0000000..c7e5185 --- /dev/null +++ b/docs/reference/addLegendSize.html @@ -0,0 +1,356 @@ + + + + + + + + +Add a legend that for the sizing of symbols — addLegendSize • leaflegend + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + +
    + +
    +
    + + +
    +

    Add a legend that for the sizing of symbols

    +
    + +
    addLegendSize(
    +  map,
    +  pal,
    +  values,
    +  title = NULL,
    +  labelStyle = "",
    +  shape = c("rect", "circle", "triangle", "plus", "cross", "diamond", "star",
    +    "stadium"),
    +  orientation = c("vertical", "horizontal"),
    +  color,
    +  fillColor,
    +  strokeWidth = 1,
    +  opacity = 1,
    +  fillOpacity = opacity,
    +  breaks = 5,
    +  baseSize = 10,
    +  numberFormat = function(x) {     prettyNum(x, big.mark = ",", scientific = FALSE,
    +    digits = 1) },
    +  group = NULL,
    +  className = "info legend leaflet-control",
    +  ...
    +)
    +
    +sizeNumeric(values, baseSize)
    +
    +sizeBreaks(values, breaks, baseSize, ...)
    +
    +makeSizeIcons(
    +  values,
    +  shape = c("rect", "circle", "triangle", "plus", "cross", "diamond", "star",
    +    "stadium"),
    +  pal,
    +  color,
    +  colorValues,
    +  fillColor,
    +  opacity,
    +  fillOpacity = opacity,
    +  strokeWidth = 1,
    +  baseSize,
    +  ...
    +)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    map

    a map widget object created from 'leaflet'

    pal

    the color palette function, generated from colorNumeric

    values

    the values used to generate sizes and if colorValues is not specified and +pal is given, then the values are used to generate colors from the palette +function

    title

    the legend title, pass in HTML to style

    labelStyle

    character string of style argument for HTML text

    shape

    shape of the color symbols

    orientation

    stack the legend items vertically or horizontally

    color

    the color of the legend symbols, if omitted pal is used

    fillColor

    fill color of symbol

    strokeWidth

    width of symbol outline

    opacity

    opacity of the legend items

    fillOpacity

    fill opacity of the legend items

    breaks

    an integer specifying the number of breaks or a numeric vector of the breaks

    baseSize

    re-scaling size in pixels of the mean of the values, the average value will +be this exact size

    numberFormat

    formatting functions for numbers that are displayed e.g. format, prettyNum

    group

    group name of a leaflet layer group

    className

    extra CSS class to append to the control, space separated

    ...

    arguments to pass to

    +

    addControl for addLegendSize

    +

    pretty for sizeBreaks

    +

    makeSymbol for makeSizeIcons

    colorValues

    the values used to generate color from the palette function

    + +

    Value

    + +

    an object from addControl

    + +

    Examples

    +
    library(leaflet) +data("quakes") +quakes <- quakes[1:100,] +numPal <- colorNumeric('viridis', quakes$depth) +sizes <- sizeNumeric(quakes$depth, baseSize = 10) +symbols <- Map( + makeSymbol, + shape = 'triangle', + color = numPal(quakes$depth), + width = sizes, + height = sizes +) +leaflet() %>% + addTiles() %>% + addMarkers(data = quakes, + icon = icons(iconUrl = symbols), + lat = ~lat, lng = ~long) %>% + addLegendSize( + values = quakes$depth, + pal = numPal, + title = 'Depth', + labelStyle = 'margin: auto;', + shape = c('triangle'), + orientation = c('vertical', 'horizontal'), + opacity = .7, + breaks = 5) + +# a wrapper for making icons is provided +sizeSymbols <- +makeSizeIcons( + quakes$depth, + shape = 'cross', + pal = numPal, + color = 'black', + strokeWidth = 1, + opacity = .8, + fillOpacity = .5, + baseSize = 20 +) +leaflet() %>% + addTiles() %>% + addMarkers(data = quakes, + icon = sizeSymbols, + lat = ~lat, lng = ~long) %>% + addLegendSize( + values = quakes$depth, + pal = numPal, + title = 'Depth', + shape = 'cross', + orientation = 'horizontal', + strokeWidth = 1, + opacity = .8, + fillOpacity = .5, + color = 'black', + baseSize = 20, + breaks = 5) + +# Group layers control +leaflet() %>% + addTiles() %>% + addLegendSize( + values = quakes$depth, + pal = numPal, + title = 'Depth', + labelStyle = 'margin: auto;', + shape = c('triangle'), + orientation = c('vertical', 'horizontal'), + opacity = .7, + breaks = 5, + group = 'Depth') %>% + addLayersControl(overlayGroups = c('Depth')) +
    +
    + +
    + + + +
    + + + + + + + + diff --git a/docs/reference/index.html b/docs/reference/index.html new file mode 100644 index 0000000..0b10af2 --- /dev/null +++ b/docs/reference/index.html @@ -0,0 +1,191 @@ + + + + + + + + +Function reference • leaflegend + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    All functions

    +

    +
    +

    addLegendNumeric() addLegendQuantile() addLegendBin() addLegendFactor()

    +

    Add Customizable Color Legends to a 'leaflet' map widget

    +

    addLegendImage()

    +

    Add a Legend with Images

    +

    addLegendSize() sizeNumeric() sizeBreaks() makeSizeIcons()

    +

    Add a legend that for the sizing of symbols

    +

    makeSymbol() makeSymbolIcons()

    +

    Create an SVG tag for the symbol

    +
    + + +
    + + + +
    + + + + + + + + diff --git a/docs/reference/makeSymbol.html b/docs/reference/makeSymbol.html new file mode 100644 index 0000000..17c9d0b --- /dev/null +++ b/docs/reference/makeSymbol.html @@ -0,0 +1,219 @@ + + + + + + + + +Create an SVG tag for the symbol — makeSymbol • leaflegend + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + +
    + +
    +
    + + +
    +

    Create an SVG tag for the symbol

    +
    + +
    makeSymbol(
    +  shape,
    +  width,
    +  height = width,
    +  color,
    +  fillColor = color,
    +  opacity = 1,
    +  fillOpacity = opacity,
    +  ...
    +)
    +
    +makeSymbolIcons(
    +  shape = c("rect", "circle", "triangle", "plus", "cross", "diamond", "star",
    +    "stadium"),
    +  color,
    +  fillColor = color,
    +  opacity,
    +  fillOpacity = opacity,
    +  strokeWidth = 1,
    +  width,
    +  height = width,
    +  ...
    +)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    shape

    the desired shape of the symbol

    width

    in pixels

    height

    in pixels

    color

    color of the symbol

    fillColor

    fill color of symbol

    opacity

    opacity of color

    fillOpacity

    opacity of fillColor

    ...

    arguments to be passed to svg shape tag

    strokeWidth

    width in pixels of symbol outline

    + +

    Value

    + +

    HTML svg element

    + +
    + +
    + + + +
    + + + + + + + + diff --git a/docs/sitemap.xml b/docs/sitemap.xml new file mode 100644 index 0000000..ce1ed32 --- /dev/null +++ b/docs/sitemap.xml @@ -0,0 +1,18 @@ + + + + https://leaflegend.roh.engineering/index.html + + + https://leaflegend.roh.engineering/reference/addLeafLegends.html + + + https://leaflegend.roh.engineering/reference/addLegendImage.html + + + https://leaflegend.roh.engineering/reference/addLegendSize.html + + + https://leaflegend.roh.engineering/reference/makeSymbol.html + + From 6a15ae5057896b486e62d7a276ace3597e69a265 Mon Sep 17 00:00:00 2001 From: troh Date: Fri, 16 Jul 2021 07:29:41 -0700 Subject: [PATCH 05/12] fixing http to https --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e4f5078..f8ece99 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![CRAN status](https://www.r-pkg.org/badges/version/leaflegend)](https://CRAN.R-project.org/package=leaflegend) [![R-CMD-check](https://github.com/tomroh/leaflegend/workflows/R-CMD-check/badge.svg)](https://github.com/tomroh/leaflegend/actions) [![Lifecycle: stable](https://img.shields.io/badge/lifecycle-stable-brightgreen.svg)](https://lifecycle.r-lib.org/articles/stages.html#stable) -[![](http://cranlogs.r-pkg.org/badges/grand-total/leaflegend?color=green)](https://cran.r-project.org/package=leaflegend) +[![](https://cranlogs.r-pkg.org/badges/grand-total/leaflegend?color=green)](https://cran.r-project.org/package=leaflegend) From 9b1907822475fdbe66aa134490871a45a5d15c96 Mon Sep 17 00:00:00 2001 From: troh Date: Sun, 18 Jul 2021 05:22:16 -0700 Subject: [PATCH 06/12] adding search to docs --- README.md | 5 +- _pkgdown.yml | 23 +++++--- docs/404.html | 29 +++++++++ docs/LICENSE-text.html | 29 +++++++++ docs/LICENSE.html | 29 +++++++++ docs/authors.html | 29 +++++++++ docs/docsearch.json | 95 ++++++++++++++++++++++++++++++ docs/index.html | 40 +++++++++---- docs/news/index.html | 29 +++++++++ docs/pkgdown.yml | 2 +- docs/reference/addLeafLegends.html | 31 +++++++++- docs/reference/addLegendImage.html | 31 +++++++++- docs/reference/addLegendSize.html | 31 +++++++++- docs/reference/index.html | 29 +++++++++ docs/reference/makeSymbol.html | 29 +++++++++ 15 files changed, 436 insertions(+), 25 deletions(-) create mode 100644 docs/docsearch.json diff --git a/README.md b/README.md index f8ece99..fa34172 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +# leaflegend + [![CRAN status](https://www.r-pkg.org/badges/version/leaflegend)](https://CRAN.R-project.org/package=leaflegend) [![R-CMD-check](https://github.com/tomroh/leaflegend/workflows/R-CMD-check/badge.svg)](https://github.com/tomroh/leaflegend/actions) @@ -5,9 +7,6 @@ [![](https://cranlogs.r-pkg.org/badges/grand-total/leaflegend?color=green)](https://cran.r-project.org/package=leaflegend) - -# leaflegend - This package provides extensions to the leaflet package to customize leaflet legends without adding an outside css file to the output to style legends. The legend extensions allow the user to add images to diff --git a/_pkgdown.yml b/_pkgdown.yml index ddcf993..3788d37 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -1,8 +1,15 @@ -authors: - Thomas Roh: - href: https://roh.engineering/about -template: - params: - bootswatch: readable -url: https://leaflegend.roh.engineering - +url: https://leaflegend.roh.engineering +authors: + Thomas Roh: + href: https://roh.engineering/about +template: + params: + bootswatch: readable + docsearch: + api_key: 89d2953b5dfa27a60dd7d7bec9e087fa + index_name: roh + opengraph: + twitter: + creator: "@rstatengineer" + card: summary_large_image + diff --git a/docs/404.html b/docs/404.html index 1cde69d..9f950ce 100644 --- a/docs/404.html +++ b/docs/404.html @@ -37,6 +37,12 @@ + + + + + + @@ -99,6 +105,12 @@
  • + + @@ -140,6 +152,23 @@

    Contents

    + + + diff --git a/docs/LICENSE-text.html b/docs/LICENSE-text.html index 8b30a4c..1d8a6e1 100644 --- a/docs/LICENSE-text.html +++ b/docs/LICENSE-text.html @@ -37,6 +37,12 @@ + + + + + + @@ -99,6 +105,12 @@ + + @@ -142,6 +154,23 @@

    Contents

    + + + diff --git a/docs/LICENSE.html b/docs/LICENSE.html index 4adab43..9b5ee97 100644 --- a/docs/LICENSE.html +++ b/docs/LICENSE.html @@ -37,6 +37,12 @@ + + + + + + @@ -99,6 +105,12 @@ + + @@ -146,6 +158,23 @@

    Contents

    + + + diff --git a/docs/authors.html b/docs/authors.html index f098128..c16cca3 100644 --- a/docs/authors.html +++ b/docs/authors.html @@ -37,6 +37,12 @@ + + + + + + @@ -99,6 +105,12 @@ + + @@ -143,6 +155,23 @@

    Authors

    + + + diff --git a/docs/docsearch.json b/docs/docsearch.json new file mode 100644 index 0000000..50889f3 --- /dev/null +++ b/docs/docsearch.json @@ -0,0 +1,95 @@ +{ + "index_name": "roh", + "start_urls": [ + { + "url": "https://leaflegend.roh.engineering/index.html", + "selectors_key": "homepage", + "tags": [ + "homepage" + ] + }, + { + "url": "https://leaflegend.roh.engineering/reference", + "selectors_key": "reference", + "tags": [ + "reference" + ] + }, + { + "url": "https://leaflegend.roh.engineering/articles", + "selectors_key": "articles", + "tags": [ + "articles" + ] + } + ], + "stop_urls": [ + "/reference/$", + "/reference/index.html", + "/articles/$", + "/articles/index.html" + ], + "sitemap_urls": [ + "https://leaflegend.roh.engineering/sitemap.xml" + ], + "selectors": { + "homepage": { + "lvl0": { + "selector": ".contents h1", + "default_value": "leaflegend Home page" + }, + "lvl1": { + "selector": ".contents h2" + }, + "lvl2": { + "selector": ".contents h3", + "default_value": "Context" + }, + "lvl3": ".ref-arguments td, .ref-description", + "text": ".contents p, .contents li, .contents .pre" + }, + "reference": { + "lvl0": { + "selector": ".contents h1" + }, + "lvl1": { + "selector": ".contents .name", + "default_value": "Argument" + }, + "lvl2": { + "selector": ".ref-arguments th", + "default_value": "Description" + }, + "lvl3": ".ref-arguments td, .ref-description", + "text": ".contents p, .contents li" + }, + "articles": { + "lvl0": { + "selector": ".contents h1" + }, + "lvl1": { + "selector": ".contents .name" + }, + "lvl2": { + "selector": ".contents h2, .contents h3", + "default_value": "Context" + }, + "text": ".contents p, .contents li" + } + }, + "selectors_exclude": [ + ".dont-index" + ], + "min_indexed_level": 2, + "custom_settings": { + "separatorsToIndex": "_", + "attributesToRetrieve": [ + "hierarchy", + "content", + "anchor", + "url", + "url_without_anchor" + ] + } +} + diff --git a/docs/index.html b/docs/index.html index 0f5660d..3ff5817 100644 --- a/docs/index.html +++ b/docs/index.html @@ -11,7 +11,9 @@ - + + + @@ -60,7 +62,13 @@ - + + + @@ -71,11 +79,11 @@
    - -
    + +

    This package provides extensions to the leaflet package to customize leaflet legends without adding an outside css file to the output to style legends. The legend extensions allow the user to add images to legends, style the labels of the legend items, change orientation of the legend items, use different symbologies, and style axis ticks. Syntax and style is consistent with the leaflet package.

    @@ -92,7 +100,7 @@

    Example

    Use addLegend*() to create easily customizable legends for leaflet.

    -library(leaflegend)
    +library(leaflegend)
     library(leaflet)
     data(quakes)
     quakes[['group']] <- sample(c('A', 'B', 'C'), nrow(quakes), replace = TRUE)
    @@ -120,7 +128,6 @@ 

    )

    -
    @@ -176,7 +183,20 @@

    Dev status

    - - - + + diff --git a/docs/news/index.html b/docs/news/index.html index fae22b1..97f9ff2 100644 --- a/docs/news/index.html +++ b/docs/news/index.html @@ -37,6 +37,12 @@ + + + + + + @@ -99,6 +105,12 @@ + + @@ -182,6 +194,23 @@

    Contents

    + + + diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml index 86fe7db..d62fe5d 100644 --- a/docs/pkgdown.yml +++ b/docs/pkgdown.yml @@ -2,7 +2,7 @@ pandoc: 2.11.4 pkgdown: 1.6.1 pkgdown_sha: ~ articles: {} -last_built: 2021-07-16T17:33Z +last_built: 2021-07-20T18:46Z urls: reference: https://leaflegend.roh.engineering/reference article: https://leaflegend.roh.engineering/articles diff --git a/docs/reference/addLeafLegends.html b/docs/reference/addLeafLegends.html index 8d1344a..9e9e27c 100644 --- a/docs/reference/addLeafLegends.html +++ b/docs/reference/addLeafLegends.html @@ -37,6 +37,12 @@ + + + + + + @@ -104,6 +110,12 @@ + + @@ -439,7 +451,7 @@

    Examp baseGroups = c('Numeric Data', 'Quantile'), overlayGroups = c('Bin'), position = 'bottomright' ) - +
    #> Error in leaflet::addControl(map, html = htmltools::tagList(htmlElements), ...): unused argument (group = "Bin")
    + + + diff --git a/docs/reference/addLegendImage.html b/docs/reference/addLegendImage.html index 1b3ecff..dc168a7 100644 --- a/docs/reference/addLegendImage.html +++ b/docs/reference/addLegendImage.html @@ -37,6 +37,12 @@ + + + + + + @@ -104,6 +110,12 @@ + + @@ -224,7 +236,7 @@

    Examp position = 'topright', group = 'Quake Leaves') %>% addLayersControl(overlayGroups = c('Quake Leaves'), position = 'bottomright') - +
    #> Error in leaflet::addControl(map, html = htmltools::tagList(htmlElements), ...): unused argument (group = "Quake Leaves")
    + + + diff --git a/docs/reference/addLegendSize.html b/docs/reference/addLegendSize.html index c7e5185..e77d82a 100644 --- a/docs/reference/addLegendSize.html +++ b/docs/reference/addLegendSize.html @@ -37,6 +37,12 @@ + + + + + + @@ -100,6 +106,12 @@ + + @@ -325,7 +337,7 @@

    Examp breaks = 5, group = 'Depth') %>% addLayersControl(overlayGroups = c('Depth')) - +
    #> Error in leaflet::addControl(map, html = htmltools::tagList(htmlElements), ...): unused argument (group = "Depth")
    + + + diff --git a/docs/reference/index.html b/docs/reference/index.html index 0b10af2..fd93739 100644 --- a/docs/reference/index.html +++ b/docs/reference/index.html @@ -37,6 +37,12 @@ + + + + + + @@ -99,6 +105,12 @@ + + @@ -183,6 +195,23 @@

    Contents

    + + + diff --git a/docs/reference/makeSymbol.html b/docs/reference/makeSymbol.html index 17c9d0b..83e3c84 100644 --- a/docs/reference/makeSymbol.html +++ b/docs/reference/makeSymbol.html @@ -37,6 +37,12 @@ + + + + + + @@ -100,6 +106,12 @@ + + @@ -211,6 +223,23 @@

    Contents

    + + + From e582544666375e70bf12638349b71f1ed2c683fb Mon Sep 17 00:00:00 2001 From: troh Date: Wed, 21 Jul 2021 17:44:33 -0700 Subject: [PATCH 07/12] adding raster image size example --- NEWS.md | 4 +++- R/legend.R | 20 ++++++++++++++++++++ docs/index.html | 2 +- docs/pkgdown.yml | 2 +- docs/reference/addLeafLegends.html | 2 +- docs/reference/addLegendImage.html | 2 +- docs/reference/addLegendSize.html | 2 +- 7 files changed, 28 insertions(+), 6 deletions(-) diff --git a/NEWS.md b/NEWS.md index cd06ebc..b878ab4 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,4 +1,4 @@ -# leaflegend 0.3.2 +# leaflegend 0.4.0 * fixes error on makeSizeLegend where fillColor is not evaluated if no argument is provided @@ -11,6 +11,8 @@ * adding group layer support for legends. Use addLayersControl to turn on/off legends +* added example for using raster images with size encodings based on data + # leaflegend 0.3.0 * stroke outlines of shapes are now padded so that the stroke is not cut off diff --git a/R/legend.R b/R/legend.R index a5baddf..430320b 100644 --- a/R/legend.R +++ b/R/legend.R @@ -85,6 +85,26 @@ #' position = 'topright', #' group = 'Quake Leaves') %>% #' addLayersControl(overlayGroups = c('Quake Leaves'), position = 'bottomright') +#' +#' # use raster images with size encodings +#' height <- sizeNumeric(quakes$depth, baseSize = 40) +#' width <- height * 38 / 95 +#' symbols <- icons( +#' iconUrl = 'http://leafletjs.com/examples/custom-icons/leaf-green.png', +#' iconWidth = width, +#' iconHeight = height) +#' probs <- c(.2, .4, .6, .8) +#' leaflet(quakes) %>% +#' addTiles() %>% +#' addMarkers(icon = symbols, +#' lat = ~lat, lng = ~long) %>% +#' addLegendImage(images = rep("http://leafletjs.com/examples/custom-icons/leaf-green.png", 4), +#' labels = round(quantile(height, probs = probs), 0), +#' width = quantile(height, probs = probs) * 38 / 95, +#' height = quantile(height, probs = probs), +#' title = htmltools::tags$div('Leaf', +#' style = 'font-size: 24px; text-align: center; margin-bottom: 5px;'), +#' position = 'topright', orientation = 'vertical') addLegendImage <- function(map, images, labels, diff --git a/docs/index.html b/docs/index.html index 3ff5817..43eef12 100644 --- a/docs/index.html +++ b/docs/index.html @@ -100,7 +100,7 @@

    Example

    Use addLegend*() to create easily customizable legends for leaflet.

    -library(leaflegend)
    +library(leaflegend)
     library(leaflet)
     data(quakes)
     quakes[['group']] <- sample(c('A', 'B', 'C'), nrow(quakes), replace = TRUE)
    diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml
    index d62fe5d..8ca357b 100644
    --- a/docs/pkgdown.yml
    +++ b/docs/pkgdown.yml
    @@ -2,7 +2,7 @@ pandoc: 2.11.4
     pkgdown: 1.6.1
     pkgdown_sha: ~
     articles: {}
    -last_built: 2021-07-20T18:46Z
    +last_built: 2021-07-20T18:59Z
     urls:
       reference: https://leaflegend.roh.engineering/reference
       article: https://leaflegend.roh.engineering/articles
    diff --git a/docs/reference/addLeafLegends.html b/docs/reference/addLeafLegends.html
    index 9e9e27c..5d4f75e 100644
    --- a/docs/reference/addLeafLegends.html
    +++ b/docs/reference/addLeafLegends.html
    @@ -451,7 +451,7 @@ 

    Examp baseGroups = c('Numeric Data', 'Quantile'), overlayGroups = c('Bin'), position = 'bottomright' ) -

    #> Error in leaflet::addControl(map, html = htmltools::tagList(htmlElements), ...): unused argument (group = "Bin")
    +
    #> Error in leaflet::addControl(map, html = htmltools::tagList(htmlElements), ...): unused argument (group = "Quake Leaves")
    +
    #> Error in leaflet::addControl(map, html = htmltools::tagList(htmlElements), ...): unused argument (group = "Depth")
    + + + + + - - - - - diff --git a/docs/logo.png b/docs/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..5fc8e8652a3b20870fd5a8e7e2ec8075ed9a8bf1 GIT binary patch literal 34555 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 ma%BK_cXuvnZfkR6VQ^(GZ*pgw?mQX*0000 - - - - - - - -Changelog • leaflegend - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - - -
    -

    -leaflegend 0.3.2 Unreleased -

    -
      -
    • fixes error on makeSizeLegend where fillColor is not evaluated if no argument is provided

    • -
    • adding colorValues as an argument to makeSizeLegend so that symbols can be sized and colored on different vectors of data

    • -
    • fixes warning on addLegendNumeric where the shape default was a vector not a single value

    • -
    • adding number formatting to addSizeLegend

    • -
    • adding group layer support for legends. Use addLayersControl to turn on/off legends

    • - - -
    -
    -
    -

    -leaflegend 0.3.0 2021-05-21 -

    -
      -
    • stroke outlines of shapes are now padded so that the stroke is not cut off

    • -
    • numeric legends now have appropriate sizing for text

    • -
    • star symbol outline has been fixed

    • -
    • new function makeSizeIcons as a convenience wrapper size scaled symbols

    • -
    -
    -
    -

    -leaflegend 0.2.0 2021-02-23 -

    -
      -
    • new functions addLegendSize, sizeNumeric, and sizeBreaks were added to allow encoding size on symbols.

    • -
    • addLegendImage supports multiple height and width paramaters for images where you want different sizes

    • -
    • addLegendImage now supports using an svg URI from the output of makeSymbol. To supply a custom svg URI, add the ‘svgURI’ class to the character vector.

    • -
    • added more shapes to makeSymbol, addLegendNumeric, addLegendQuantile, addLegendFactor, addLegendBin

    • -
    • Control the opacity of the legend shapes for addLegendNumeric, addLegendQuantile, addLegendFactor, addLegendBin

    • -
    • makeSymbol now returns embeddable svg

    • -
    -
    -
    -

    -leaflegend 0.1.0 2021-01-25 -

    -
      -
    • Added a NEWS.md file to track changes to the package.
    • -
    -
    -
    - - - -
    - - - -
    - - - - - - - - - - - - - + + + + + + + + +Changelog • leaflegend + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + +
    + +
    +
    + + +
    +

    +leaflegend 0.4.0 Unreleased +

    +
      +
    • fixes error on makeSizeLegend where fillColor is not evaluated if no argument is provided

    • +
    • adding colorValues as an argument to makeSizeLegend so that symbols can be sized and colored on different vectors of data

    • +
    • fixes warning on addLegendNumeric where the shape default was a vector not a single value

    • +
    • adding number formatting to addSizeLegend

    • +
    • adding group layer support for legends. Use addLayersControl to turn on/off legends

    • +
    • added example for using raster images with size encodings based on data

    • +
    +
    +
    +

    +leaflegend 0.3.0 2021-05-21 +

    +
      +
    • stroke outlines of shapes are now padded so that the stroke is not cut off

    • +
    • numeric legends now have appropriate sizing for text

    • +
    • star symbol outline has been fixed

    • +
    • new function makeSizeIcons as a convenience wrapper size scaled symbols

    • +
    +
    +
    +

    +leaflegend 0.2.0 2021-02-23 +

    +
      +
    • new functions addLegendSize, sizeNumeric, and sizeBreaks were added to allow encoding size on symbols.

    • +
    • addLegendImage supports multiple height and width paramaters for images where you want different sizes

    • +
    • addLegendImage now supports using an svg URI from the output of makeSymbol. To supply a custom svg URI, add the ‘svgURI’ class to the character vector.

    • +
    • added more shapes to makeSymbol, addLegendNumeric, addLegendQuantile, addLegendFactor, addLegendBin

    • +
    • Control the opacity of the legend shapes for addLegendNumeric, addLegendQuantile, addLegendFactor, addLegendBin

    • +
    • makeSymbol now returns embeddable svg

    • +
    +
    +
    +

    +leaflegend 0.1.0 2021-01-25 +

    +
      +
    • Added a NEWS.md file to track changes to the package.
    • +
    +
    +
    + + + +
    + + + +
    + + + + + + + + + + + diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml index 4a7f63d..ca1aa99 100644 --- a/docs/pkgdown.yml +++ b/docs/pkgdown.yml @@ -1,9 +1,9 @@ -pandoc: 2.11.4 -pkgdown: 1.6.1 -pkgdown_sha: ~ -articles: {} -last_built: 2021-07-20T18:59Z -urls: - reference: https://leaflegend.roh.engineering/reference - article: https://leaflegend.roh.engineering/articles - +pandoc: 2.11.4 +pkgdown: 1.6.1 +pkgdown_sha: ~ +articles: {} +last_built: 2021-07-23T01:02Z +urls: + reference: https://leaflegend.roh.engineering/reference + article: https://leaflegend.roh.engineering/articles + diff --git a/docs/reference/addLeafLegends.html b/docs/reference/addLeafLegends.html index 5cb9001..6f5a023 100644 --- a/docs/reference/addLeafLegends.html +++ b/docs/reference/addLeafLegends.html @@ -1,503 +1,507 @@ - - - - - - - - -Add Customizable Color Legends to a 'leaflet' map widget — addLeafLegends • leaflegend - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Functions for more control over the styling of 'leaflet' legends. The 'leaflet' -map is passed through and the output is a 'leaflet' control so that -the legends are integrated with other functionality of the API. Style -the text of the labels, the symbols used, orientation of the legend items, -and sizing of all elements.

    -
    - -
    addLegendNumeric(
    -  map,
    -  pal,
    -  values,
    -  title = NULL,
    -  shape = c("rect", "stadium"),
    -  orientation = c("vertical", "horizontal"),
    -  width = 20,
    -  height = 100,
    -  bins = 7,
    -  numberFormat = function(x) {     prettyNum(x, format = "f", big.mark = ",", digits =
    -    3, scientific = FALSE) },
    -  tickLength = 4,
    -  tickWidth = 1,
    -  decreasing = FALSE,
    -  fillOpacity = 1,
    -  group = NULL,
    -  className = "info legend leaflet-control",
    -  ...
    -)
    -
    -addLegendQuantile(
    -  map,
    -  pal,
    -  values,
    -  title = NULL,
    -  labelStyle = "",
    -  shape = c("rect", "circle", "triangle", "plus", "cross", "diamond", "star",
    -    "stadium"),
    -  orientation = c("vertical", "horizontal"),
    -  width = 24,
    -  height = 24,
    -  numberFormat = function(x) {     prettyNum(x, big.mark = ",", scientific = FALSE,
    -    digits = 1) },
    -  opacity = 1,
    -  fillOpacity = opacity,
    -  group = NULL,
    -  className = "info legend leaflet-control",
    -  ...
    -)
    -
    -addLegendBin(
    -  map,
    -  pal,
    -  values,
    -  title = NULL,
    -  labelStyle = "",
    -  shape = c("rect", "circle", "triangle", "plus", "cross", "diamond", "star",
    -    "stadium"),
    -  orientation = c("vertical", "horizontal"),
    -  width = 24,
    -  height = 24,
    -  opacity = 1,
    -  fillOpacity = opacity,
    -  group = NULL,
    -  className = "info legend leaflet-control",
    -  ...
    -)
    -
    -addLegendFactor(
    -  map,
    -  pal,
    -  values,
    -  title = NULL,
    -  labelStyle = "",
    -  shape = c("rect", "circle", "triangle", "plus", "cross", "diamond", "star",
    -    "stadium"),
    -  orientation = c("vertical", "horizontal"),
    -  width = 24,
    -  height = 24,
    -  opacity = 1,
    -  fillOpacity = opacity,
    -  group = NULL,
    -  className = "info legend leaflet-control",
    -  ...
    -)
    - -

    Arguments

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    map

    a map widget object created from 'leaflet'

    pal

    the color palette function, generated from colorNumeric

    values

    the values used to generate colors from the palette function

    title

    the legend title, pass in HTML to style

    shape

    shape of the color symbols

    orientation

    stack the legend items vertically or horizontally

    width

    in pixels

    height

    in pixels

    bins

    an approximate number of tick-marks on the color gradient for the colorNumeric palette

    numberFormat

    formatting functions for numbers that are displayed e.g. format, prettyNum

    tickLength

    in pixels

    tickWidth

    in pixels

    decreasing

    order of numbers in the legend

    fillOpacity

    fill opacity of the legend items

    group

    group name of a leaflet layer group

    className

    extra CSS class to append to the control, space separated

    ...

    arguments to pass to addControl

    labelStyle

    character string of style argument for HTML text

    opacity

    opacity of the legend items

    - -

    Value

    - -

    an object from addControl

    - -

    Examples

    -
    library(leaflet) - -data(quakes) - -# Numeric Legend - -numPal <- colorNumeric('viridis', quakes$depth) -leaflet() %>% - addTiles() %>% - addLegendNumeric( - pal = numPal, - values = quakes$depth, - position = 'topright', - title = 'addLegendNumeric (Horizontal)', - orientation = 'horizontal', - shape = 'rect', - decreasing = FALSE, - height = 20, - width = 100 - ) %>% - addLegendNumeric( - pal = numPal, - values = quakes$depth, - position = 'topright', - title = htmltools::tags$div('addLegendNumeric (Decreasing)', - style = 'font-size: 24px; text-align: center; margin-bottom: 5px;'), - orientation = 'vertical', - shape = 'stadium', - decreasing = TRUE, - height = 100, - width = 20 - ) %>% - addLegend(pal = numPal, values = quakes$depth, title = 'addLegend') - -# Quantile Legend -# defaults to adding quantile numeric break points - -quantPal <- colorQuantile('viridis', quakes$mag, n = 5) -leaflet() %>% - addTiles() %>% - addCircleMarkers(data = quakes, - lat = ~lat, - lng = ~long, - color = ~quantPal(mag), - opacity = 1, - fillOpacity = 1 - ) %>% - addLegendQuantile(pal = quantPal, - values = quakes$mag, - position = 'topright', - title = 'addLegendQuantile', - numberFormat = function(x) {prettyNum(x, big.mark = ',', - scientific = FALSE, digits = 2)}, - shape = 'circle') %>% - addLegendQuantile(pal = quantPal, - values = quakes$mag, - position = 'topright', - title = htmltools::tags$div('addLegendQuantile', - htmltools::tags$br(), - '(Omit Numbers)'), - numberFormat = NULL, - shape = 'circle') %>% - addLegend(pal = quantPal, values = quakes$mag, title = 'addLegend') - -# Factor Legend -# Style the title with html tags, several shapes are supported drawn with svg - -quakes[['group']] <- sample(c('A', 'B', 'C'), nrow(quakes), replace = TRUE) -factorPal <- colorFactor('Dark2', quakes$group) -leaflet() %>% - addTiles() %>% - addCircleMarkers( - data = quakes, - lat = ~ lat, - lng = ~ long, - color = ~ factorPal(group), - opacity = 1, - fillOpacity = 1 - ) %>% - addLegendFactor( - pal = factorPal, - title = htmltools::tags$div('addLegendFactor', style = 'font-size: 24px; color: red;'), - values = quakes$group, - position = 'topright', - shape = 'triangle', - width = 50, - height = 50 - ) %>% - addLegend(pal = factorPal, - values = quakes$group, - title = 'addLegend') - -# Bin Legend -# Restyle the text of the labels, change the legend item orientation - -binPal <- colorBin('Set1', quakes$mag) -leaflet() %>% - addTiles() %>% - addCircleMarkers( - data = quakes, - lat = ~ lat, - lng = ~ long, - color = ~ binPal(mag), - opacity = 1, - fillOpacity = 1 - ) %>% - addLegendBin( - pal = binPal, - values = quakes$mag, - position = 'topright', - title = 'addLegendBin', - labelStyle = 'font-size: 18px; font-weight: bold;', - orientation = 'horizontal' - ) %>% - addLegend(pal = binPal, - values = quakes$mag, - title = 'addLegend') - -# Group Layer Control -# Works with baseGroups and overlayGroups - -leaflet() %>% - addTiles() %>% - addLegendNumeric( - pal = numPal, - values = quakes$depth, - position = 'topright', - title = 'addLegendNumeric', - group = 'Numeric Data' - ) %>% - addLegendQuantile( - pal = quantPal, - values = quakes$mag, - position = 'topright', - title = 'addLegendQuantile', - group = 'Quantile' - ) %>% - addLegendBin( - pal = binPal, - values = quakes$mag, - position = 'bottomleft', - title = 'addLegendBin', - group = 'Bin' - ) %>% - addLayersControl( - baseGroups = c('Numeric Data', 'Quantile'), overlayGroups = c('Bin'), - position = 'bottomright' - ) - -
    - -
    - -
    - - - -
    - - - - - - - - - - - - + + + + + + + + +Add Customizable Color Legends to a 'leaflet' map widget — addLeafLegends • leaflegend + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + +
    + +
    +
    + + +
    +

    Functions for more control over the styling of 'leaflet' legends. The 'leaflet' +map is passed through and the output is a 'leaflet' control so that +the legends are integrated with other functionality of the API. Style +the text of the labels, the symbols used, orientation of the legend items, +and sizing of all elements.

    +
    + +
    addLegendNumeric(
    +  map,
    +  pal,
    +  values,
    +  title = NULL,
    +  shape = c("rect", "stadium"),
    +  orientation = c("vertical", "horizontal"),
    +  width = 20,
    +  height = 100,
    +  bins = 7,
    +  numberFormat = function(x) {     prettyNum(x, format = "f", big.mark = ",", digits =
    +    3, scientific = FALSE) },
    +  tickLength = 4,
    +  tickWidth = 1,
    +  decreasing = FALSE,
    +  fillOpacity = 1,
    +  group = NULL,
    +  className = "info legend leaflet-control",
    +  ...
    +)
    +
    +addLegendQuantile(
    +  map,
    +  pal,
    +  values,
    +  title = NULL,
    +  labelStyle = "",
    +  shape = c("rect", "circle", "triangle", "plus", "cross", "diamond", "star",
    +    "stadium"),
    +  orientation = c("vertical", "horizontal"),
    +  width = 24,
    +  height = 24,
    +  numberFormat = function(x) {     prettyNum(x, big.mark = ",", scientific = FALSE,
    +    digits = 1) },
    +  opacity = 1,
    +  fillOpacity = opacity,
    +  group = NULL,
    +  className = "info legend leaflet-control",
    +  ...
    +)
    +
    +addLegendBin(
    +  map,
    +  pal,
    +  values,
    +  title = NULL,
    +  labelStyle = "",
    +  shape = c("rect", "circle", "triangle", "plus", "cross", "diamond", "star",
    +    "stadium"),
    +  orientation = c("vertical", "horizontal"),
    +  width = 24,
    +  height = 24,
    +  opacity = 1,
    +  fillOpacity = opacity,
    +  group = NULL,
    +  className = "info legend leaflet-control",
    +  ...
    +)
    +
    +addLegendFactor(
    +  map,
    +  pal,
    +  values,
    +  title = NULL,
    +  labelStyle = "",
    +  shape = c("rect", "circle", "triangle", "plus", "cross", "diamond", "star",
    +    "stadium"),
    +  orientation = c("vertical", "horizontal"),
    +  width = 24,
    +  height = 24,
    +  opacity = 1,
    +  fillOpacity = opacity,
    +  group = NULL,
    +  className = "info legend leaflet-control",
    +  ...
    +)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    map

    a map widget object created from 'leaflet'

    pal

    the color palette function, generated from colorNumeric

    values

    the values used to generate colors from the palette function

    title

    the legend title, pass in HTML to style

    shape

    shape of the color symbols

    orientation

    stack the legend items vertically or horizontally

    width

    in pixels

    height

    in pixels

    bins

    an approximate number of tick-marks on the color gradient for the colorNumeric palette

    numberFormat

    formatting functions for numbers that are displayed e.g. format, prettyNum

    tickLength

    in pixels

    tickWidth

    in pixels

    decreasing

    order of numbers in the legend

    fillOpacity

    fill opacity of the legend items

    group

    group name of a leaflet layer group

    className

    extra CSS class to append to the control, space separated

    ...

    arguments to pass to addControl

    labelStyle

    character string of style argument for HTML text

    opacity

    opacity of the legend items

    + +

    Value

    + +

    an object from addControl

    + +

    Examples

    +
    library(leaflet) + +data(quakes) + +# Numeric Legend + +numPal <- colorNumeric('viridis', quakes$depth) +leaflet() %>% + addTiles() %>% + addLegendNumeric( + pal = numPal, + values = quakes$depth, + position = 'topright', + title = 'addLegendNumeric (Horizontal)', + orientation = 'horizontal', + shape = 'rect', + decreasing = FALSE, + height = 20, + width = 100 + ) %>% + addLegendNumeric( + pal = numPal, + values = quakes$depth, + position = 'topright', + title = htmltools::tags$div('addLegendNumeric (Decreasing)', + style = 'font-size: 24px; text-align: center; margin-bottom: 5px;'), + orientation = 'vertical', + shape = 'stadium', + decreasing = TRUE, + height = 100, + width = 20 + ) %>% + addLegend(pal = numPal, values = quakes$depth, title = 'addLegend') + +# Quantile Legend +# defaults to adding quantile numeric break points + +quantPal <- colorQuantile('viridis', quakes$mag, n = 5) +leaflet() %>% + addTiles() %>% + addCircleMarkers(data = quakes, + lat = ~lat, + lng = ~long, + color = ~quantPal(mag), + opacity = 1, + fillOpacity = 1 + ) %>% + addLegendQuantile(pal = quantPal, + values = quakes$mag, + position = 'topright', + title = 'addLegendQuantile', + numberFormat = function(x) {prettyNum(x, big.mark = ',', + scientific = FALSE, digits = 2)}, + shape = 'circle') %>% + addLegendQuantile(pal = quantPal, + values = quakes$mag, + position = 'topright', + title = htmltools::tags$div('addLegendQuantile', + htmltools::tags$br(), + '(Omit Numbers)'), + numberFormat = NULL, + shape = 'circle') %>% + addLegend(pal = quantPal, values = quakes$mag, title = 'addLegend') + +# Factor Legend +# Style the title with html tags, several shapes are supported drawn with svg + +quakes[['group']] <- sample(c('A', 'B', 'C'), nrow(quakes), replace = TRUE) +factorPal <- colorFactor('Dark2', quakes$group) +leaflet() %>% + addTiles() %>% + addCircleMarkers( + data = quakes, + lat = ~ lat, + lng = ~ long, + color = ~ factorPal(group), + opacity = 1, + fillOpacity = 1 + ) %>% + addLegendFactor( + pal = factorPal, + title = htmltools::tags$div('addLegendFactor', style = 'font-size: 24px; color: red;'), + values = quakes$group, + position = 'topright', + shape = 'triangle', + width = 50, + height = 50 + ) %>% + addLegend(pal = factorPal, + values = quakes$group, + title = 'addLegend') + +# Bin Legend +# Restyle the text of the labels, change the legend item orientation + +binPal <- colorBin('Set1', quakes$mag) +leaflet() %>% + addTiles() %>% + addCircleMarkers( + data = quakes, + lat = ~ lat, + lng = ~ long, + color = ~ binPal(mag), + opacity = 1, + fillOpacity = 1 + ) %>% + addLegendBin( + pal = binPal, + values = quakes$mag, + position = 'topright', + title = 'addLegendBin', + labelStyle = 'font-size: 18px; font-weight: bold;', + orientation = 'horizontal' + ) %>% + addLegend(pal = binPal, + values = quakes$mag, + title = 'addLegend') + +# Group Layer Control +# Works with baseGroups and overlayGroups + +leaflet() %>% + addTiles() %>% + addLegendNumeric( + pal = numPal, + values = quakes$depth, + position = 'topright', + title = 'addLegendNumeric', + group = 'Numeric Data' + ) %>% + addLegendQuantile( + pal = quantPal, + values = quakes$mag, + position = 'topright', + title = 'addLegendQuantile', + group = 'Quantile' + ) %>% + addLegendBin( + pal = binPal, + values = quakes$mag, + position = 'bottomleft', + title = 'addLegendBin', + group = 'Bin' + ) %>% + addLayersControl( + baseGroups = c('Numeric Data', 'Quantile'), overlayGroups = c('Bin'), + position = 'bottomright' + ) +
    #> Error in leaflet::addControl(map, html = htmltools::tagList(htmlElements), ...): unused argument (group = "Bin")
    +
    + +
    + + + +
    + + + + + + + + + + + diff --git a/docs/reference/addLegendImage.html b/docs/reference/addLegendImage.html index 905347c..72a8cae 100644 --- a/docs/reference/addLegendImage.html +++ b/docs/reference/addLegendImage.html @@ -1,285 +1,313 @@ - - - - - - - - -Add a Legend with Images — addLegendImage • leaflegend - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Creates a legend with images that are embedded into a 'leaflet' map so that -images do not need to be packaged when saving a 'leaflet' map as HTML. Full -control over the label and title style. The 'leaflet' map is passed through -and the output is a control so that legend is fully integrated with other -functionalities.

    -
    - -
    addLegendImage(
    -  map,
    -  images,
    -  labels,
    -  title = "",
    -  labelStyle = "font-size: 24px; vertical-align: middle;",
    -  orientation = c("vertical", "horizontal"),
    -  width = 20,
    -  height = 20,
    -  group = NULL,
    -  className = "info legend leaflet-control",
    -  ...
    -)
    - -

    Arguments

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    map

    a map widget object created from 'leaflet'

    images

    path to the image file

    labels

    labels for each image

    title

    the legend title, pass in HTML to style

    labelStyle

    character string of style argument for HTML text

    orientation

    stack the legend items vertically or horizontally

    width

    in pixels

    height

    in pixels

    group

    group name of a leaflet layer group

    className

    extra CSS class to append to the control, space separated

    ...

    arguments to pass to addControl

    - -

    Value

    - -

    an object from addControl

    - -

    Examples

    -
    -library(leaflet) -data(quakes) - -quakes1 <- quakes[1:10,] - -leafIcons <- icons( - iconUrl = ifelse(quakes1$mag < 4.6, - "http://leafletjs.com/examples/custom-icons/leaf-green.png", - "http://leafletjs.com/examples/custom-icons/leaf-red.png" - ), - iconWidth = 38, iconHeight = 95, - iconAnchorX = 22, iconAnchorY = 94, - shadowUrl = "http://leafletjs.com/examples/custom-icons/leaf-shadow.png", - shadowWidth = 50, shadowHeight = 64, - shadowAnchorX = 4, shadowAnchorY = 62 -) - -leaflet(data = quakes1) %>% addTiles() %>% - addMarkers(~long, ~lat, icon = leafIcons, group = 'Quake Leaves') %>% - addLegendImage(images = c("http://leafletjs.com/examples/custom-icons/leaf-green.png", - "http://leafletjs.com/examples/custom-icons/leaf-red.png"), - labels = c('Green', 'Red'),width = 38, height = 95, - title = htmltools::tags$div('Leaf', - style = 'font-size: 24px; text-align: center;'), - position = 'topright', - group = 'Quake Leaves') %>% - addLayersControl(overlayGroups = c('Quake Leaves'), position = 'bottomright') - -
    -
    - -
    - - - -
    - - - - - - - - - - - - - + + + + + + + + +Add a Legend with Images — addLegendImage • leaflegend + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + +
    + +
    +
    + + +
    +

    Creates a legend with images that are embedded into a 'leaflet' map so that +images do not need to be packaged when saving a 'leaflet' map as HTML. Full +control over the label and title style. The 'leaflet' map is passed through +and the output is a control so that legend is fully integrated with other +functionalities.

    +
    + +
    addLegendImage(
    +  map,
    +  images,
    +  labels,
    +  title = "",
    +  labelStyle = "font-size: 24px; vertical-align: middle;",
    +  orientation = c("vertical", "horizontal"),
    +  width = 20,
    +  height = 20,
    +  group = NULL,
    +  className = "info legend leaflet-control",
    +  ...
    +)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    map

    a map widget object created from 'leaflet'

    images

    path to the image file

    labels

    labels for each image

    title

    the legend title, pass in HTML to style

    labelStyle

    character string of style argument for HTML text

    orientation

    stack the legend items vertically or horizontally

    width

    in pixels

    height

    in pixels

    group

    group name of a leaflet layer group

    className

    extra CSS class to append to the control, space separated

    ...

    arguments to pass to addControl

    + +

    Value

    + +

    an object from addControl

    + +

    Examples

    +
    +library(leaflet) +data(quakes) + +quakes1 <- quakes[1:10,] + +leafIcons <- icons( + iconUrl = ifelse(quakes1$mag < 4.6, + "http://leafletjs.com/examples/custom-icons/leaf-green.png", + "http://leafletjs.com/examples/custom-icons/leaf-red.png" + ), + iconWidth = 38, iconHeight = 95, + iconAnchorX = 22, iconAnchorY = 94, + shadowUrl = "http://leafletjs.com/examples/custom-icons/leaf-shadow.png", + shadowWidth = 50, shadowHeight = 64, + shadowAnchorX = 4, shadowAnchorY = 62 +) + +leaflet(data = quakes1) %>% addTiles() %>% + addMarkers(~long, ~lat, icon = leafIcons, group = 'Quake Leaves') %>% + addLegendImage(images = c("http://leafletjs.com/examples/custom-icons/leaf-green.png", + "http://leafletjs.com/examples/custom-icons/leaf-red.png"), + labels = c('Green', 'Red'),width = 38, height = 95, + title = htmltools::tags$div('Leaf', + style = 'font-size: 24px; text-align: center;'), + position = 'topright', + group = 'Quake Leaves') %>% + addLayersControl(overlayGroups = c('Quake Leaves'), position = 'bottomright') +
    #> Error in leaflet::addControl(map, html = htmltools::tagList(htmlElements), ...): unused argument (group = "Quake Leaves")
    +# Add a legend with different size custom images to match using size encoding +# on icons +height <- sizeNumeric(quakes$depth, baseSize = 40) +width <- height * 38 / 95 +symbols <- icons( + iconUrl = 'http://leafletjs.com/examples/custom-icons/leaf-green.png', + iconWidth = width, + iconHeight = height) +probs <- c(.2, .4, .6, .8) +leaflet(quakes) %>% + addTiles() %>% + addMarkers(icon = symbols, + lat = ~lat, lng = ~long) %>% + addLegendImage(images = rep("http://leafletjs.com/examples/custom-icons/leaf-green.png", 4), + labels = round(quantile(height, probs = probs), 0), + width = quantile(height, probs = probs) * 38 / 95, + height = quantile(height, probs = probs), + title = htmltools::tags$div('Leaf', + style = 'font-size: 24px; text-align: center;'), + position = 'topright', orientation = 'vertical') +
    +
    + +
    + + + +
    + + + + + + + + + + + diff --git a/docs/reference/addLegendSize.html b/docs/reference/addLegendSize.html index 7ef1345..5a86889 100644 --- a/docs/reference/addLegendSize.html +++ b/docs/reference/addLegendSize.html @@ -1,389 +1,393 @@ - - - - - - - - -Add a legend that for the sizing of symbols — addLegendSize • leaflegend - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Add a legend that for the sizing of symbols

    -
    - -
    addLegendSize(
    -  map,
    -  pal,
    -  values,
    -  title = NULL,
    -  labelStyle = "",
    -  shape = c("rect", "circle", "triangle", "plus", "cross", "diamond", "star",
    -    "stadium"),
    -  orientation = c("vertical", "horizontal"),
    -  color,
    -  fillColor,
    -  strokeWidth = 1,
    -  opacity = 1,
    -  fillOpacity = opacity,
    -  breaks = 5,
    -  baseSize = 10,
    -  numberFormat = function(x) {     prettyNum(x, big.mark = ",", scientific = FALSE,
    -    digits = 1) },
    -  group = NULL,
    -  className = "info legend leaflet-control",
    -  ...
    -)
    -
    -sizeNumeric(values, baseSize)
    -
    -sizeBreaks(values, breaks, baseSize, ...)
    -
    -makeSizeIcons(
    -  values,
    -  shape = c("rect", "circle", "triangle", "plus", "cross", "diamond", "star",
    -    "stadium"),
    -  pal,
    -  color,
    -  colorValues,
    -  fillColor,
    -  opacity,
    -  fillOpacity = opacity,
    -  strokeWidth = 1,
    -  baseSize,
    -  ...
    -)
    - -

    Arguments

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    map

    a map widget object created from 'leaflet'

    pal

    the color palette function, generated from colorNumeric

    values

    the values used to generate sizes and if colorValues is not specified and -pal is given, then the values are used to generate colors from the palette -function

    title

    the legend title, pass in HTML to style

    labelStyle

    character string of style argument for HTML text

    shape

    shape of the color symbols

    orientation

    stack the legend items vertically or horizontally

    color

    the color of the legend symbols, if omitted pal is used

    fillColor

    fill color of symbol

    strokeWidth

    width of symbol outline

    opacity

    opacity of the legend items

    fillOpacity

    fill opacity of the legend items

    breaks

    an integer specifying the number of breaks or a numeric vector of the breaks

    baseSize

    re-scaling size in pixels of the mean of the values, the average value will -be this exact size

    numberFormat

    formatting functions for numbers that are displayed e.g. format, prettyNum

    group

    group name of a leaflet layer group

    className

    extra CSS class to append to the control, space separated

    ...

    arguments to pass to

    -

    addControl for addLegendSize

    -

    pretty for sizeBreaks

    -

    makeSymbol for makeSizeIcons

    colorValues

    the values used to generate color from the palette function

    - -

    Value

    - -

    an object from addControl

    - -

    Examples

    -
    library(leaflet) -data("quakes") -quakes <- quakes[1:100,] -numPal <- colorNumeric('viridis', quakes$depth) -sizes <- sizeNumeric(quakes$depth, baseSize = 10) -symbols <- Map( - makeSymbol, - shape = 'triangle', - color = numPal(quakes$depth), - width = sizes, - height = sizes -) -leaflet() %>% - addTiles() %>% - addMarkers(data = quakes, - icon = icons(iconUrl = symbols), - lat = ~lat, lng = ~long) %>% - addLegendSize( - values = quakes$depth, - pal = numPal, - title = 'Depth', - labelStyle = 'margin: auto;', - shape = c('triangle'), - orientation = c('vertical', 'horizontal'), - opacity = .7, - breaks = 5) - -# a wrapper for making icons is provided -sizeSymbols <- -makeSizeIcons( - quakes$depth, - shape = 'cross', - pal = numPal, - color = 'black', - strokeWidth = 1, - opacity = .8, - fillOpacity = .5, - baseSize = 20 -) -leaflet() %>% - addTiles() %>% - addMarkers(data = quakes, - icon = sizeSymbols, - lat = ~lat, lng = ~long) %>% - addLegendSize( - values = quakes$depth, - pal = numPal, - title = 'Depth', - shape = 'cross', - orientation = 'horizontal', - strokeWidth = 1, - opacity = .8, - fillOpacity = .5, - color = 'black', - baseSize = 20, - breaks = 5) - -# Group layers control -leaflet() %>% - addTiles() %>% - addLegendSize( - values = quakes$depth, - pal = numPal, - title = 'Depth', - labelStyle = 'margin: auto;', - shape = c('triangle'), - orientation = c('vertical', 'horizontal'), - opacity = .7, - breaks = 5, - group = 'Depth') %>% - addLayersControl(overlayGroups = c('Depth')) - -
    - -
    - -
    - - - -
    - - - - - - - - - - - - + + + + + + + + +Add a legend that for the sizing of symbols — addLegendSize • leaflegend + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + +
    + +
    +
    + + +
    +

    Add a legend that for the sizing of symbols

    +
    + +
    addLegendSize(
    +  map,
    +  pal,
    +  values,
    +  title = NULL,
    +  labelStyle = "",
    +  shape = c("rect", "circle", "triangle", "plus", "cross", "diamond", "star",
    +    "stadium"),
    +  orientation = c("vertical", "horizontal"),
    +  color,
    +  fillColor,
    +  strokeWidth = 1,
    +  opacity = 1,
    +  fillOpacity = opacity,
    +  breaks = 5,
    +  baseSize = 10,
    +  numberFormat = function(x) {     prettyNum(x, big.mark = ",", scientific = FALSE,
    +    digits = 1) },
    +  group = NULL,
    +  className = "info legend leaflet-control",
    +  ...
    +)
    +
    +sizeNumeric(values, baseSize)
    +
    +sizeBreaks(values, breaks, baseSize, ...)
    +
    +makeSizeIcons(
    +  values,
    +  shape = c("rect", "circle", "triangle", "plus", "cross", "diamond", "star",
    +    "stadium"),
    +  pal,
    +  color,
    +  colorValues,
    +  fillColor,
    +  opacity,
    +  fillOpacity = opacity,
    +  strokeWidth = 1,
    +  baseSize,
    +  ...
    +)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    map

    a map widget object created from 'leaflet'

    pal

    the color palette function, generated from colorNumeric

    values

    the values used to generate sizes and if colorValues is not specified and +pal is given, then the values are used to generate colors from the palette +function

    title

    the legend title, pass in HTML to style

    labelStyle

    character string of style argument for HTML text

    shape

    shape of the color symbols

    orientation

    stack the legend items vertically or horizontally

    color

    the color of the legend symbols, if omitted pal is used

    fillColor

    fill color of symbol

    strokeWidth

    width of symbol outline

    opacity

    opacity of the legend items

    fillOpacity

    fill opacity of the legend items

    breaks

    an integer specifying the number of breaks or a numeric vector of the breaks

    baseSize

    re-scaling size in pixels of the mean of the values, the average value will +be this exact size

    numberFormat

    formatting functions for numbers that are displayed e.g. format, prettyNum

    group

    group name of a leaflet layer group

    className

    extra CSS class to append to the control, space separated

    ...

    arguments to pass to

    +

    addControl for addLegendSize

    +

    pretty for sizeBreaks

    +

    makeSymbol for makeSizeIcons

    colorValues

    the values used to generate color from the palette function

    + +

    Value

    + +

    an object from addControl

    + +

    Examples

    +
    library(leaflet) +data("quakes") +quakes <- quakes[1:100,] +numPal <- colorNumeric('viridis', quakes$depth) +sizes <- sizeNumeric(quakes$depth, baseSize = 10) +symbols <- Map( + makeSymbol, + shape = 'triangle', + color = numPal(quakes$depth), + width = sizes, + height = sizes +) +leaflet() %>% + addTiles() %>% + addMarkers(data = quakes, + icon = icons(iconUrl = symbols), + lat = ~lat, lng = ~long) %>% + addLegendSize( + values = quakes$depth, + pal = numPal, + title = 'Depth', + labelStyle = 'margin: auto;', + shape = c('triangle'), + orientation = c('vertical', 'horizontal'), + opacity = .7, + breaks = 5) + +# a wrapper for making icons is provided +sizeSymbols <- +makeSizeIcons( + quakes$depth, + shape = 'cross', + pal = numPal, + color = 'black', + strokeWidth = 1, + opacity = .8, + fillOpacity = .5, + baseSize = 20 +) +leaflet() %>% + addTiles() %>% + addMarkers(data = quakes, + icon = sizeSymbols, + lat = ~lat, lng = ~long) %>% + addLegendSize( + values = quakes$depth, + pal = numPal, + title = 'Depth', + shape = 'cross', + orientation = 'horizontal', + strokeWidth = 1, + opacity = .8, + fillOpacity = .5, + color = 'black', + baseSize = 20, + breaks = 5) + +# Group layers control +leaflet() %>% + addTiles() %>% + addLegendSize( + values = quakes$depth, + pal = numPal, + title = 'Depth', + labelStyle = 'margin: auto;', + shape = c('triangle'), + orientation = c('vertical', 'horizontal'), + opacity = .7, + breaks = 5, + group = 'Depth') %>% + addLayersControl(overlayGroups = c('Depth')) +
    #> Error in leaflet::addControl(map, html = htmltools::tagList(htmlElements), ...): unused argument (group = "Depth")
    +
    + +
    + + + +
    + + + + + + + + + + + diff --git a/docs/reference/figures/logo.png b/docs/reference/figures/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..5fc8e8652a3b20870fd5a8e7e2ec8075ed9a8bf1 GIT binary patch literal 34555 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 ma%BK_cXuvnZfkR6VQ^(GZ*pgw?mQX*0000 - - - - - - - -Function reference • leaflegend - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -

    All functions

    -

    -
    -

    addLegendNumeric() addLegendQuantile() addLegendBin() addLegendFactor()

    -

    Add Customizable Color Legends to a 'leaflet' map widget

    -

    addLegendImage()

    -

    Add a Legend with Images

    -

    addLegendSize() sizeNumeric() sizeBreaks() makeSizeIcons()

    -

    Add a legend that for the sizing of symbols

    -

    makeSymbol() makeSymbolIcons()

    -

    Create an SVG tag for the symbol

    -
    - - -
    - - - -
    - - - - - - - - - - - + + + + + + + + +Function reference • leaflegend + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    All functions

    +

    +
    +

    addLegendNumeric() addLegendQuantile() addLegendBin() addLegendFactor()

    +

    Add Customizable Color Legends to a 'leaflet' map widget

    +

    addLegendImage()

    +

    Add a Legend with Images

    +

    addLegendSize() sizeNumeric() sizeBreaks() makeSizeIcons()

    +

    Add a legend that for the sizing of symbols

    +

    makeSymbol() makeSymbolIcons()

    +

    Create an SVG tag for the symbol

    +
    + + +
    + + + +
    + + + + + + + + + + + diff --git a/docs/reference/makeSymbol.html b/docs/reference/makeSymbol.html index 64b7e53..0c99016 100644 --- a/docs/reference/makeSymbol.html +++ b/docs/reference/makeSymbol.html @@ -1,247 +1,256 @@ - - - - - - - - -Create an SVG tag for the symbol — makeSymbol • leaflegend - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Create an SVG tag for the symbol

    -
    - -
    makeSymbol(
    -  shape,
    -  width,
    -  height = width,
    -  color,
    -  fillColor = color,
    -  opacity = 1,
    -  fillOpacity = opacity,
    -  ...
    -)
    -
    -makeSymbolIcons(
    -  shape = c("rect", "circle", "triangle", "plus", "cross", "diamond", "star",
    -    "stadium"),
    -  color,
    -  fillColor = color,
    -  opacity,
    -  fillOpacity = opacity,
    -  strokeWidth = 1,
    -  width,
    -  height = width,
    -  ...
    -)
    - -

    Arguments

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    shape

    the desired shape of the symbol

    width

    in pixels

    height

    in pixels

    color

    color of the symbol

    fillColor

    fill color of symbol

    opacity

    opacity of color

    fillOpacity

    opacity of fillColor

    ...

    arguments to be passed to svg shape tag

    strokeWidth

    width in pixels of symbol outline

    - -

    Value

    - -

    HTML svg element

    - -
    - -
    - - - -
    - - - - - - - - - - + + + + + + + + +Create an SVG tag for the symbol — makeSymbol • leaflegend + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + +
    + +
    +
    + + +
    +

    Create an SVG tag for the symbol

    +
    + +
    makeSymbol(
    +  shape,
    +  width,
    +  height = width,
    +  color,
    +  fillColor = color,
    +  opacity = 1,
    +  fillOpacity = opacity,
    +  ...
    +)
    +
    +makeSymbolIcons(
    +  shape = c("rect", "circle", "triangle", "plus", "cross", "diamond", "star",
    +    "stadium"),
    +  color,
    +  fillColor = color,
    +  opacity,
    +  fillOpacity = opacity,
    +  strokeWidth = 1,
    +  width,
    +  height = width,
    +  ...
    +)
    + +

    Arguments

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    shape

    the desired shape of the symbol

    width

    in pixels

    height

    in pixels

    color

    color of the symbol

    fillColor

    fill color of symbol

    opacity

    opacity of color

    fillOpacity

    opacity of fillColor

    ...

    arguments to be passed to svg shape tag

    strokeWidth

    width in pixels of symbol outline

    + +

    Value

    + +

    HTML svg element

    + +
    + +
    + + + +
    + + + + + + + + + + + diff --git a/pkgdown/favicon/apple-touch-icon-120x120.png b/pkgdown/favicon/apple-touch-icon-120x120.png new file mode 100644 index 0000000000000000000000000000000000000000..8263c4e85bd9ea383faa50c4f14bd33963a1126f GIT binary patch literal 13364 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%0A7mkilQWs@Lmt{db>TSc?YW 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 literal 0 HcmV?d00001 diff --git a/pkgdown/favicon/apple-touch-icon-152x152.png b/pkgdown/favicon/apple-touch-icon-152x152.png new file mode 100644 index 0000000000000000000000000000000000000000..facc28fb329e702c967fe3f3d3ba0dc25a034a54 GIT binary patch literal 19384 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 literal 0 HcmV?d00001 diff --git a/pkgdown/favicon/apple-touch-icon-180x180.png b/pkgdown/favicon/apple-touch-icon-180x180.png new file mode 100644 index 0000000000000000000000000000000000000000..0f71499296843593db3fcbc1a37426b902fab0e3 GIT binary patch literal 24966 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

    rY2QGg=0;ZwMN1+k2MavrqWnCY4_e>;q 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 T`P0YKkrKec*4c(|+ULPPg=`GK literal 0 HcmV?d00001 diff --git a/pkgdown/favicon/favicon-32x32.png b/pkgdown/favicon/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..f81b0a1f003cd660f377142ea87abc60a8ca4bf7 GIT binary patch literal 2489 zcmZ`*c{J3G8va?wAdIn_G{(L*NJLzOVPr&uu?xc|LX4ZG7)u`#L(G)yKC(nL*?k6m zc4H~BBujJpn-P832fe zF+9{m1mtXAcCc}8E6S43g~kyeI&;L0GG3+sWBGU+5Ob=aUM#z zH}>`F+DS|F3%?a=Ia8c;plW(q7L%>p2hOknvm%lcaqJ)ga4OMCRz1&29Zr3CtrR9G zXM%8L738MJDLPaOyv@?>pGs#^{d%NEM#t!l4hDQ4BR;JxjoG`C(R<|G@%A}~*I(GA zLhCu~-CP=pD{BEr$wl)iD~8e=AOiC96kMTP6NVCpeLgNLt=+^IDv0c{tky($EW6iK za7LWA?M{0*stmj6kGj^m+%rgCRY?w!6LgdV)^T~!OdAD{=-ch`Zq<&D4{)#7kX1NP zPr}~lQ_oha@>EqxzAudCz$)6K`nCup!)WBxrM+{|iJ1G9!h=0Sv?wB}P3QDb z)R!{f36h@mA@_9$PQNW2_~KhaAj3#d8cb+3^-0;w(k*UvB*E7`bNS=Tc~-unmJJ47 z)w2sLs=qTIy|bR08>N_o3#Cql=7;KDe?U;k|0AVms-DYku{4xwsv%agGuBj>Dj|2* z&H2ZXch$_y@eTh7I-Ajb2#dX3xDwu_?O=Iktx#{wFiBfZQ)AIh<(!zD0Bv{SfLIwRO}9&UWQL|#A{PU?o7j;XI0)-xW3^JL$NB>3VPzg`cw zYY3!vKiB3FL+s@_>2a!eS3JQRs6MhM*)u_9Uf2mRPAGu=VuthPs*~Z}h$79q$JgrB zF6i+N+QLkn)@w4N4}Ll_=32a8O-g5FU`nxhxZiOvK^hiYaS%YuB@*W76g_-=L zCl51KPO!iOU=SPzZ=|?p&luf?*PAppc8u=UHa3_3>Uh4yMx;*nHT)%tiTS>?qkzsy zROCy@urg8?iB}%_kl*E>gc-$GQALd*<0h<}%-%QzSIxu5{vGyUIMvJ-2N4-*L)2^i zYWp-5wmeeN<|DfC>>Kp+!GnXG1NW1GEpk}An9w_!$NWJr0q2`sZ zdV;~?mAoJNL+6|d7JSxNmx|0+$x~NK486W5yEUXM+EB}s$>;=}K?*oIO|4Yy&)i>P z^HB@Xj!gJL4Bqj<^7nf-8%@VsD?V8};&LwX2jJj(2Mb}=tL1uX=n`HsS~fENK%6tF z+xz3KP29|%!38_BJgN;U&SbOqzd`%c)Ec}wNZcT&* z29-w?Hb+89!{K~arQ8_NnrzG}IoeOIolTC? z?K6rb_9ZJdL8w7$wm3yAKBi0>2pIfpnsw%Gv(MjnJS>%n_LCo{YZBFtWlPdR+#ss z)Z);-5ZuySz{UxEqB!LuYfb%&#gZ8KK}$=y`|&61w6CAtTi?&N3i#n5lq}e_bO_1p zk1{3mN5RE$-xwW@1w~&FC8&qvY{83?_|HUbK_W;ue<%;~V&Xc%D)uPq>a~K30xF z{Sy|zD+nilY?RBweCLux&VE1wr9ZsJ+|~6WOuE^Dn^kf`3;b@P3GX%EycO5e>8{;e zr=;zAYmiWT5G4Nc_}i-*8GlUk)O}{}nyI?HZS_OZ%{%UJ3&Szt5eF=u}qjqqh1s#~;!Lm#y%@_S`)#d>j63L_}JO7X2POy)^Z{+_sFE z;s|!P?!iMsgMIx2@o++92p;YqLhuHFh`fbuUaq?iii!g^^g+udJAh4wN8OtTDg(93 z5@LhGO^KH}eb{7bv2gm-$G)z?E?5_cPP8aOs{^Z|5W=>JHu)?9ur$M%zB2KQ|1X8g Bh|&N6 literal 0 HcmV?d00001 diff --git a/pkgdown/favicon/favicon.ico b/pkgdown/favicon/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..18a3ee565139c04771914435589a7c329ee95fab GIT binary patch literal 15086 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 literal 0 HcmV?d00001 From 7f3dcddff8fdb9baf02a6e674e2a5bdc9e21a44d Mon Sep 17 00:00:00 2001 From: troh Date: Thu, 22 Jul 2021 18:06:44 -0700 Subject: [PATCH 11/12] adding rd --- man/addLegendImage.Rd | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/man/addLegendImage.Rd b/man/addLegendImage.Rd index 7ca653f..f0dcf23 100644 --- a/man/addLegendImage.Rd +++ b/man/addLegendImage.Rd @@ -81,24 +81,23 @@ leaflet(data = quakes1) \%>\% addTiles() \%>\% group = 'Quake Leaves') \%>\% addLayersControl(overlayGroups = c('Quake Leaves'), position = 'bottomright') -# Add a legend with different size custom images to match using size encoding -# on icons -height <- sizeNumeric(quakes$depth, baseSize = 40) -width <- height * 38 / 95 -symbols <- icons( - iconUrl = 'http://leafletjs.com/examples/custom-icons/leaf-green.png', - iconWidth = width, - iconHeight = height) -probs <- c(.2, .4, .6, .8) -leaflet(quakes) \%>\% - addTiles() \%>\% - addMarkers(icon = symbols, - lat = ~lat, lng = ~long) \%>\% - addLegendImage(images = rep("http://leafletjs.com/examples/custom-icons/leaf-green.png", 4), - labels = round(quantile(height, probs = probs), 0), - width = quantile(height, probs = probs) * 38 / 95, - height = quantile(height, probs = probs), - title = htmltools::tags$div('Leaf', - style = 'font-size: 24px; text-align: center;'), - position = 'topright', orientation = 'vertical') + # use raster images with size encodings + height <- sizeNumeric(quakes$depth, baseSize = 40) + width <- height * 38 / 95 + symbols <- icons( + iconUrl = 'http://leafletjs.com/examples/custom-icons/leaf-green.png', + iconWidth = width, + iconHeight = height) + probs <- c(.2, .4, .6, .8) + leaflet(quakes) \%>\% + addTiles() \%>\% + addMarkers(icon = symbols, + lat = ~lat, lng = ~long) \%>\% + addLegendImage(images = rep("http://leafletjs.com/examples/custom-icons/leaf-green.png", 4), + labels = round(quantile(height, probs = probs), 0), + width = quantile(height, probs = probs) * 38 / 95, + height = quantile(height, probs = probs), + title = htmltools::tags$div('Leaf', + style = 'font-size: 24px; text-align: center; margin-bottom: 5px;'), + position = 'topright', orientation = 'vertical') } From 61261449cd54499720b5400e1b68fd3b11e7a1d0 Mon Sep 17 00:00:00 2001 From: troh Date: Thu, 22 Jul 2021 18:33:25 -0700 Subject: [PATCH 12/12] cleaning up example formatting --- R/legend.R | 16 +++++++++------- man/addLegendImage.Rd | 16 +++++++++------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/R/legend.R b/R/legend.R index 8199af9..c0d6ae9 100644 --- a/R/legend.R +++ b/R/legend.R @@ -98,13 +98,15 @@ #' addTiles() %>% #' addMarkers(icon = symbols, #' lat = ~lat, lng = ~long) %>% -#' addLegendImage(images = rep("http://leafletjs.com/examples/custom-icons/leaf-green.png", 4), -#' labels = round(quantile(height, probs = probs), 0), -#' width = quantile(height, probs = probs) * 38 / 95, -#' height = quantile(height, probs = probs), -#' title = htmltools::tags$div('Leaf', -#' style = 'font-size: 24px; text-align: center; margin-bottom: 5px;'), -#' position = 'topright', orientation = 'vertical') +#' addLegendImage( +#' images = rep("http://leafletjs.com/examples/custom-icons/leaf-green.png", 4), +#' labels = round(quantile(height, probs = probs), 0), +#' width = quantile(height, probs = probs) * 38 / 95, +#' height = quantile(height, probs = probs), +#' title = htmltools::tags$div( +#' 'Leaf', +#' style = 'font-size: 24px; text-align: center; margin-bottom: 5px;'), +#' position = 'topright', orientation = 'vertical') addLegendImage <- function(map, images, labels, diff --git a/man/addLegendImage.Rd b/man/addLegendImage.Rd index f0dcf23..5f7e5e1 100644 --- a/man/addLegendImage.Rd +++ b/man/addLegendImage.Rd @@ -93,11 +93,13 @@ leaflet(data = quakes1) \%>\% addTiles() \%>\% addTiles() \%>\% addMarkers(icon = symbols, lat = ~lat, lng = ~long) \%>\% - addLegendImage(images = rep("http://leafletjs.com/examples/custom-icons/leaf-green.png", 4), - labels = round(quantile(height, probs = probs), 0), - width = quantile(height, probs = probs) * 38 / 95, - height = quantile(height, probs = probs), - title = htmltools::tags$div('Leaf', - style = 'font-size: 24px; text-align: center; margin-bottom: 5px;'), - position = 'topright', orientation = 'vertical') + addLegendImage( + images = rep("http://leafletjs.com/examples/custom-icons/leaf-green.png", 4), + labels = round(quantile(height, probs = probs), 0), + width = quantile(height, probs = probs) * 38 / 95, + height = quantile(height, probs = probs), + title = htmltools::tags$div( + 'Leaf', + style = 'font-size: 24px; text-align: center; margin-bottom: 5px;'), + position = 'topright', orientation = 'vertical') }