diff --git a/DESCRIPTION b/DESCRIPTION index 25039b3..f4cfb52 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -6,6 +6,7 @@ Authors@R: c( person("Fernando", "Cagua", email = "fernando.cagua@stats.govt.nz", role = c("aut", "cre")), person("David", "Hodge", email = "david.hodge@stats.govt.nz", role = c("aut")), person("Bonnie", "Farant", email = "bonnie.farant@stats.govt.nz", role = c("aut")), + person("Nestor", "Robinson", email = "nrob536@aucklanduni.ac.nz", role = c("aut")), person("Statistics New Zealand", role = c("cph"))) Description: Helper functions commonly used in Environmental Reporting at Statistics New Zealand. It includes utility functions to connect to the @@ -41,7 +42,14 @@ URL: https://statisticsnz.github.io/er.helpers, https://github.com/statisticsnz/ BugReports: https://github.com/statisticsNZ/er.helpers/issues Encoding: UTF-8 LazyData: true -RoxygenNote: 7.1.2 +RoxygenNote: 7.3.3 Suggests: testthat (>= 2.1.0), - roxygen2 (>= 6.1.1) + roxygen2 (>= 6.1.1), + knitr, + rmarkdown, + ggplot2, + tibble, + dplyr, + pkgdown +VignetteBuilder: knitr diff --git a/docs/404.html b/docs/404.html index f1279fe..19e4b93 100644 --- a/docs/404.html +++ b/docs/404.html @@ -1,66 +1,27 @@ - - - - + + + + - Page not found (404) • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + - - - -
-
- + +
+ + + - - -
+
+
-
+ - - - + + diff --git a/docs/CODE_OF_CONDUCT.html b/docs/CODE_OF_CONDUCT.html new file mode 100644 index 0000000..b1736ee --- /dev/null +++ b/docs/CODE_OF_CONDUCT.html @@ -0,0 +1,155 @@ + +Contributor Covenant Code of Conduct • er.helpers + + +
+
+ + + +
+
+ + +
+
+

Our Pledge

+

We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.

+

We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

+
+
+

Our Standards

+

Examples of behavior that contributes to a positive environment for our community include:

+
  • Demonstrating empathy and kindness toward other people
  • +
  • Being respectful of differing opinions, viewpoints, and experiences
  • +
  • Giving and gracefully accepting constructive feedback
  • +
  • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
  • +
  • Focusing on what is best not just for us as individuals, but for the overall community
  • +

Examples of unacceptable behavior include:

+
  • The use of sexualized language or imagery, and sexual attention or advances of any kind
  • +
  • Trolling, insulting or derogatory comments, and personal or political attacks
  • +
  • Public or private harassment
  • +
  • Publishing others’ private information, such as a physical or email address, without their explicit permission
  • +
  • Other conduct which could reasonably be considered inappropriate in a professional setting
  • +
+
+

Enforcement Responsibilities

+

Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

+

Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

+
+
+

Scope

+

This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

+
+
+

Enforcement

+

Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at . All complaints will be reviewed and investigated promptly and fairly.

+

All community leaders are obligated to respect the privacy and security of the reporter of any incident.

+
+
+

Enforcement Guidelines

+

Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

+
+

1. Correction

+

Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

+

Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

+
+
+

2. Warning

+

Community Impact: A violation through a single incident or series of actions.

+

Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

+
+
+

3. Temporary Ban

+

Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

+

Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

+
+
+

4. Permanent Ban

+

Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

+

Consequence: A permanent ban from any sort of public interaction within the community.

+
+
+
+

Attribution

+

This Code of Conduct is adapted from the Contributor Covenant, version 2.0, available at https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.

+

Community Impact Guidelines were inspired by Mozilla’s code of conduct enforcement ladder.

+

For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

+
+
+ +
+ + + +
+ + + +
+ + + + + + + + diff --git a/docs/CONTRIBUTING.html b/docs/CONTRIBUTING.html new file mode 100644 index 0000000..f9f0d4a --- /dev/null +++ b/docs/CONTRIBUTING.html @@ -0,0 +1,140 @@ + +1. Ways to contribute • er.helpers + + +
+
+ + + +
+
+ + + +

Thank you for your interest in contributing to this project. These guidelines explain how to contribute code, documentation, or feedback to repositories under the Statistics NZ GitHub Organization.

+
+

You can contribute by:

+
  • Reporting bugs or issues
  • +
  • Suggesting enhancements
  • +
  • Submitting code (new features/ bug fixes)
  • +
  • Improving documentation (README, Wiki, tutorials)
  • +
+
+

2. Workflow

+
  1. Fork and branch
  • Fork the repository to your own GitHub account
  • +
  • Create a new branch for your code development:
  • +
git checkout -b feature/<short-description>
+
  • Use clear, descriptive branch names (e.g., bugfix/fix-sql-query)
  1. Code Standards
  • Follow the coding standards for the relevant programming language (R, Phyton, SAS, SQL, JavaScript, etc.)
  • +
  • Write clean, well-documented code
  • +
  • Include comments for complex logic
  • +
  • Add or update test where possible
  • +
  1. Commits Use clear, descriptive commit messages:
[git command]: "Short summary"
+

Examples:

+
git commit -m "Fix: corrected null handling in SQL query"
+
+git commit -m "feat: added R function for time series interpolation"
+
  1. Pull Request (PRs)
  • Targer the uat or dev branch for testing and integration
  • +
  • PRs to main/master (production) are only made by mainteners/owners after quality assurance testing
  • +
  • Each PR should include:
    • Reference to related issue(s) (e.g., Fixes #42)
    • +
    • Contain a clear description of the change
    • +
    • Pass automated checks (linting, unit tests)
    • +
  • +
+
+

3. Documentation

+
  • Update the README.md if your change affects usage
  • +
  • Add Roxygen2 style comments to explain new functions, workflows, or data transformations
  • +
  • Follow the repository structure for documentation
  • +
+
+

4. Licensing and Data Protection

+
  • All contributors must comply with the Crown Copyright license unless otherwisew specified.
  • +
  • Do not commit sensitive data, credentials, or unpublished statistics
  • +
  • Ensure that any third-party libraries or code comply with the approved licenses listed in the repository
  • +
+
+

5. Getting help

+

If you are unsure about how to contribute, please:

+
  • Open a discussion in the respository’s Issues section
  • +
  • Contact the repository maintainers
  • +
  • If repository maintainers not available, contact the admninistrator: +
  • +
+ + +
+ + + +
+ + + +
+ + + + + + + + diff --git a/docs/LICENSE-text.html b/docs/LICENSE-text.html index fa21f88..2c69a77 100644 --- a/docs/LICENSE-text.html +++ b/docs/LICENSE-text.html @@ -1,66 +1,12 @@ - - - - - - - -License • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -License • er.helpers + - - - -
-
- - -
-
+
+
-
- +
+ + - - - + diff --git a/docs/SECURITY.html b/docs/SECURITY.html new file mode 100644 index 0000000..823c396 --- /dev/null +++ b/docs/SECURITY.html @@ -0,0 +1,110 @@ + +Security Policy • er.helpers + + +
+
+ + + +
+
+ + +
+
+

Supported Versions

+

Use this section to tell people about which versions of your project are currently being supported with security updates.

+ + + + + + + + + + +
VersionSupported
5.1.x
5.0.x
4.0.x
< 4.0
+
+

Reporting a Vulnerability

+

Use this section to tell people how to report a vulnerability.

+

Tell them where to go, how often they can expect to get an update on a reported vulnerability, what to expect if the vulnerability is accepted or declined, etc.

+
+
+ +
+ + + +
+ + + +
+ +
+

Site built with pkgdown 2.2.0.

+
+ +
+ + + + + + + + diff --git a/docs/articles/anomaly-and-aggregation.html b/docs/articles/anomaly-and-aggregation.html new file mode 100644 index 0000000..f7876d5 --- /dev/null +++ b/docs/articles/anomaly-and-aggregation.html @@ -0,0 +1,332 @@ + + + + + + + +Anomaly Calculation and Data Aggregation • er.helpers + + + + + + + + + + + +
+
+ + + + +
+
+ + + + +
+

Overview +

+

Environmental time series frequently contain missing values, and international standards from organisations like the World Meteorological Organisation (WMO) specify exactly how much missing data is acceptable before an aggregated value should not be reported. er.helpers provides two complementary sets of tools for these situations:

+
    +
  • +Aggregation with criteria — compute a summary statistic (mean, min, max, sum) only when a dataset meets user-defined missing-data thresholds.
  • +
  • +Annual anomaly — express each year’s value relative to a reference period mean, with the same missing-data safeguards applied to the baseline.
  • +
+
+
+
+

Aggregating data with missing-value criteria +

+

aggregate_with_criteria() returns the requested aggregate, or NA if either the total number of missing values or the length of the longest consecutive run of missing values exceeds the specified thresholds.

+

Thresholds can be expressed as counts (integers ≥ 1) or proportions (0 < value ≤ 1):

+
+# A month of daily temperatures with a few missing days
+# randomize sequence of daily temperatures and missing values to demonstrate consecutive-missing criteria
+set.seed(42)
+daily_temp <- sample(c(15:25, NA, NA, NA), size = 30, replace = TRUE)
+
+# Allow up to 3 missing days and no more than 2 consecutive missing days
+aggregate_with_criteria(daily_temp, max_missing = 3, max_consecutive = 2)
+#> [1] 19.62963
+
+# Tigthen the criteria: allow at most 2 missing days and no more than 1 consecutive missing day
+aggregate_with_criteria(daily_temp, max_missing = 2, max_consecutive = 1)
+#> [1] NA
+
+

Convenience wrappers +

+

mean_with_criteria(), min_with_criteria(), max_with_criteria(), and sum_with_criteria() call aggregate_with_criteria() with the appropriate fun argument pre-set:

+
+mean_with_criteria(daily_temp, max_missing = 3, max_consecutive = 2)
+#> [1] 19.62963
+min_with_criteria(daily_temp,  max_missing = 3, max_consecutive = 2)
+#> [1] 15
+max_with_criteria(daily_temp,  max_missing = 3, max_consecutive = 2)
+#> [1] 25
+sum_with_criteria(daily_temp,  max_missing = 3, max_consecutive = 2)
+#> [1] 530
+
+
+

Applying criteria across groups with dplyr +

+

A common workflow is to compute a monthly aggregate from daily data:

+
+set.seed(42)
+
+daily_data <- tibble(
+    date = seq.Date(as.Date("2020-01-01"),
+    as.Date("2020-12-31"), by = "day"),
+    temperature = runif(366, min = 5, max = 25)) |>
+  # Introduce ~8 % random missing values
+  mutate(temperature = ifelse(runif(n()) < 0.08, NA, temperature))
+
+monthly_means <- daily_data |>
+  mutate(year  = format(date, "%Y"),
+         month = format(date, "%m")) |>
+  group_by(year, month) |>
+  summarise(mean_temp = mean_with_criteria(
+    temperature, max_missing = 3, max_consecutive = 2),
+    .groups = "drop")
+
+monthly_means
+#> # A tibble: 12 × 3
+#>    year  month mean_temp
+#>    <chr> <chr>     <dbl>
+#>  1 2020  01         17.1
+#>  2 2020  02         NA  
+#>  3 2020  03         13.5
+#>  4 2020  04         15.4
+#>  5 2020  05         16.3
+#>  6 2020  06         14.6
+#>  7 2020  07         NA  
+#>  8 2020  08         13.7
+#>  9 2020  09         14.3
+#> 10 2020  10         12.9
+#> 11 2020  11         15.1
+#> 12 2020  12         15.6
+

Months where the missing-data criteria are exceeded will show NA, making it easy to flag them downstream.

+
+
+
+
+

Calculating annual anomalies +

+

calc_annual_anomaly() subtracts the mean of a reference period from every observation. The reference period mean is itself computed with mean_with_criteria(), so the same missing-data safeguards apply.

+
+set.seed(7)
+
+# Simulate 50 years of annual mean temperatures
+temp_series <- tibble(
+    year = 1971:2020,
+    temperature = 12 + cumsum(rnorm(50, mean = 0.03, sd = 0.4)))
+
+# Define the WMO 1981–2010 climate normal as the reference period
+reference_period <- c(1981, 2010)
+
+temp_series <- temp_series |>
+  mutate(anomaly = calc_annual_anomaly(temperature,
+   year, period = reference_period))
+
+head(temp_series)
+#> # A tibble: 6 × 3
+#>    year temperature anomaly
+#>   <int>       <dbl>   <dbl>
+#> 1  1971        12.9   -3.77
+#> 2  1972        12.5   -4.22
+#> 3  1973        12.2   -4.47
+#> 4  1974        12.1   -4.61
+#> 5  1975        11.8   -4.96
+#> 6  1976        11.4   -5.31
+
+

Visualising anomalies +

+
+library(ggplot2)
+
+ggplot(temp_series, aes(x = year, y = anomaly, fill = anomaly > 0)) +
+  geom_col(show.legend = FALSE) +
+  geom_hline(yintercept = 0, linewidth = 0.4) +
+  scale_fill_manual(values = c("#0D94A3", "#AE4E51")) +
+  labs(title    = "Annual temperature anomaly",
+       subtitle = paste0("Relative to ", reference_period[1], "\u2013",
+                         reference_period[2], " mean"),
+       x = NULL, y = "\u00b0C") +
+  theme_minimal()
+

+
+
+

Handling missing data in the reference period +

+

If observations are missing inside the reference period, calc_annual_anomaly() passes max_missing and max_consecutive to mean_with_criteria(). If the reference mean cannot be calculated the function returns NA for every year and issues a warning:

+
+# Introduce missing values in the reference period
+temp_with_gaps <- temp_series$temperature
+temp_with_gaps[11:15] <- NA  # years 1981–1985 are missing
+
+anomalies_strict <- calc_annual_anomaly(
+    x = temp_with_gaps,
+    year = temp_series$year,
+    period = reference_period,
+    max_missing = 0,   # zero tolerance for missing baseline data
+    max_consecutive = 0)
+#> Warning in calc_annual_anomaly(x = temp_with_gaps, year = temp_series$year, :
+#> Missing values for the anomaly reference period.
+
+head(anomalies_strict)
+#> [1] NA NA NA NA NA NA
+
+# Relax the constraint: allow up to 20 % missing in the reference period
+anomalies_relaxed <- calc_annual_anomaly(
+    x = temp_with_gaps,
+    year = temp_series$year,
+    period = reference_period,
+    max_missing = 0.20,
+    max_consecutive = NULL  # no consecutive-missing constraint
+)
+#> Warning in calc_annual_anomaly(x = temp_with_gaps, year = temp_series$year, :
+#> Missing values for the anomaly reference period.
+
+head(anomalies_relaxed)
+#> [1] -4.203734 -4.652443 -4.900160 -5.035077 -5.393346 -5.742258
+
+
+
+
+

Summary of key arguments +

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ArgumentDescriptionAccepts
max_missingMaximum allowable missing valuesCount (integer) or proportion (0–1)
max_consecutiveMaximum allowable consecutive missing valuesCount (integer) or proportion (0–1)
funAggregation function (aggregate_with_criteria only)Any function, e.g. mean, sum +
periodStart and end year of the anomaly baseline +c(start, end) or NULL for full range
+

Setting a threshold to NULL or 1 disables that constraint entirely.

+
+
+ + + +
+ + + +
+ +
+

+

Site built with pkgdown 2.2.0.

+
+ +
+
+ + + + + + + + diff --git a/docs/articles/anomaly-and-aggregation_files/accessible-code-block-0.0.1/empty-anchor.js b/docs/articles/anomaly-and-aggregation_files/accessible-code-block-0.0.1/empty-anchor.js new file mode 100644 index 0000000..ca349fd --- /dev/null +++ b/docs/articles/anomaly-and-aggregation_files/accessible-code-block-0.0.1/empty-anchor.js @@ -0,0 +1,15 @@ +// Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> +// v0.0.1 +// Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. + +document.addEventListener('DOMContentLoaded', function() { + const codeList = document.getElementsByClassName("sourceCode"); + for (var i = 0; i < codeList.length; i++) { + var linkList = codeList[i].getElementsByTagName('a'); + for (var j = 0; j < linkList.length; j++) { + if (linkList[j].innerHTML === "") { + linkList[j].setAttribute('aria-hidden', 'true'); + } + } + } +}); diff --git a/docs/articles/anomaly-and-aggregation_files/figure-html/anomaly-plot-1.png b/docs/articles/anomaly-and-aggregation_files/figure-html/anomaly-plot-1.png new file mode 100644 index 0000000..aa9d61e Binary files /dev/null and b/docs/articles/anomaly-and-aggregation_files/figure-html/anomaly-plot-1.png differ diff --git a/docs/articles/index.html b/docs/articles/index.html new file mode 100644 index 0000000..52e75d6 --- /dev/null +++ b/docs/articles/index.html @@ -0,0 +1,91 @@ + +Articles • er.helpers + + +
+
+ + + +
+
+ + + +
+
+ + +
+ +
+

Site built with pkgdown 2.2.0.

+
+ +
+ + + + + + + + diff --git a/docs/articles/palettes.html b/docs/articles/palettes.html new file mode 100644 index 0000000..ba44945 --- /dev/null +++ b/docs/articles/palettes.html @@ -0,0 +1,368 @@ + + + + + + + +Colour Palettes and Scale Transformations • er.helpers + + + + + + + + + + + +
+
+ + + + +
+
+ + + + + +
+

Overview +

+

er.helpers provides two families of colour palettes tailored for environmental reporting at Statistics New Zealand:

+ + + + + + + + + + + + + + + + + + + + + + + +
FamilyPrefixUse case
Statistics NZ webpal_snz_*StatsNZ website publications
EA19 reportpal_ea19_*Environment Aotearoa 2019 print report
Map / pointpal_point_*Spatial maps and scatter plots
+

Within each family there are palettes for different situations:

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SuffixPurpose
(none)Nominal (unordered) categorical variables
_alpha2Comparing a current year to one past year
_trend2Two-level ordinal trend (e.g. improving / worsening)
_trend3Three-level ordinal trend (e.g. improving / indeterminate / worsening)
_trend5Five-level ordinal trend
_nztcs_cNZ Threat Classification System — categories
_nztcs_sNZ Threat Classification System — sub-categories (SNZ only)
+

An additional signed_sqrt_trans() scale transformation is useful for visualising trend magnitudes that span both negative and positive values.

+
+
+
+

Viewing palettes +

+

Use scales::show_col() to display any palette:

+
+scales::show_col(pal_snz, borders = NA)
+

+
+scales::show_col(pal_ea19, borders = NA)
+

+
+scales::show_col(pal_point_set1, borders = NA)
+

+
+
+
+

Nominal palettes (unordered categories) +

+

Use the base pal_snz / pal_ea19 palettes with scale_fill_manual() or scale_colour_manual() for unordered categorical variables:

+
+set.seed(1)
+indicator_data <- tibble(
+  indicator = paste0("Indicator ", 1:7),
+  value     = runif(7, 50, 150)
+)
+
+ggplot(indicator_data, aes(x = reorder(indicator, value), y = value,
+                           fill = indicator)) +
+  geom_col(show.legend = FALSE) +
+  scale_fill_manual(values = pal_snz) +
+  coord_flip() +
+  labs(title = "pal_snz — nominal palette", x = NULL, y = "Value") +
+  theme_minimal()
+

+
+
+
+

Trend palettes (ordinal categories) +

+

Trend palettes are designed to pair with order_likelihood_levels() so that colours align with the direction and strength of a trend.

+
+

Two levels +

+
+trend2_df <- tibble(
+  trend = factor(c("Improving", "Worsening")),
+  n     = c(12, 8)
+)
+
+ggplot(trend2_df, aes(x = trend, y = n, fill = trend)) +
+  geom_col(show.legend = FALSE) +
+  scale_fill_manual(values = pal_snz_trend2) +
+  labs(title = "pal_snz_trend2", x = NULL, y = "Count") +
+  theme_minimal()
+

+
+
+

Five levels — full likelihood scale +

+
+set.seed(7)
+p_values <- runif(50)
+
+trend5_df <- tibble(
+  p_value    = p_values,
+  likelihood = get_likelihood_category(p_value, term_type = "increasing-decreasing") |>
+    order_likelihood_levels()
+) |>
+  count(likelihood)
+
+ggplot(trend5_df, aes(x = likelihood, y = n, fill = likelihood)) +
+  geom_col(show.legend = FALSE) +
+  scale_fill_manual(values = pal_snz_trend5) +
+  labs(title = "pal_snz_trend5 — five-level trend palette",
+       x = NULL, y = "Count") +
+  theme_minimal() +
+  theme(axis.text.x = element_text(angle = 30, hjust = 1))
+

+
+
+
+
+

Year-comparison palettes +

+

pal_snz_alpha2 and pal_ea19_alpha2 use a tinted base colour for the earlier year and the full base colour for the current year:

+
+comparison_df <- tibble(
+  year  = factor(c(2019, 2023), levels = c(2019, 2023)),
+  value = c(82, 91)
+)
+
+ggplot(comparison_df, aes(x = year, y = value, fill = year)) +
+  geom_col(show.legend = FALSE, width = 0.5) +
+  scale_fill_manual(values = pal_snz_alpha2) +
+  labs(title = "pal_snz_alpha2 — year comparison palette",
+       x = NULL, y = "Value") +
+  theme_minimal()
+

+
+
+
+

NZ Threat Classification System palettes +

+

pal_snz_nztcs_c (four categories) and pal_snz_nztcs_s (nine sub-categories) are named vectors, so they map automatically to factor levels:

+
+nztcs_df <- tibble(
+  status = factor(names(pal_snz_nztcs_c),
+                  levels = names(pal_snz_nztcs_c)),
+  n      = c(45, 120, 18, 310)
+)
+
+ggplot(nztcs_df, aes(x = status, y = n, fill = status)) +
+  geom_col(show.legend = FALSE) +
+  scale_fill_manual(values = pal_snz_nztcs_c) +
+  labs(title = "pal_snz_nztcs_c — NZ Threat Classification",
+       x = NULL, y = "Number of species") +
+  theme_minimal() +
+  theme(axis.text.x = element_text(angle = 15, hjust = 1))
+

+
+
+
+

Signed square-root scale transformation +

+

When a continuous variable spans a wide range of both positive and negative values, a standard linear scale compresses small values near zero. The signed_sqrt_trans() transformation stretches both tails symmetrically:

+
+set.seed(22)
+slopes_df <- tibble(
+  station = paste0("S", 1:20),
+  slope   = c(rnorm(10, mean = -2, sd = 0.5),
+              rnorm(10, mean =  8, sd = 3))
+)
+
+ggplot(slopes_df, aes(x = reorder(station, slope), y = slope,
+                      fill = slope > 0)) +
+  geom_col(show.legend = FALSE) +
+  scale_y_continuous(trans = signed_sqrt_trans()) +
+  scale_fill_manual(values = c("#0D94A3", "#AE4E51")) +
+  labs(title = "Signed square-root y-axis",
+       x = NULL, y = "Sen's slope (signed\u221a)") +
+  theme_minimal() +
+  theme(axis.text.x = element_text(angle = 45, hjust = 1))
+

+
+
+
+

Quick reference +

+
#> # A tibble: 17 × 3
+#>    Object           Colours Description                        
+#>    <chr>              <int> <chr>                              
+#>  1 pal_snz                9 Nominal — StatsNZ web              
+#>  2 pal_snz_alpha2         2 Year comparison — StatsNZ web      
+#>  3 pal_snz_trend2         2 Trend 2-level — StatsNZ web        
+#>  4 pal_snz_trend3         3 Trend 3-level — StatsNZ web        
+#>  5 pal_snz_trend5         5 Trend 5-level — StatsNZ web        
+#>  6 pal_snz_nztcs_c        4 NZ TCS categories — StatsNZ web    
+#>  7 pal_snz_nztcs_s        9 NZ TCS sub-categories — StatsNZ web
+#>  8 pal_ea19               9 Nominal — EA19 report              
+#>  9 pal_ea19_alpha2        2 Year comparison — EA19 report      
+#> 10 pal_ea19_trend2        2 Trend 2-level — EA19 report        
+#> 11 pal_ea19_trend3        3 Trend 3-level — EA19 report        
+#> 12 pal_ea19_trend5        5 Trend 5-level — EA19 report        
+#> 13 pal_ea19_nztcs_c       4 NZ TCS categories — EA19 report    
+#> 14 pal_point_set1         9 Nominal — maps/points              
+#> 15 pal_point_trend2       2 Trend 2-level — maps/points        
+#> 16 pal_point_trend3       3 Trend 3-level — maps/points        
+#> 17 pal_point_trend5       5 Trend 5-level — maps/points
+
+
+ + + +
+ + + +
+ +
+

+

Site built with pkgdown 2.2.0.

+
+ +
+
+ + + + + + + + diff --git a/docs/articles/palettes_files/accessible-code-block-0.0.1/empty-anchor.js b/docs/articles/palettes_files/accessible-code-block-0.0.1/empty-anchor.js new file mode 100644 index 0000000..ca349fd --- /dev/null +++ b/docs/articles/palettes_files/accessible-code-block-0.0.1/empty-anchor.js @@ -0,0 +1,15 @@ +// Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> +// v0.0.1 +// Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. + +document.addEventListener('DOMContentLoaded', function() { + const codeList = document.getElementsByClassName("sourceCode"); + for (var i = 0; i < codeList.length; i++) { + var linkList = codeList[i].getElementsByTagName('a'); + for (var j = 0; j < linkList.length; j++) { + if (linkList[j].innerHTML === "") { + linkList[j].setAttribute('aria-hidden', 'true'); + } + } + } +}); diff --git a/docs/articles/palettes_files/figure-html/alpha2-1.png b/docs/articles/palettes_files/figure-html/alpha2-1.png new file mode 100644 index 0000000..487881c Binary files /dev/null and b/docs/articles/palettes_files/figure-html/alpha2-1.png differ diff --git a/docs/articles/palettes_files/figure-html/nominal-1.png b/docs/articles/palettes_files/figure-html/nominal-1.png new file mode 100644 index 0000000..54c505e Binary files /dev/null and b/docs/articles/palettes_files/figure-html/nominal-1.png differ diff --git a/docs/articles/palettes_files/figure-html/nztcs-1.png b/docs/articles/palettes_files/figure-html/nztcs-1.png new file mode 100644 index 0000000..c4de892 Binary files /dev/null and b/docs/articles/palettes_files/figure-html/nztcs-1.png differ diff --git a/docs/articles/palettes_files/figure-html/show-palettes-1.png b/docs/articles/palettes_files/figure-html/show-palettes-1.png new file mode 100644 index 0000000..bd84847 Binary files /dev/null and b/docs/articles/palettes_files/figure-html/show-palettes-1.png differ diff --git a/docs/articles/palettes_files/figure-html/show-palettes-ea19-1.png b/docs/articles/palettes_files/figure-html/show-palettes-ea19-1.png new file mode 100644 index 0000000..967659d Binary files /dev/null and b/docs/articles/palettes_files/figure-html/show-palettes-ea19-1.png differ diff --git a/docs/articles/palettes_files/figure-html/show-palettes-point-1.png b/docs/articles/palettes_files/figure-html/show-palettes-point-1.png new file mode 100644 index 0000000..bf402f5 Binary files /dev/null and b/docs/articles/palettes_files/figure-html/show-palettes-point-1.png differ diff --git a/docs/articles/palettes_files/figure-html/signed-sqrt-1.png b/docs/articles/palettes_files/figure-html/signed-sqrt-1.png new file mode 100644 index 0000000..233f448 Binary files /dev/null and b/docs/articles/palettes_files/figure-html/signed-sqrt-1.png differ diff --git a/docs/articles/palettes_files/figure-html/trend2-1.png b/docs/articles/palettes_files/figure-html/trend2-1.png new file mode 100644 index 0000000..d907890 Binary files /dev/null and b/docs/articles/palettes_files/figure-html/trend2-1.png differ diff --git a/docs/articles/palettes_files/figure-html/trend5-1.png b/docs/articles/palettes_files/figure-html/trend5-1.png new file mode 100644 index 0000000..52a8c31 Binary files /dev/null and b/docs/articles/palettes_files/figure-html/trend5-1.png differ diff --git a/docs/authors.html b/docs/authors.html index 0bd94c5..f5872f9 100644 --- a/docs/authors.html +++ b/docs/authors.html @@ -1,66 +1,12 @@ - - - - - - - -Authors • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Authors and Citation • er.helpers - + - - - -
-
-
-
+
- @@ -138,22 +108,20 @@

Authors

-
- +
+ + - - - + diff --git a/docs/index.html b/docs/index.html index 38eb601..0fef3c7 100644 --- a/docs/index.html +++ b/docs/index.html @@ -6,21 +6,21 @@ Helper functions commonly used in Environmental Reporting at Stats NZ • er.helpers - + - + + +
-
- -
-

-Introduction

+
+ +
+

Introduction +

er.helpers is an R package that facilitates the analysis and reporting of environmental indicators.

We can group these helper functions into anomaly calculation, data aggregation, data acquisition, likelihood category estimation, precipitation indices, RShiny development, seasonality calculations, data summarisation and visualisation, and trend calculation.

    @@ -106,69 +115,92 @@

    Grids: A function to make grids from meshblock data, and standard hexagonal grids for use.

-
-

-Installation

-
# install.packages("remotes")
-remotes::install_github("StatisticsNZ/er.helpers", build_vignettes = TRUE)
+
+

Installation +

+
+# install.packages("remotes")
+remotes::install_github("StatisticsNZ/er.helpers", build_vignettes = TRUE)
-
-

-Documentation

+
+

Documentation +

Webpage URL:

-

https://statisticsnz.github.io/er.helpers/

+

https://statisticsnz.github.io/er.helpers/


Copyright and Licensing

The package is Crown copyright (c) 2020, Statistics New Zealand on behalf of the New Zealand Government, and is licensed under the MIT License.

-


Creative Commons License
This document is Crown copyright (c) 2020, Statistics New Zealand on behalf of the New Zealand Government, and is licensed under the Creative Commons Attribution 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.

+


Creative Commons License
This document is Crown copyright (c) 2020, Statistics New Zealand on behalf of the New Zealand Government, and is licensed under the Creative Commons Attribution 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.

-

Site built with pkgdown 1.5.0.

+

+

Site built with pkgdown 2.2.0.

- + + + diff --git a/docs/news/index.html b/docs/news/index.html index 71efe26..df1f578 100644 --- a/docs/news/index.html +++ b/docs/news/index.html @@ -1,66 +1,12 @@ - - - - - - - -Changelog • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Changelog • er.helpers - - + - -
-
- - -
-
+
-
-

-er.helpers 1.4.1

-
    -
  • Updated app templates.
  • -
-
-
-

-er.helpers 1.4.0

-
    -
  • reversed pal_snz_alpha2 and pal_ea19_alpha2.
  • -
-
-
-

-er.helpers 1.3.8

-
    -
  • Updated shiny templates.
  • -
-
-
-

-er.helpers 1.3.7

-
    -
  • minor tweak to shiny templates.
  • -
-
-
-

-er.helpers 1.3.6

-
    -
  • add shiny templates to er.helpers.
  • -
-
-
-

-er.helpers 1.3.5

-
    -
  • update gridify_mb_data fun.
  • -
-
-
-

-er.heleprs 1.3.4

-
    -
  • add nz sf object.
  • -
-
-
-

-er.helpers 1.3.3

-
    -
  • add gridify_mb_data functions, so that it can be installed.
  • -
-
-
-

-er.helpers 1.3.3

-
    -
  • remove simplevis and gridify_mb_data functions, so that it can be installed.
  • -
-
-
-

-er.helpers 1.3.2

-
    -
  • Updated read_from_datalake for versioning.
  • -
-
-
-

-er.helpers 1.3.1

-
    -
  • Updated get_metadata function.
  • -
-
-
-

-er.helpers 1.3.0

-
    -
  • Added add_unused_levels function to assist with fixing a plotly legend bug.
  • -
-
-
-

-er.helpers 1.2.9

-
    -
  • Added readr library to read_csv function in read_from_datalake.
  • -
-
-
-

-er.helpers 1.2.8

-
    -
  • Added nz_region sf object
  • -
-
-
-

-er.heleprs 1.2.7

-
    -
  • Removed _na_inf functions.
  • -
-
-
-

-er.helpers 1.2.6

-
    -
  • Updated read_csv_datalake to use readr::write_excel_csv, so that macrons are preserved.
  • -
-
-
-

-er.helpers 1.2.5

-
    -
  • Bug fix: updated ggplot functions per updates to simplevis.
  • +
    + +
    • Removed search_data_lake() function. Added separate round() function to overwrite base round as doesn’t behave how expected.
    +
    + +
    • Updated app templates.
    +
    + +
    • reversed pal_snz_alpha2 and pal_ea19_alpha2.
    +
    + +
    • Updated shiny templates.
    +
    + +
    • minor tweak to shiny templates.
    +
    + +
    • add shiny templates to er.helpers.
    +
    + +
    • update gridify_mb_data fun.
    +
    + +
    • add gridify_mb_data functions, so that it can be installed.
    +
    + +
    • remove simplevis and gridify_mb_data functions, so that it can be installed.
    +
    + +
    • Updated read_from_datalake for versioning.
    +
    + +
    • Updated get_metadata function.
    +
    + +
    • Added add_unused_levels function to assist with fixing a plotly legend bug.
    +
    + +
    • Added readr library to read_csv function in read_from_datalake.
    +
    + +
    • Added nz_region sf object
    +
    + +
    • Updated read_csv_datalake to use readr::write_excel_csv, so that macrons are preserved.
    +
    + +
    • Bug fix: updated ggplot functions per updates to simplevis.
    • New feature: added a4 dimensions.
    • -
    -
    -
    -

    -er.helpers 1.2.4

    -
      -
    • Bug fix: corrected ordering of y variable in ggplot hbar functions.
    • -
    -
    -
    -

    -er.helpers 1.2.3

    -
      -
    • New feature: added ggplot hbar functions that work with x_na_inf for APS data.
    • -
    -
    -
    -

    -er.helpers 1.2.2

    -
      -
    • New feature: added read_from_datalake, get_metadata and write_rds_datalake functions.
    • -
    -
    -
    -

    -er.helpers 1.2.1

    -
      -
    • Bug fix: ungrouped output from gridify_mb_data, so that an sf object is returned.
    • -
    -
    -
    -

    -er.helpers 1.2.0

    -
      -
    • New feature: updated NZTCS pals.
    • -
    -
    -
    -

    -er.helpers 1.1.9

    -
      -
    • New feature: added 2 new pals.
    • -
    -
    -
    -

    -er.helpers 1.1.8

    -
      -
    • New feature: expand gridify_mb_data function to support the gridifying of more than 1 linecode.
    • -
    -
    -
    -

    -er.helpers 1.1.7

    -
      -
    • New feature: add gridify_mb_data function to create a grid from meshblock data.
    • -
    -
    -
    -

    -er.helpers 1.1.6

    -
      -
    • Bug fix: fixed read_excel_datalake.
    • -
    -
    -
    -

    -er.helpers 1.1.5

    -
      -
    • New feature: add an NZ hexagonal grid sf object.
    • -
    -
    -
    -

    -er.helpers 1.1.4

    -
      -
    • New feature: added read_excel_datalake function.
    • -
    -
    -
    -

    -er.helpers 1.1.3

    -
      -
    • New feature: added the sankey_build_data function to support networkD3 sankey charts.
    • -
    -
    -
    -

    -er.helpers 1.1.2

    -
      -
    • Improvement: darkened the shade of grey in pal_point_trend3 and pal_point_trend5.
    • -
    -
    -
    -

    -er.helpers 1.1.1

    -
      -
    • Bug fix: aggregation functions now return NA as expected when all values are missing. Even if it passes other requirements.
    • -
    -
    -
    -

    -er.helpers 1.1.0

    -
      -
    • New feature: Added all palettes from simplevis, plus a signed square root trans function scales.
    • +
    +
    + +
    • Bug fix: corrected ordering of y variable in ggplot hbar functions.
    +
    + +
    • New feature: added ggplot hbar functions that work with x_na_inf for APS data.
    +
    + +
    • New feature: added read_from_datalake, get_metadata and write_rds_datalake functions.
    +
    + +
    • Bug fix: ungrouped output from gridify_mb_data, so that an sf object is returned.
    +
    + +
    • New feature: updated NZTCS pals.
    +
    + +
    • New feature: added 2 new pals.
    +
    + +
    • New feature: expand gridify_mb_data function to support the gridifying of more than 1 linecode.
    +
    + +
    • New feature: add gridify_mb_data function to create a grid from meshblock data.
    +
    + +
    • Bug fix: fixed read_excel_datalake.
    +
    + +
    • New feature: add an NZ hexagonal grid sf object.
    +
    + +
    • New feature: added read_excel_datalake function.
    +
    + +
    • New feature: added the sankey_build_data function to support networkD3 sankey charts.
    +
    + +
    • Improvement: darkened the shade of grey in pal_point_trend3 and pal_point_trend5.
    +
    + +
    • Bug fix: aggregation functions now return NA as expected when all values are missing. Even if it passes other requirements.
    +
    + +
    • New feature: Added all palettes from simplevis, plus a signed square root trans function scales.
    • New feature: Added a signed square root transformation function scale.
    • -
    -
    -
    -

    -er.helpers 1.0.1

    -
      -
    • Improvement: Order of season levels changed such that the annual category goes before the other seasons.
    • -
    -
    -
    -

    -er.helpers 1.0.0

    -
      -
    • New feature: Added linear_model() as another option for trend estimation
    • +
    +
    + +
    • Improvement: Order of season levels changed such that the annual category goes before the other seasons.
    +
    + +
    • New feature: Added linear_model() as another option for trend estimation
    • Breaking changes: The slope calculated using sen_slope() is now returned in a data frame with a column called “slope” instead of “sen_slope”. This is for consistency with the slope calculated using linear_model()
    • -
    -
    -
    -

    -er.helpers 0.12.0

    -
    +
    + + -
    -
    -

    -er.helpers 0.11.3

    -
      -
    • Bug fix: Fixed bug in precipitation functions that prevented them from being calculated properly.
    • -
    • Improvement: search_data_lake() has been deprecated in favour of search_datalake() to be consistent with naming
    • +
    +
    + +
    • Bug fix: Fixed bug in precipitation functions that prevented them from being calculated properly.
    • +
    • Improvement: search_data_lake() has been deprecated in favour of search_datalake() to be consistent with naming
    • Improvement: search_datalake() now uses AND instead of OR when filtering keys.
    • Improvement: search_datalake() now returns a tibble
    • Improvement: Using MIT License
    • -
    -
    -
    -

    -er.helpers 0.11.2

    -
      -
    • Bug fix: Fix documentation warning generated when installing the package.
    • +
    +
    + + -
    -
    -

    -er.helpers 0.11.1

    -
      -
    • Improvement: We use exclusion criteria on missing values to calculate anoamliesS
    • +
    +
    + +
    • Improvement: We use exclusion criteria on missing values to calculate anoamliesS
    • Bug fix: When aggregation criteria were equal to 1 it correctly assume they are given as proportions
    • Improvement: Aggregation with criteria functions now have default values for maximum number of missing values and maximum number of consecutive missing values.
    • -
    -
    -
    -

    -er.helpers 0.11.0

    -
      -
    • New feature: A set of functions (aggragate_with_criteria()) to calculate aggregations using criteria for missing data.
    • +
    +
    + +
    • New feature: A set of functions (aggragate_with_criteria()) to calculate aggregations using criteria for missing data.
    • New feature: A function to print the range of a numeric vector in a “pretty way”.
    • -
    -
    -
    -

    -er.helpers 0.10.6

    -
      -
    • Bug fix: When searching for a key in the data lake it looks for it in all the keys, not the first 1000
    • -
    -
    -
    -

    -er.helpers 0.10.5

    -
      -
    • Bug fix: Return a p-value of 0.5 when all values are tied in Mann-Kendall test
    • -
    -
    -
    -

    -er.helpers 0.10.4

    -
      -
    • Bug fix: Corrected spelling of Sen’s slope
    • -
    -
    -
    -

    -er.helpers 0.10.3

    -
      -
    • Bug fix: Trend functions sen_slope() and mann_kendall() return their method regardless of wether the trend estimation is successful or not.
    • -
    -
    -
    -

    -er.helpers 0.10.2

    - -
    -
    -

    -er.helpers 0.10.1

    - -
    -
    -

    -er.helpers 0.10.0

    -
      -
    • New feature: Added order_season_levels() to automatically order season as a factor for pretty plotting and data standarisation
    • +
    +
    + +
    • Bug fix: When searching for a key in the data lake it looks for it in all the keys, not the first 1000
    +
    + +
    • Bug fix: Return a p-value of 0.5 when all values are tied in Mann-Kendall test
    +
    + +
    • Bug fix: Corrected spelling of Sen’s slope
    +
    + +
    • Bug fix: Trend functions sen_slope() and mann_kendall() return their method regardless of wether the trend estimation is successful or not.
    +
    + +
    +
    + +
    +
    + + -
    -
    -

    -er.helpers 0.9.1

    -
      -
    • Bug fix: er.helpers:::likelihood_terms internal data was not being saved properly.
    • -
    -
    -
    -

    -er.helpers 0.9.0

    -
      -
    • New feature: Added simplifY_likelihood_levels() which collapses levels in likelihood category factors
    • +
    +
    + +
    • Bug fix: er.helpers:::likelihood_terms internal data was not being saved properly.
    +
    + +
    • New feature: Added simplifY_likelihood_levels() which collapses levels in likelihood category factors
    • New feature: Added round_preserve_sum() which rounds a set of number while maintaining the total. Used, for example, so that rounded percentages still add to 100.
    • -
    -
    -
    -

    -er.helpers 0.8.0

    -
      -
    • New feature:Added get_likelihood_category() which given a probabiliy p it returns the term used to describe the category this probability belongs to. It also ensures the levels of the output are ordered appropietly.
    • +
    +
    + +
    • New feature:Added get_likelihood_category() which given a probabiliy p it returns the term used to describe the category this probability belongs to. It also ensures the levels of the output are ordered appropietly.
    • New feature:Added order_likelihood_levels() which orders the levels of a likelihood category factor
    • New feature:Added the datasets ipcc_likelihood_scale and statsnz_likelihood_scale which contain the Intergovernmental Panel on Climate Change (IPCC) and the Stats NZ likelihood scales respectively
    • Improvement: Started using automatic package testing before things get out of hand
    • -
    -
    -
    -

    -er.helpers 0.7.0

    -
      -
    • New feature: Added functions to calculate rainfall intensity metrics
    • -
    -
    -
    -

    -er.helpers 0.6.0

    -
      -
    • New feature: Added function to calculate annual anomalies
    • -
    -
    -
    -

    -er.helpers 0.5.1

    -
      -
    • Improvement: Trend functions warn when number of values is small or when all values are tied in the data
    • -
    -
    -
    -

    -er.helpers 0.5.0

    -
      -
    • New feature: Added function search for object keys in a data lake
    • -
    -
    -
    -

    -er.helpers 0.4.1

    -
      -
    • Bug fix: Reading data frames with a rowname X1 column doesn’t fail anymore
    • -
    -
    -
    -

    -er.helpers 0.4.0

    -
      -
    • New feature: Added function to calculate trends using Sen’s slope and Mann-Kendall test
    • +
    +
    + +
    • New feature: Added functions to calculate rainfall intensity metrics
    +
    + +
    • New feature: Added function to calculate annual anomalies
    +
    + +
    • Improvement: Trend functions warn when number of values is small or when all values are tied in the data
    +
    + +
    • New feature: Added function search for object keys in a data lake
    +
    + +
    • Bug fix: Reading data frames with a rowname X1 column doesn’t fail anymore
    +
    + +
    • New feature: Added function to calculate trends using Sen’s slope and Mann-Kendall test
    • Improvement: When downloading a csv from the data lake remove the X1 column
    • -
    -
    -
    -

    -er.helpers 0.3.0

    -
      -
    • New feature: Added function to calculate the season of a date-time
    • -
    -
    -
    -

    -er.helpers 0.2.1

    -
      -
    • Improvement: Added contribution section to README
    • +
    +
    + +
    • New feature: Added function to calculate the season of a date-time
    +
    + +
    • Improvement: Added contribution section to README
    • Improvement: Improved documentation
    • Improvement: Added CHANGELOG
    • -
    -
    -
    -

    -er.helpers 0.2.0

    -
      -
    • New feature: Retrieve any version of a csv in the data lake
    • +
    +
    + +
    • New feature: Retrieve any version of a csv in the data lake
    • New feature: Check all the versions of an object in the data lake
    • Improvement: Better documentation
    • Improvement: Fix notes and warnings in package testing
    • -
    -
    -
    -

    -er.helpers 0.1.0

    -
      -
    • Functions to read and write files from data lake
    • +
    +
    + +
    • Functions to read and write files from data lake
    • Function to launch shiny app in the background
    • -
    -
    +
+
-
- +
+ + - - - + diff --git a/docs/pkgdown.css b/docs/pkgdown.css index c01e592..80ea5b8 100644 --- a/docs/pkgdown.css +++ b/docs/pkgdown.css @@ -56,8 +56,10 @@ img.icon { float: right; } -img { +/* Ensure in-page images don't run outside their container */ +.contents img { max-width: 100%; + height: auto; } /* Fix bug in bootstrap (only seen in firefox) */ @@ -78,11 +80,10 @@ dd { /* Section anchors ---------------------------------*/ a.anchor { - margin-left: -30px; - display:inline-block; - width: 30px; - height: 30px; - visibility: hidden; + display: none; + margin-left: 5px; + width: 20px; + height: 20px; background-image: url(./link.svg); background-repeat: no-repeat; @@ -90,17 +91,15 @@ a.anchor { background-position: center center; } -.hasAnchor:hover a.anchor { - visibility: visible; -} - -@media (max-width: 767px) { - .hasAnchor:hover a.anchor { - visibility: hidden; - } +h1:hover .anchor, +h2:hover .anchor, +h3:hover .anchor, +h4:hover .anchor, +h5:hover .anchor, +h6:hover .anchor { + display: inline-block; } - /* Fixes for fixed navbar --------------------------*/ .contents h1, .contents h2, .contents h3, .contents h4 { @@ -244,14 +243,14 @@ nav[data-toggle='toc'] .nav .nav > .active:focus > a { .ref-index th {font-weight: normal;} -.ref-index td {vertical-align: top;} +.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;} +.ref-arguments th, .ref-arguments td {vertical-align: top; min-width: 100px} .ref-arguments .name {width: 20%;} .ref-arguments .desc {width: 80%;} @@ -264,31 +263,26 @@ table { /* Syntax highlighting ---------------------------------------------------- */ -pre { - word-wrap: normal; - word-break: normal; - border: 1px solid #eee; -} - -pre, code { +pre, code, pre code { background-color: #f8f8f8; color: #333; } +pre, pre code { + white-space: pre-wrap; + word-break: break-all; + overflow-wrap: break-word; +} -pre code { - overflow: auto; - word-wrap: normal; - white-space: pre; +pre { + border: 1px solid #eee; } -pre .img { +pre .img, pre .r-plt { margin: 5px 0; } -pre .img img { +pre .img img, pre .r-plt img { background-color: #fff; - display: block; - height: auto; } code a, pre a { @@ -305,9 +299,8 @@ a.sourceLine:hover { .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;} +.error {font-weight: bolder;} +.warning {font-weight: bolder;} /* Clipboard --------------------------*/ @@ -365,3 +358,27 @@ mark { content: ""; } } + +/* Section anchors --------------------------------- + Added in pandoc 2.11: https://github.com/jgm/pandoc-templates/commit/9904bf71 +*/ + +div.csl-bib-body { } +div.csl-entry { + clear: both; +} +.hanging-indent div.csl-entry { + margin-left:2em; + text-indent:-2em; +} +div.csl-left-margin { + min-width:2em; + float:left; +} +div.csl-right-inline { + margin-left:2em; + padding-left:1em; +} +div.csl-indent { + margin-left: 2em; +} diff --git a/docs/pkgdown.js b/docs/pkgdown.js index 7e7048f..6f0eee4 100644 --- a/docs/pkgdown.js +++ b/docs/pkgdown.js @@ -80,7 +80,7 @@ $(document).ready(function() { var copyButton = ""; - $(".examples, div.sourceCode").addClass("hasCopyButton"); + $("div.sourceCode").addClass("hasCopyButton"); // Insert copy buttons: $(copyButton).prependTo(".hasCopyButton"); @@ -91,7 +91,7 @@ // Initialize clipboard: var clipboardBtnCopies = new ClipboardJS('[data-clipboard-copy]', { text: function(trigger) { - return trigger.parentNode.textContent; + return trigger.parentNode.textContent.replace(/\n#>[^\n]*/g, ""); } }); diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml index e109665..73d3cca 100644 --- a/docs/pkgdown.yml +++ b/docs/pkgdown.yml @@ -1,6 +1,7 @@ -pandoc: 2.3.1 -pkgdown: 1.5.0 +pandoc: 2.9.2.1 +pkgdown: 2.2.0 pkgdown_sha: ~ -articles: [] -last_built: 2022-02-24T02:13Z - +articles: + anomaly-and-aggregation: anomaly-and-aggregation.html + palettes: palettes.html +last_built: 2026-04-22T10:31Z diff --git a/docs/reference/a4_height_mm.html b/docs/reference/a4_height_mm.html index d2fb850..a97704d 100644 --- a/docs/reference/a4_height_mm.html +++ b/docs/reference/a4_height_mm.html @@ -1,67 +1,12 @@ - - - - - - - -A4 useable height. — a4_height_mm • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -A4 useable height. — a4_height_mm • er.helpers - - + - -
-
- - -
-
+
@@ -120,41 +65,40 @@

A4 useable height.

The height of useable space within an a4 sheet.

-
a4_height_mm
- - -

Format

+
+
a4_height_mm
+
+
+

Format

An object of class numeric of length 1.

-

Value

- +
+
+

Value

A numeric value.

+
+
-
- +
+ + - - - + diff --git a/docs/reference/a4_width_mm.html b/docs/reference/a4_width_mm.html index 46faa1c..fd179ac 100644 --- a/docs/reference/a4_width_mm.html +++ b/docs/reference/a4_width_mm.html @@ -1,67 +1,12 @@ - - - - - - - -A4 useable width. — a4_width_mm • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -A4 useable width. — a4_width_mm • er.helpers - - + - -
-
- - -
-
+
@@ -120,41 +65,40 @@

A4 useable width.

The width of useable space within an a4 sheet.

-
a4_width_mm
- - -

Format

+
+
a4_width_mm
+
+
+

Format

An object of class numeric of length 1.

-

Value

- +
+
+

Value

A numeric value.

+
+
-
- +
+ + - - - + diff --git a/docs/reference/add_unused_levels.html b/docs/reference/add_unused_levels.html index 353170e..be9f21d 100644 --- a/docs/reference/add_unused_levels.html +++ b/docs/reference/add_unused_levels.html @@ -1,67 +1,12 @@ - - - - - - - -Add a row for each unused factor level to ensure plotly displays all levels in the legend. — add_unused_levels • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Add a row for each unused factor level to ensure plotly displays all levels in the legend. — add_unused_levels • er.helpers - - + - -
-
- - -
-
+
@@ -120,50 +65,48 @@

Add a row for each unused factor level to ensure plotly displays all levels

Add a row for each unused factor level to ensure plotly displays all levels in the legend.

-
add_unused_levels(data, var)
+
+
add_unused_levels(data, var)
+
+ +
+

Arguments

+ + +
data
+

A tibble, dataframe or sf object. Required input.

-

Arguments

- - - - - - - - - - -
data

A tibble, dataframe or sf object. Required input.

var

A variable of class factor.

-

Value

+
var
+

A variable of class factor.

+
+
+

Value

A tibble, dataframe or sf object. Required input.

+
+
-
- +
+ + - - - + diff --git a/docs/reference/aggregate_with_criteria.html b/docs/reference/aggregate_with_criteria.html index 80da241..8b9d733 100644 --- a/docs/reference/aggregate_with_criteria.html +++ b/docs/reference/aggregate_with_criteria.html @@ -1,71 +1,16 @@ - - - - - - - -Calculate an aggregated value taking into account certain exclusion cirteria — aggregate_with_criteria • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Calculate an aggregated value taking into account certain exclusion cirteria — aggregate_with_criteria • er.helpers - - - - - - - - - - - + - -
-
- - -
-
+
@@ -128,79 +73,76 @@

Calculate an aggregated value taking into account certain exclusion cirteria monthly value by specifing these thresholds

-
aggregate_with_criteria(x, max_missing = 0, max_consecutive = 0, fun = mean)
+    
+
aggregate_with_criteria(x, max_missing = 0, max_consecutive = 0, fun = mean)
+
+mean_with_criteria(x, max_missing = 0, max_consecutive = 0)
+
+min_with_criteria(x, max_missing = 0, max_consecutive = 0)
+
+max_with_criteria(x, max_missing = 0, max_consecutive = 0)
+
+sum_with_criteria(x, max_missing = 0, max_consecutive = 0)
+
+ +
+

Arguments

-mean_with_criteria(x, max_missing = 0, max_consecutive = 0) -min_with_criteria(x, max_missing = 0, max_consecutive = 0) +
x
+

Numeric values

-max_with_criteria(x, max_missing = 0, max_consecutive = 0) -sum_with_criteria(x, max_missing = 0, max_consecutive = 0)
+
max_missing
+

Numeric. Maximum number or proportion of missing values in +x. If any number of missing values is allowed set to 1 (100%) or NULL.

-

Arguments

- - - - - - - - - - - - - - - - - - -
x

Numeric values

max_missing

Numeric. Maximum number or proportion of missing values in -x. If any number of missing values is allowed set to 1 (100%) or NULL.

max_consecutive

Numeric. Maximum number or proportion of consecutive + +

max_consecutive
+

Numeric. Maximum number or proportion of consecutive missing values in x. If any number of missing values is allowed set to 1 -(100%) or NULL.

fun

Function. Function used to aggregate values usually, mean, min, -max, or sum

+(100%) or NULL.

+ -

Value

+
fun
+

Function. Function used to aggregate values usually, mean, min, +max, or sum

+
+
+

Value

NA if the criteria arent meet the mean of x otherwise

-

Functions

+
+
+

Functions

- -
    -
  • mean_with_criteria: Mean with criteria

  • -
  • min_with_criteria: Minimum with criteria

  • -
  • max_with_criteria: Maximum with criteria

  • -
  • sum_with_criteria: Sum with criteria

  • -
+
  • mean_with_criteria(): Mean with criteria

  • +
  • min_with_criteria(): Minimum with criteria

  • +
  • max_with_criteria(): Maximum with criteria

  • +
  • sum_with_criteria(): Sum with criteria

  • +
+
-
- +
+ + - - - + diff --git a/docs/reference/all_columns_to_snakecase.html b/docs/reference/all_columns_to_snakecase.html index 8539de9..011f3a0 100644 --- a/docs/reference/all_columns_to_snakecase.html +++ b/docs/reference/all_columns_to_snakecase.html @@ -1,69 +1,14 @@ - - - - - - - -Make all columns of a data frame snakecase. — all_columns_to_snakecase • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Make all columns of a data frame snakecase. — all_columns_to_snakecase • er.helpers - - - - - - - - - - - + - -
-
- - -
-
+

This function modifies the input data frame such that the names of every column are in snake case. Internally, it uses the -to_snake_case.

+to_snake_case.

+
+ +
+
all_columns_to_snakecase(x)
-
all_columns_to_snakecase(x)
- -

Arguments

- - - - - - -
x

The input data frame.

- - -

Examples

-
x <- data.frame(notSnakecase = 1:10) -all_columns_to_snakecase(x)
#> not_snakecase -#> 1 1 -#> 2 2 -#> 3 3 -#> 4 4 -#> 5 5 -#> 6 6 -#> 7 7 -#> 8 8 -#> 9 9 -#> 10 10
+
+

Arguments

+ + +
x
+

The input data frame.

+ +
+ +
+

Examples

+
x <- data.frame(notSnakecase = 1:10)
+all_columns_to_snakecase(x)
+#>    not_snakecase
+#> 1              1
+#> 2              2
+#> 3              3
+#> 4              4
+#> 5              5
+#> 6              6
+#> 7              7
+#> 8              8
+#> 9              9
+#> 10            10
+
+
+
-
- +
+ + - - - + diff --git a/docs/reference/are_all_the_same.html b/docs/reference/are_all_the_same.html index 11fa4a7..d3cd0bd 100644 --- a/docs/reference/are_all_the_same.html +++ b/docs/reference/are_all_the_same.html @@ -1,67 +1,12 @@ - - - - - - - -Are all values on x the same? — are_all_the_same • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Are all values on x the same? — are_all_the_same • er.helpers - - + - -
-
- - -
-
+
@@ -120,46 +65,44 @@

Are all values on x the same?

Are all values on x the same?

-
are_all_the_same(x)
+
+
are_all_the_same(x)
+
+ +
+

Arguments

-

Arguments

- - - - - - -
x

the values

-

Value

+
x
+

the values

+
+
+

Value

TRUE if all values of x are the same, FALSE otherwise

+
+
-
- +
+ + - - - + diff --git a/docs/reference/calc_annual_anomaly.html b/docs/reference/calc_annual_anomaly.html index ddbeaab..c909dbd 100644 --- a/docs/reference/calc_annual_anomaly.html +++ b/docs/reference/calc_annual_anomaly.html @@ -1,67 +1,12 @@ - - - - - - - -Calculate annual anomaly — calc_annual_anomaly • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Calculate annual anomaly — calc_annual_anomaly • er.helpers - - + - -
-
- - -
-
+
@@ -120,97 +65,99 @@

Calculate annual anomaly

Calculate annual anomaly

-
calc_annual_anomaly(
-  x,
-  year,
-  period = NULL,
-  max_missing = 0.2,
-  max_consecutive = NULL
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
x

metric. A vector

year

the year in which the metric was observed. A vector of the same -length as x

period

the reference period of the anomaly. A vector of length 2 or +

+
calc_annual_anomaly(
+  x,
+  year,
+  period = NULL,
+  max_missing = 0.2,
+  max_consecutive = NULL
+)
+
+ +
+

Arguments

+ + +
x
+

metric. A vector

+ + +
year
+

the year in which the metric was observed. A vector of the same +length as x

+ + +
period
+

the reference period of the anomaly. A vector of length 2 or NULL. If a vector, the first element indicates the beginning of the reference period and the second the end of the reference period. If NULL -(the default) the reference period goes from the first to the last year.

max_missing

Numeric. Maximum number or proportion of missing values in -x. If any number of missing values is allowed set to 1 (100%) or NULL.

max_consecutive

Numeric. Maximum number or proportion of consecutive -missing values in x. If any number of missing values is allowed set to 1 -(100%) or NULL.

+(the default) the reference period goes from the first to the last year.

+ -

Value

+
max_missing
+

Numeric. Maximum number or proportion of missing values in +x. If any number of missing values is allowed set to 1 (100%) or NULL.

+ + +
max_consecutive
+

Numeric. Maximum number or proportion of consecutive +missing values in x. If any number of missing values is allowed set to 1 +(100%) or NULL.

+
+
+

Value

a vector with the anomaly of x

+
-

Examples

-
-temperature_frame <- tibble::tibble(temperature = runif(100, 10, 20), - year = 1901:2000) -reference_period <- c(1961, 1990) -temperature_frame %>% -dplyr::mutate(anomaly = calc_annual_anomaly(temperature, - year, - reference_period))
#> # A tibble: 100 × 3 -#> temperature year anomaly -#> <dbl> <int> <dbl> -#> 1 10.8 1901 -3.67 -#> 2 18.3 1902 3.87 -#> 3 16.0 1903 1.53 -#> 4 11.6 1904 -2.91 -#> 5 10.1 1905 -4.40 -#> 6 14.7 1906 0.187 -#> 7 15.0 1907 0.501 -#> 8 12.9 1908 -1.58 -#> 9 17.3 1909 2.85 -#> 10 17.7 1910 3.25 -#> # … with 90 more rows
+
+

Examples

+

+temperature_frame <- tibble::tibble(temperature = runif(100, 10, 20),
+                                    year = 1901:2000)
+reference_period <- c(1961, 1990)
+temperature_frame %>%
+dplyr::mutate(anomaly = calc_annual_anomaly(temperature,
+                                           year,
+                                           reference_period))
+#> # A tibble: 100 × 3
+#>    temperature  year anomaly
+#>          <dbl> <int>   <dbl>
+#>  1        10.1  1901 -4.57  
+#>  2        14.7  1902  0.0181
+#>  3        15.0  1903  0.332 
+#>  4        12.9  1904 -1.75  
+#>  5        17.3  1905  2.68  
+#>  6        17.7  1906  3.08  
+#>  7        18.7  1907  4.10  
+#>  8        11.7  1908 -2.90  
+#>  9        10.3  1909 -4.30  
+#> 10        13.2  1910 -1.44  
+#> # ℹ 90 more rows
+
+
+
-
+ + - - - + diff --git a/docs/reference/check_aws_access.html b/docs/reference/check_aws_access.html index 5c59207..cdb07b7 100644 --- a/docs/reference/check_aws_access.html +++ b/docs/reference/check_aws_access.html @@ -1,70 +1,13 @@ - - - - - - - -Check if aws credentials have been configured and attempt default -configuration otherwise — check_aws_access • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Check if aws credentials have been configured and attempt default configuration otherwise — check_aws_access • er.helpers - + - - -
-
- - -
-
+
@@ -125,35 +67,32 @@

Check if aws credentials have been configured and attempt default configuration otherwise

-
check_aws_access()
- +
+
check_aws_access()
+
+
- + + - - - + diff --git a/docs/reference/er.helpers-deprecated.html b/docs/reference/er.helpers-deprecated.html index 062d299..a03a9b9 100644 --- a/docs/reference/er.helpers-deprecated.html +++ b/docs/reference/er.helpers-deprecated.html @@ -1,70 +1,15 @@ - - - - - - - -Deprecated functions in package <span class="pkg">er.helpers</span>. — er.helpers-deprecated • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -er.helpers. — er.helpers-deprecated" /> -Deprecated functions in package er.helpers. — er.helpers-deprecated • er.helpers + - - - -
-
- - -
-
+
@@ -126,54 +71,46 @@

Deprecated functions in package er.helpers.

available at help("-deprecated").

-
get_reference_rainfall(rainfall, year, reference_period, percentile)
-
-rainfall_above_reference(rainfall, reference_rainfall)
-
-search_data_lake(...)
- - -

get_reference_rainfall

- - +
+
get_reference_rainfall(rainfall, year, reference_period, percentile)
+
+rainfall_above_reference(rainfall, reference_rainfall)
+
-

For get_reference_rainfall, use get_reference_precipitation.

-

rainfall_above_reference

+
+

get_reference_rainfall

- -

For rainfall_above_reference, use precipitation_above_reference.

-

search_data_lake

+

For get_reference_rainfall, use get_reference_precipitation.

+
+
+

rainfall_above_reference

- -

For search_data_lake, use search_datalake.

+

For rainfall_above_reference, use precipitation_above_reference.

+
+
- + + - - - + diff --git a/docs/reference/get_bucket_version_df.html b/docs/reference/get_bucket_version_df.html index 814eec3..3b9c6b8 100644 --- a/docs/reference/get_bucket_version_df.html +++ b/docs/reference/get_bucket_version_df.html @@ -1,71 +1,16 @@ - - - - - - - -List bucket contents with versions — get_bucket_version_df • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -List bucket contents with versions — get_bucket_version_df • er.helpers - - - - - - - - - - - + - -
-
- - -
-
+
@@ -128,53 +73,55 @@

List bucket contents with versions

retrieve the metadata for all versions

-
get_bucket_version_df(bucket_name = mfe_datalake_bucket)
+
+
get_bucket_version_df(bucket_name, key_marker = "", prefix = "")
+
-

Arguments

- - - - - - -
bucket_name

Name of the bucket to connect. By default, it uses the -Ministry for the Environment data lake for environmental reporting -"mfedlkinput".

+
+

Arguments

-

Value

+
bucket_name
+

Name of the bucket to connect. By default, it uses the +Ministry for the Environment data lake for environmental reporting +"mfedlkinput".

+ +
+
+

Value

A data frame with metadata about all of the versions of objects in a bucket.

+
-

Examples

-
if (FALSE) { -get_bucket_version_df() -}
+
+

Examples

+
if (FALSE) { # \dontrun{
+get_bucket_version_df()
+} # }
+
+
+
+
- + + - - - + diff --git a/docs/reference/get_likelihood_category.html b/docs/reference/get_likelihood_category.html index 53fa245..25e1947 100644 --- a/docs/reference/get_likelihood_category.html +++ b/docs/reference/get_likelihood_category.html @@ -1,69 +1,14 @@ - - - - - - - -Get likelihood category for a p-value — get_likelihood_category • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Get likelihood category for a p-value — get_likelihood_category • er.helpers - - - - - - - - - - - + - -
-
- - -
-
+
@@ -124,29 +69,31 @@

Get likelihood category for a p-value

appropietly.

-
get_likelihood_category(
-  p,
-  scale = c("statsnz", "ipcc"),
-  term_type = c("worsening-improving", "improving-worsening", "increasing-decreasing",
-    "decreasing-increasing", "likely-unlikely"),
-  p_is = c("probability", "percentage")
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
p

the probability (or percentage) used to caclulate the category

scale

whether to base the categories using the Statistics New Zealand -likelihood scale ("statsnz") or the IPCC scale ("ipcc")

term_type

when scale = "statsnz" it allows to modify the terms +

+
get_likelihood_category(
+  p,
+  scale = c("statsnz", "ipcc"),
+  term_type = c("worsening-improving", "improving-worsening", "increasing-decreasing",
+    "decreasing-increasing", "likely-unlikely"),
+  p_is = c("probability", "percentage")
+)
+
+ +
+

Arguments

+ + +
p
+

the probability (or percentage) used to caclulate the category

+ + +
scale
+

whether to base the categories using the Statistics New Zealand +likelihood scale ("statsnz") or the IPCC scale ("ipcc")

+ + +
term_type
+

when scale = "statsnz" it allows to modify the terms depending on what the probability p indicates. term_type = "worsening-improving" indicates that a large p corresponds to a worsening trend; this is the default. term_type = @@ -154,88 +101,100 @@

Arg improving trend. term_type = "increasing-decreasing" indicates that the output should range from "Very likely increasing" to "Very likely decreasing". term_type = "likely-unlikely" indicates that the output -should range from "Very likely" to "Very unlikely".

p_is

whether p is a probability (from 0 to 1) or a percentage -(from 0 to 100)

+should range from "Very likely" to "Very unlikely".

-

Value

-

a character

-

Details

+
p_is
+

whether p is a probability (from 0 to 1) or a percentage +(from 0 to 100)

-

This function uses the data contained in the statsnz_likelihood_scale -and ipcc_likelihood_scale tables to determine the category of a given +

+
+

Value

+

a character

+
+
+

Details

+

This function uses the data contained in the statsnz_likelihood_scale +and ipcc_likelihood_scale tables to determine the category of a given probability (usually a p-value). It uses -order_likelihood_levels to ensure that levels of the output are +order_likelihood_levels to ensure that levels of the output are ordered correctly.

-

See also

- -

Other likelihood functions: -order_likelihood_levels(), -simplify_likelihood_levels()

- -

Examples

-
p <- seq(0, 1, length.out = 11) - -# In most water quality metrics an increasing trend (large p) corresponds to -# a worsening trend -get_likelihood_category(p, term_type = "worsening-improving") %>% - order_likelihood_levels()
#> [1] Very likely improving Likely improving Likely improving -#> [4] Likely improving Indeterminate Indeterminate -#> [7] Indeterminate Likely worsening Likely worsening -#> [10] Likely worsening Very likely worsening -#> 5 Levels: Very likely improving Likely improving ... Very likely worsening
-# In climate metrics we usually prefer an increasing-decreasing scale -get_likelihood_category(p, term_type = "increasing-decreasing") %>% - order_likelihood_levels()
#> [1] Very likely increasing Likely increasing Likely increasing -#> [4] Likely increasing Indeterminate Indeterminate -#> [7] Indeterminate Likely decreasing Likely decreasing -#> [10] Likely decreasing Very likely decreasing -#> 5 Levels: Very likely increasing Likely increasing ... Very likely decreasing
-# Also works when p is a percentages -get_likelihood_category(p*100, p_is = "percentage") %>% - order_likelihood_levels()
#> [1] Very likely improving Likely improving Likely improving -#> [4] Likely improving Indeterminate Indeterminate -#> [7] Indeterminate Likely worsening Likely worsening -#> [10] Likely worsening Very likely worsening -#> 5 Levels: Very likely improving Likely improving ... Very likely worsening
-# We can also get terms used by ipcc if desired -get_likelihood_category(p, scale = "ipcc") %>% - order_likelihood_levels()
#> [1] Exceptionally unlikely Unlikely Unlikely -#> [4] Unlikely About as likely as not About as likely as not -#> [7] About as likely as not Likely Likely -#> [10] Likely Virtually certain -#> 9 Levels: Virtually certain Extremely likely Very likely ... Exceptionally unlikely
+
+
+

See also

+ +
+ +
+

Examples

+
p <- seq(0, 1, length.out = 11)
+
+# In most water quality metrics an increasing trend (large p) corresponds to
+# a worsening trend
+get_likelihood_category(p, term_type = "worsening-improving") %>%
+  order_likelihood_levels()
+#> Warning: `lift_dv()` was deprecated in purrr 1.0.0.
+#>  The deprecated feature was likely used in the er.helpers package.
+#>   Please report the issue at
+#>   <https://github.com/statisticsNZ/er.helpers/issues>.
+#>  [1] Very likely improving Likely improving      Likely improving     
+#>  [4] Likely improving      Indeterminate         Indeterminate        
+#>  [7] Indeterminate         Likely worsening      Likely worsening     
+#> [10] Likely worsening      Very likely worsening
+#> 5 Levels: Very likely improving Likely improving ... Very likely worsening
+
+# In climate metrics we usually prefer an increasing-decreasing scale
+get_likelihood_category(p, term_type = "increasing-decreasing") %>%
+  order_likelihood_levels()
+#>  [1] Very likely increasing Likely increasing      Likely increasing     
+#>  [4] Likely increasing      Indeterminate          Indeterminate         
+#>  [7] Indeterminate          Likely decreasing      Likely decreasing     
+#> [10] Likely decreasing      Very likely decreasing
+#> 5 Levels: Very likely increasing Likely increasing ... Very likely decreasing
+
+# Also works when p is a percentages
+get_likelihood_category(p*100, p_is = "percentage") %>%
+  order_likelihood_levels()
+#>  [1] Very likely improving Likely improving      Likely improving     
+#>  [4] Likely improving      Indeterminate         Indeterminate        
+#>  [7] Indeterminate         Likely worsening      Likely worsening     
+#> [10] Likely worsening      Very likely worsening
+#> 5 Levels: Very likely improving Likely improving ... Very likely worsening
+
+# We can also get terms used by ipcc if desired
+get_likelihood_category(p, scale = "ipcc") %>%
+  order_likelihood_levels()
+#>  [1] Exceptionally unlikely Unlikely               Unlikely              
+#>  [4] Unlikely               About as likely as not About as likely as not
+#>  [7] About as likely as not Likely                 Likely                
+#> [10] Likely                 Virtually certain     
+#> 9 Levels: Virtually certain Extremely likely Very likely ... Exceptionally unlikely
+
+
+
- + + - - - + diff --git a/docs/reference/get_likelihood_terms.html b/docs/reference/get_likelihood_terms.html index 1c30226..2a2590e 100644 --- a/docs/reference/get_likelihood_terms.html +++ b/docs/reference/get_likelihood_terms.html @@ -1,67 +1,12 @@ - - - - - - - -Translate likely-unlikely to a specified term scale — get_likelihood_terms • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Translate likely-unlikely to a specified term scale — get_likelihood_terms • er.helpers + - - - -
-
- - -
-
+
@@ -120,22 +65,24 @@

Translate likely-unlikely to a specified term scale

Translate likely-unlikely to a specified term scale

-
get_likelihood_terms(
-  terms,
-  term_type = c("worsening-improving", "improving-worsening", "increasing-decreasing",
-    "likely-unlikely")
-)
- -

Arguments

- - - - - - - - - - -
terms

terms to translate

term_type

when scale = "statsnz" it allows to modify the terms +

+
get_likelihood_terms(
+  terms,
+  term_type = c("worsening-improving", "improving-worsening", "increasing-decreasing",
+    "likely-unlikely")
+)
+
+ +
+

Arguments

+ + +
terms
+

terms to translate

+ + +
term_type
+

when scale = "statsnz" it allows to modify the terms depending on what the probability p indicates. term_type = "worsening-improving" indicates that a large p corresponds to a worsening trend; this is the default. term_type = @@ -143,39 +90,35 @@

Arg improving trend. term_type = "increasing-decreasing" indicates that the output should range from "Very likely increasing" to "Very likely decreasing". term_type = "likely-unlikely" indicates that the output -should range from "Very likely" to "Very unlikely".

- -

Value

+should range from "Very likely" to "Very unlikely".

+
+
+

Value

a factor

+
+
- + + - - - + diff --git a/docs/reference/get_metadata.html b/docs/reference/get_metadata.html index 24b7bf4..52be90c 100644 --- a/docs/reference/get_metadata.html +++ b/docs/reference/get_metadata.html @@ -1,67 +1,12 @@ - - - - - - - -Retrieve metadata from an object in the data lake. This function is designed to retrieve the attribute information that is attatched to .RDS file types in the write_to_datalake() function. — get_metadata • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Retrieve metadata from an object in the data lake. This function is designed to retrieve the attribute information that is attatched to .RDS file types in the write_to_datalake() function. — get_metadata • er.helpers - - + - -
-
- - -
-
+
@@ -120,46 +65,44 @@

Retrieve metadata from an object in the data lake. This function is designed

Retrieve metadata from an object in the data lake. This function is designed to retrieve the attribute information that is attatched to .RDS file types in the write_to_datalake() function.

-
get_metadata(..., from_datalake = T, data = NULL)
+
+
get_metadata(..., from_datalake = T, data = NULL)
+
+ +
+

Arguments

-

Arguments

- - - - - - -
...

Key words for an object in the lake

-

Value

+
...
+

Key words for an object in the lake

+
+
+

Value

TRUE if it succeeded and FALSE if it failed

+
+
- + + - - - + diff --git a/docs/reference/get_reference_precipitation.html b/docs/reference/get_reference_precipitation.html index 53934f4..1f5f6be 100644 --- a/docs/reference/get_reference_precipitation.html +++ b/docs/reference/get_reference_precipitation.html @@ -1,68 +1,13 @@ - - - - - - - -Calculate reference precipitation for a reference period/climate normal — get_reference_precipitation • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Calculate reference precipitation for a reference period/climate normal — get_reference_precipitation • er.helpers - - + - -
-
- - -
-
+
@@ -122,113 +67,120 @@

Calculate reference precipitation for a reference period/climate normal

of rainfall within the reference period.

-
get_reference_precipitation(
-  precipitation,
-  date = NULL,
-  reference_period = NULL,
-  percentile = 95L,
-  wet_day_threshold = 1
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
precipitation

vector with rainfall values

date

date for each rain value. Must be the same lentgth of rainfall +

+
get_reference_precipitation(
+  precipitation,
+  date = NULL,
+  reference_period = NULL,
+  percentile = 95L,
+  wet_day_threshold = 1
+)
+
+ +
+

Arguments

+ + +
precipitation
+

vector with rainfall values

+ + +
date
+

date for each rain value. Must be the same lentgth of rainfall and must be the same type as the reference period. I.e if date is numeric (e.g. year) then the reference period must be given as numeric as well. If date is a date or a date-time ("date" or "POSIX.ct") then the reference -period must be also a date or a date-time

reference_period

vector of length 2 with the beginning and end of the -reference period

percentile

percentile for the reference period. Defaults to the 95th -percentile

wet_day_threshold

Numeric. Amount of precipitation at which the day is -considered a wet day. Defaults to 1.

- -

Value

+period must be also a date or a date-time

+ + +
reference_period
+

vector of length 2 with the beginning and end of the +reference period

+ +
percentile
+

percentile for the reference period. Defaults to the 95th +percentile

+ + +
wet_day_threshold
+

Numeric. Amount of precipitation at which the day is +considered a wet day. Defaults to 1.

+ +
+
+

Value

the 95th percentile for the reference period.

-

See also

- -

Other rainfall functions: -precipitation_above_reference()

- -

Examples

-
library(dplyr)
#> -#> Attaching package: ‘dplyr’
#> The following objects are masked from ‘package:stats’: -#> -#> filter, lag
#> The following objects are masked from ‘package:base’: -#> -#> intersect, setdiff, setequal, union
# Simulate one measurement of rain per day for 10 years -rainfall <- rlnorm(10*365) -years <- rep(2001:2010, each = 365) -rain_data <- tibble(rainfall = rainfall, year = years) -# We chose a climate normal -climate_normal <- c(2001, 2005) - -rain_data %>% -# calculate reference rainfall - mutate(ref = get_reference_precipitation(rainfall, - year, - climate_normal, - percentile = 95L)) %>% -# calculate prorportion of rainfall above reference - group_by(year) %>% - summarise(prop_above = precipitation_above_reference(rainfall, ref))
#> # A tibble: 10 × 2 -#> year prop_above -#> <int> <dbl> -#> 1 2001 0.224 -#> 2 2002 0.149 -#> 3 2003 0.217 -#> 4 2004 0.166 -#> 5 2005 0.164 -#> 6 2006 0.170 -#> 7 2007 0.166 -#> 8 2008 0.217 -#> 9 2009 0.235 -#> 10 2010 0.219
+
+
+

See also

+

Other rainfall functions: +precipitation_above_reference()

+
+ +
+

Examples

+
library(dplyr)
+#> 
+#> Attaching package: ‘dplyr’
+#> The following objects are masked from ‘package:stats’:
+#> 
+#>     filter, lag
+#> The following objects are masked from ‘package:base’:
+#> 
+#>     intersect, setdiff, setequal, union
+# Simulate one measurement of rain per day for 10 years
+rainfall <- rlnorm(10*365)
+years <- rep(2001:2010, each = 365)
+rain_data <- tibble(rainfall = rainfall, year = years)
+# We chose a climate normal
+climate_normal <- c(2001, 2005)
+
+rain_data %>%
+# calculate reference rainfall
+  mutate(ref = get_reference_precipitation(rainfall,
+                                           year,
+                                           climate_normal,
+                                           percentile = 95L)) %>%
+# calculate prorportion of rainfall above reference
+  group_by(year) %>%
+  summarise(prop_above = precipitation_above_reference(rainfall, ref))
+#> # A tibble: 10 × 2
+#>     year prop_above
+#>    <int>      <dbl>
+#>  1  2001      0.223
+#>  2  2002      0.151
+#>  3  2003      0.201
+#>  4  2004      0.165
+#>  5  2005      0.181
+#>  6  2006      0.140
+#>  7  2007      0.165
+#>  8  2008      0.225
+#>  9  2009      0.257
+#> 10  2010      0.177
+
+
+
- + + - - - + diff --git a/docs/reference/get_season.html b/docs/reference/get_season.html index 5f4211f..92a6ce1 100644 --- a/docs/reference/get_season.html +++ b/docs/reference/get_season.html @@ -1,69 +1,14 @@ - - - - - - - -Get the season of a date-time — get_season • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Get the season of a date-time — get_season • er.helpers - - - - - - - - - + - - - -
-
- - -
-
+
@@ -124,62 +69,66 @@

Get the season of a date-time

belongs to summer 2011.

-
get_season(x, with_year = TRUE)
- -

Arguments

- - - - - - - - - - -
x

a date-time object of class POSIXct, POSIXlt, Date, chron, yearmon, -yearqtr, zoo, zooreg, timeDate, xts, its, ti, jul, timeSeries, fts or -anything else that can be converted with as.POSIXlt

with_year

logical indicating whether or not to include the season's year/

- -

Value

+
+
get_season(x, with_year = TRUE)
+
+ +
+

Arguments

+ +
x
+

a date-time object of class POSIXct, POSIXlt, Date, chron, yearmon, yearqtr, +zoo, zooreg, timeDate, xts, its, ti, jul, timeSeries, fts or anything else that can +be converted with as.POSIXlt

+ + +
with_year
+

logical indicating whether or not to include the season's year/

+ +
+
+

Value

a string with the season or the year and the season

+
-

Examples

-
x <- lubridate::ymd("2010-01-15") + seq(0, 365*2, length.out = 25) - get_season(x, with_year = TRUE)
#> [1] "2010.summer" "2010.summer" "2010.autumn" "2010.autumn" "2010.autumn" -#> [6] "2010.winter" "2010.winter" "2010.winter" "2010.spring" "2010.spring" -#> [11] "2010.spring" "2011.summer" "2011.summer" "2011.summer" "2011.autumn" -#> [16] "2011.autumn" "2011.autumn" "2011.winter" "2011.winter" "2011.winter" -#> [21] "2011.spring" "2011.spring" "2011.spring" "2012.summer" "2012.summer"
get_season(x, with_year = FALSE)
#> [1] "summer" "summer" "autumn" "autumn" "autumn" "winter" "winter" "winter" -#> [9] "spring" "spring" "spring" "summer" "summer" "summer" "autumn" "autumn" -#> [17] "autumn" "winter" "winter" "winter" "spring" "spring" "spring" "summer" -#> [25] "summer"
+
+

Examples

+
 x <- lubridate::ymd("2010-01-15") + seq(0, 365*2, length.out = 25)
+ get_season(x, with_year = TRUE)
+#>  [1] "2010.summer" "2010.summer" "2010.autumn" "2010.autumn" "2010.autumn"
+#>  [6] "2010.winter" "2010.winter" "2010.winter" "2010.spring" "2010.spring"
+#> [11] "2010.spring" "2011.summer" "2011.summer" "2011.summer" "2011.autumn"
+#> [16] "2011.autumn" "2011.autumn" "2011.winter" "2011.winter" "2011.winter"
+#> [21] "2011.spring" "2011.spring" "2011.spring" "2012.summer" "2012.summer"
+ get_season(x, with_year = FALSE)
+#>  [1] "summer" "summer" "autumn" "autumn" "autumn" "winter" "winter" "winter"
+#>  [9] "spring" "spring" "spring" "summer" "summer" "summer" "autumn" "autumn"
+#> [17] "autumn" "winter" "winter" "winter" "spring" "spring" "spring" "summer"
+#> [25] "summer"
+
+
+
- + + - - - + diff --git a/docs/reference/get_versions_list.html b/docs/reference/get_versions_list.html index c86481e..f5a3eca 100644 --- a/docs/reference/get_versions_list.html +++ b/docs/reference/get_versions_list.html @@ -1,67 +1,12 @@ - - - - - - - -Get object versions from an aws s3 bucket recursively — get_versions_list • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Get object versions from an aws s3 bucket recursively — get_versions_list • er.helpers + - - - -
-
- - -
-
+
@@ -120,53 +65,55 @@

Get object versions from an aws s3 bucket recursively

Get object versions from an aws s3 bucket recursively

-
get_versions_list(bucket_name, key_marker = "")
+
+
get_versions_list(bucket_name, key_marker = "", prefix = "")
+
+ +
+

Arguments

+ -

Arguments

- - - - - - - - - - -
bucket_name

Name of the bucket to connect. By default, it uses the +

bucket_name
+

Name of the bucket to connect. By default, it uses the Ministry for the Environment data lake for environmental reporting -"mfedlkinput".

key_marker

The key marker from which to download the object metadata. -Empty string download all metadata

+"mfedlkinput".

+ + +
key_marker
+

The key marker from which to download the object metadata.

+ -

Value

+
prefix
+

The prefix from which to download the object metadata. +Empty string download all metadata

+
+
+

Value

a list with metadata

+
+
- + + - - - + diff --git a/docs/reference/gridify_mb_data.html b/docs/reference/gridify_mb_data.html index a15b2fb..acecc60 100644 --- a/docs/reference/gridify_mb_data.html +++ b/docs/reference/gridify_mb_data.html @@ -1,67 +1,12 @@ - - - - - - - -Gridify meshblock data — gridify_mb_data • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Gridify meshblock data — gridify_mb_data • er.helpers - - + - -
-
- - -
-
+
@@ -120,93 +65,94 @@

Gridify meshblock data

Converts meshblock data, a meshblock sf object and a grid sf object to grid sf object with density.

-
gridify_mb_data(data, data_id_var, data_vars_vctr, shp, shp_id_var, grid)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
data

A dataframe of meshblock level data. Required input.

data_id_var

An unquoted variable of the the meshblock id of the meshblock data. Required input.

data_vars_vctr

A quoted character vector of the meshblock columns that you want to gridify. Required input.

shp

A sf object of the meshblock level shapes. Note for APS data, use a shp year after the APS year for a better join. Required input.

shp_id_var

An unquoted variable of the the meshblock id of the meshblock shapes. Required input.

grid

A sf object of a grid. E.g. er.helpers::nz_grid_hex_346. Required input.

- -

Value

+
+
gridify_mb_data(data, data_id_var, data_vars_vctr, shp, shp_id_var, grid)
+
+ +
+

Arguments

+ + +
data
+

A dataframe of meshblock level data. Required input.

-

A sf object with estimated grid totals and densities for the var in the input data.

-

Examples

-
if (FALSE) { -agdir <- "~/Network-Shares/U-Drive-SAS-03BAU/IndLabr/Bus Infra & Performance/Agriculture/Ag_Secure/" -data <- haven::read_sas(paste0(agdir, "2017/all_linecodes_perturbed_final.sas7bdat")) +
data_id_var
+

An unquoted variable of the the meshblock id of the meshblock data. Required input.

-data <- data %>% - select(id = CAR_Meshblock, - dairy = APS_TotDairy, - beef = APS_TotBeef) -shp <- get_feature_class("MB2018_V1_00", epsg = 2193) +
data_vars_vctr
+

A quoted character vector of the meshblock columns that you want to gridify. Required input.

-shp <- shp %>% - select(id = mb2018_v1_00) -grid <- er.helpers::nz_grid_hex_346 +
shp
+

A sf object of the meshblock level shapes. Note for APS data, use a shp year after the APS year for a better join. Required input.

-aps_grid_17 <- gridify_mb_data(data = data, - data_id_var = id, - data_vars_vctr = c("dairy", "beef"), - shp = shp, - shp_id_var = id, - grid = er.helpers::nz_grid_hex_346) -leaflet_sf_col(aps_grid_17, dairy_density_per_km2, title = "Dairy density, 2017") -leaflet_sf_col(aps_grid_17, beef_density_per_km2, title = "Beef density, 2017") -}
+
shp_id_var
+

An unquoted variable of the the meshblock id of the meshblock shapes. Required input.

+ + +
grid
+

A sf object of a grid. E.g. er.helpers::nz_grid_hex_346. Required input.

+ +
+
+

Value

+

A sf object with estimated grid totals and densities for the var in the input data.

+
+ +
+

Examples

+
if (FALSE) { # \dontrun{
+agdir <- "~/Network-Shares/U-Drive-SAS-03BAU/IndLabr/Bus Infra & Performance/Agriculture/Ag_Secure/"
+data <- haven::read_sas(paste0(agdir, "2017/all_linecodes_perturbed_final.sas7bdat"))
+
+data <- data %>%
+  select(id = CAR_Meshblock,
+         dairy = APS_TotDairy,
+         beef = APS_TotBeef)
+
+shp <- get_feature_class("MB2018_V1_00",  epsg = 2193)
+
+shp <- shp %>%
+  select(id = mb2018_v1_00)
+
+grid <- er.helpers::nz_grid_hex_346
+
+aps_grid_17 <- gridify_mb_data(data = data,
+                               data_id_var = id,
+                               data_vars_vctr = c("dairy", "beef"),
+                               shp = shp,
+                               shp_id_var = id,
+                             grid = er.helpers::nz_grid_hex_346)
+
+leaflet_sf_col(aps_grid_17, dairy_density_per_km2, title = "Dairy density, 2017")
+leaflet_sf_col(aps_grid_17, beef_density_per_km2, title = "Beef density, 2017")
+} # }
+
+
+
- + + - - - + diff --git a/docs/reference/in_interval.html b/docs/reference/in_interval.html index 7b5bb72..c705e5f 100644 --- a/docs/reference/in_interval.html +++ b/docs/reference/in_interval.html @@ -1,67 +1,12 @@ - - - - - - - -Wether a value is within a specified interval — in_interval • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Wether a value is within a specified interval — in_interval • er.helpers - + - - -
-
- - -
-
+
@@ -120,62 +65,60 @@

Wether a value is within a specified interval

Wether a value is within a specified interval

-
in_interval(x, lower, upper, left_open, right_open)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
x

the value to test

lower

lower limit

upper

upper limit

left_open

whether the lower limit is an open interval

right_open

whether the upper limit is an open interval

- -

Value

+
+
in_interval(x, lower, upper, left_open, right_open)
+
+ +
+

Arguments

+ + +
x
+

the value to test

+ + +
lower
+

lower limit

+ +
upper
+

upper limit

+ + +
left_open
+

whether the lower limit is an open interval

+ + +
right_open
+

whether the upper limit is an open interval

+ +
+
+

Value

logical

+
+
- + + - - - + diff --git a/docs/reference/index.html b/docs/reference/index.html index b46562f..3d4ce46 100644 --- a/docs/reference/index.html +++ b/docs/reference/index.html @@ -1,66 +1,12 @@ - - - - - - - -Function reference • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Package index • er.helpers - - + - -
-
- - -
-
+
- - - - - - - - - - - +
-

All functions

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - -
+

All functions

+

a4_height_mm

A4 useable height.

+

a4_width_mm

A4 useable width.

+

add_unused_levels()

Add a row for each unused factor level to ensure plotly displays all levels in the legend.

+

aggregate_with_criteria() mean_with_criteria() min_with_criteria() max_with_criteria() sum_with_criteria()

Calculate an aggregated value taking into account certain exclusion cirteria

+

all_columns_to_snakecase()

Make all columns of a data frame snakecase.

+

are_all_the_same()

Are all values on x the same?

+

calc_annual_anomaly()

Calculate annual anomaly

+

check_aws_access()

Check if aws credentials have been configured and attempt default -configuration otherwise

+

Check if aws credentials have been configured and attempt default configuration otherwise

get_bucket_version_df()

List bucket contents with versions

+

get_likelihood_category()

Get likelihood category for a p-value

+

get_likelihood_terms()

Translate likely-unlikely to a specified term scale

+

get_metadata()

Retrieve metadata from an object in the data lake. This function is designed to retrieve the attribute information that is attatched to .RDS file types in the write_to_datalake() function.

+

get_reference_precipitation()

Calculate reference precipitation for a reference period/climate normal

+

get_season()

Get the season of a date-time

+

get_versions_list()

Get object versions from an aws s3 bucket recursively

+

gridify_mb_data()

Gridify meshblock data

+

in_interval()

Wether a value is within a specified interval

+

ipcc_likelihood_scale

IPCC likelihood scale

+

launch_shiny_in_background()

Launch a shiny app in the background

+

linear_model()

Linear model for trend analysis

+

mann_kendall()

Mann-Kendall Trend Test

+
+

metadata_to_table()

+

Metadata to table

mfe_datalake_bucket

MfE Default bucket

+

nz

New Zealand coastline.

-

nz_grid_hex_346 nz_grid_hex_346

+
+

nz_grid_hex_346

Hexagonal grid sf object with hexagons of 346km2.

+

nz_region

New Zealand coastline intersected with regional bourndaries.

+

order_likelihood_levels()

Orders the levels of a likelihood category factor

+

order_season_levels()

Order season levels

+

pal_ea19

Colour palette for a graph with a nominal categorical variable.

+

pal_ea19_alpha2

Colour palette for a graph that compares a current year to 1 past year.

+

pal_ea19_nztcs_c

Colour palette for a NZTCS category graph.

+

pal_ea19_trend2

Colour palette for a graph of a ordinal categorical trend variable with 2 values.

+

pal_ea19_trend3

Colour palette for a graph of a ordinal categorical trend variable with 3 values.

+

pal_ea19_trend5

Colour palette for a graph of a ordinal categorical trend variable with 5 values.

+

pal_point_set1

Colour palette for categorical variables for points on a map etc.

+

pal_point_trend2

Colour palette for a map of a ordinal categorical trend variable with 2 values.

+

pal_point_trend3

Colour palette for a map of a ordinal categorical trend variable with 3 values.

+

pal_point_trend5

Colour palette for a map of a ordinal categorical trend variable with 5 values.

+

pal_snz

Colour palette for a graph with a nominal categorical variable.

+

pal_snz_alpha2

Colour palette for a graph that compares a current year to 1 past year.

+

pal_snz_nztcs_c

Colour palette for a NZTCS category graph.

+

pal_snz_nztcs_s

Colour palette for a NZTCS subcategory graph.

+

pal_snz_trend2

Colour palette for a graph of a ordinal categorical trend variable with 2 values.

+

pal_snz_trend3

Colour palette for a graph of a ordinal categorical trend variable with 3 values.

+

pal_snz_trend5

Colour palette for a graph of a ordinal categorical trend variable with 5 values.

+

precipitation_above_reference()

Get proportion of rainfall above reference

+
+

prepare_pattern()

+

Prepare a pattern for look in the data lake and use with str_detect

prettify_range()

Makes it easy to get the period for printing or visualisation

+

read_csv_datalake()

Read a CSV file stored in an AWS S3 bucket.

+

read_excel_datalake()

Read a excel file stored in an AWS S3 bucket.

+

read_from_datalake()

Read any type file stored in an AWS S3 bucket.

+
+

rearrange_geometries()

+

rearrange_geometries

+

round()

+

round

round2()

Round2

+

round_preserve_sum()

Round preserving sum

+

sankey_build_data()

Prepare data to be input into the networkD3 sankeyNetwork function.

+

search_datalake()

Search for keys in the data lake

+

sen_slope()

Sen's slope

+

setup_datalake_access()

Set up access to the data lake programatically.

+

shiny_template()

shiny_template

-

signed_sqrt_trans() signed_sqrt_trans()

+
+

signed_sqrt_trans()

Signed square root ggplot scale transformation.

+

simplify_likelihood_levels()

Simplify likelihood levels

+

standardise_season()

Standarise season names

+

statsnz_likelihood_scale

Stats NZ likelihood scale

+
+

table_to_metadata()

+

Table to metadata Adds attributes to df object and returns and prints list of attributes

version_list_as_df()

Coverts list with object version metadata to a data frame

-

write_csv_datalake()

-

Write a CSV file as an object in an AWS S3 bucket.

+

write_rds_datalake()

Write an RDS file to the lake. .RDS so the attributes can be saved as metadata. Basic attributes are applied below -But you can add your own using attr(). V -The function first writes the file to a temp directory -therefore, it avoids the unintended consequences of saving the file in the -disk.

- +

Write an RDS file to the lake. .RDS so the attributes can be saved as metadata. Basic attributes are applied below But you can add your own using attr(). V The function first writes the file to a temp directory therefore, it avoids the unintended consequences of saving the file in the disk.

+
-
+ + - - - + diff --git a/docs/reference/ipcc_likelihood_scale.html b/docs/reference/ipcc_likelihood_scale.html index b360c1e..d324780 100644 --- a/docs/reference/ipcc_likelihood_scale.html +++ b/docs/reference/ipcc_likelihood_scale.html @@ -1,68 +1,13 @@ - - - - - - - -IPCC likelihood scale — ipcc_likelihood_scale • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -IPCC likelihood scale — ipcc_likelihood_scale • er.helpers - - + - -
-
- - -
-
+
@@ -122,54 +67,60 @@

IPCC likelihood scale

likelihood scale

-
ipcc_likelihood_scale
+
+
ipcc_likelihood_scale
+
+ +
+

Format

+

A data frame with 9 rows and 5 variables:

term
+

likelihood term

+
left_break
+

lower probability limit for the term

-

Format

+
right_break
+

upper probability limit for the term

-

A data frame with 9 rows and 5 variables:

-
term

likelihood term

-
left_break

lower probability limit for the term

-
right_break

upper probability limit for the term

-
left_open

whether the lower limit is an open interval

-
right_open

whether the upper limit is an open interval

+
left_open
+

whether the lower limit is an open interval

-
+
right_open
+

whether the upper limit is an open interval

-

Source

+
+
+

Source

Mastrandrea, M.D., C.B. Field, T.F. Stocker, O. Edenhofer, K.L. Ebi, D.J. Frame, H. Held, E. Kriegler, K.J. Mach, P.R. Matschoss, G.-K. Plattner, G.W. Yohe, and F.W. Zwiers, 2010: Guidance Note for Lead Authors of the IPCC Fifth Assessment Report on Consistent Treatment of Uncertainties. Intergovernmental Panel on Climate Change (IPCC). Available - at http://www.ipcc.ch

+ at http://www.ipcc.ch

+
+
- + + - - - + diff --git a/docs/reference/launch_shiny_in_background.html b/docs/reference/launch_shiny_in_background.html index 929f906..7ee09d4 100644 --- a/docs/reference/launch_shiny_in_background.html +++ b/docs/reference/launch_shiny_in_background.html @@ -1,67 +1,12 @@ - - - - - - - -Launch a shiny app in the background — launch_shiny_in_background • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Launch a shiny app in the background — launch_shiny_in_background • er.helpers - - + - -
-
- - -
-
+
@@ -120,55 +65,57 @@

Launch a shiny app in the background

Launch a shiny app in the background

-
launch_shiny_in_background(path = ".", port = NULL)
+
+
launch_shiny_in_background(path = ".", port = NULL)
+
+ +
+

Arguments

+ -

Arguments

- - - - - - - - - - -
path

Path of the shiny app, defaults to working directory

port

Port to be used for the connection. If NULL uses a randomly -generated port between 1024 and 9999

+
path
+

Path of the shiny app, defaults to working directory

-

Value

+
port
+

Port to be used for the connection. If NULL uses a randomly +generated port between 1024 and 9999

+ +
+
+

Value

The URL of the running app

+
-

Examples

-
if (FALSE) { -launch_shiny_in_backrgound("app/", port = 6589) -}
+
+

Examples

+
if (FALSE) { # \dontrun{
+launch_shiny_in_backrgound("app/", port = 6589)
+} # }
+
+
+
+
- + + - - - + diff --git a/docs/reference/libs/d3-4.9.1/LICENSE b/docs/reference/libs/d3-4.9.1/LICENSE new file mode 100644 index 0000000..1d9d875 --- /dev/null +++ b/docs/reference/libs/d3-4.9.1/LICENSE @@ -0,0 +1,27 @@ +Copyright 2010-2017 Mike Bostock +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the author nor the names of contributors may be used to + endorse or promote products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/docs/reference/libs/d3-4.9.1/d3.min.js b/docs/reference/libs/d3-4.9.1/d3.min.js new file mode 100644 index 0000000..8a0709b --- /dev/null +++ b/docs/reference/libs/d3-4.9.1/d3.min.js @@ -0,0 +1,8 @@ +// https://d3js.org Version 4.9.1. Copyright 2017 Mike Bostock. +(function(t,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n(t.d3=t.d3||{})})(this,function(t){"use strict";function n(t){return function(n,e){return js(t(n),e)}}function e(t,n){return[t,n]}function r(t,n,e){var r=(n-t)/Math.max(0,e),i=Math.floor(Math.log(r)/Math.LN10),o=r/Math.pow(10,i);return i>=0?(o>=sf?10:o>=ff?5:o>=lf?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(o>=sf?10:o>=ff?5:o>=lf?2:1)}function i(t,n,e){var r=Math.abs(n-t)/Math.max(0,e),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),o=r/i;return o>=sf?i*=10:o>=ff?i*=5:o>=lf&&(i*=2),n=0&&(e=t.slice(r+1),t=t.slice(0,r)),t&&!n.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}})}function g(t,n){for(var e,r=0,i=t.length;r=0&&(n=t.slice(e+1),t=t.slice(0,e)),{type:t,name:n}})}function S(t){return function(){var n=this.__on;if(n){for(var e,r=0,i=-1,o=n.length;rn?1:t>=n?0:NaN}function U(t){return function(){this.removeAttribute(t)}}function D(t){return function(){this.removeAttributeNS(t.space,t.local)}}function O(t,n){return function(){this.setAttribute(t,n)}}function F(t,n){return function(){this.setAttributeNS(t.space,t.local,n)}}function I(t,n){return function(){var e=n.apply(this,arguments);null==e?this.removeAttribute(t):this.setAttribute(t,e)}}function Y(t,n){return function(){var e=n.apply(this,arguments);null==e?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,e)}}function B(t){return function(){this.style.removeProperty(t)}}function H(t,n,e){return function(){this.style.setProperty(t,n,e)}}function j(t,n,e){return function(){var r=n.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,e)}}function X(t,n){return t.style.getPropertyValue(n)||gl(t).getComputedStyle(t,null).getPropertyValue(n)}function $(t){return function(){delete this[t]}}function V(t,n){return function(){this[t]=n}}function W(t,n){return function(){var e=n.apply(this,arguments);null==e?delete this[t]:this[t]=e}}function Z(t){return t.trim().split(/^|\s+/)}function G(t){return t.classList||new J(t)}function J(t){this._node=t,this._names=Z(t.getAttribute("class")||"")}function Q(t,n){for(var e=G(t),r=-1,i=n.length;++r>8&15|n>>4&240,n>>4&15|240&n,(15&n)<<4|15&n,1)):(n=Xl.exec(t))?St(parseInt(n[1],16)):(n=$l.exec(t))?new zt(n[1],n[2],n[3],1):(n=Vl.exec(t))?new zt(255*n[1]/100,255*n[2]/100,255*n[3]/100,1):(n=Wl.exec(t))?Et(n[1],n[2],n[3],n[4]):(n=Zl.exec(t))?Et(255*n[1]/100,255*n[2]/100,255*n[3]/100,n[4]):(n=Gl.exec(t))?Pt(n[1],n[2]/100,n[3]/100,1):(n=Jl.exec(t))?Pt(n[1],n[2]/100,n[3]/100,n[4]):Ql.hasOwnProperty(t)?St(Ql[t]):"transparent"===t?new zt(NaN,NaN,NaN,0):null}function St(t){return new zt(t>>16&255,t>>8&255,255&t,1)}function Et(t,n,e,r){return r<=0&&(t=n=e=NaN),new zt(t,n,e,r)}function At(t){return t instanceof kt||(t=Nt(t)),t?(t=t.rgb(),new zt(t.r,t.g,t.b,t.opacity)):new zt}function Ct(t,n,e,r){return 1===arguments.length?At(t):new zt(t,n,e,null==r?1:r)}function zt(t,n,e,r){this.r=+t,this.g=+n,this.b=+e,this.opacity=+r}function Pt(t,n,e,r){return r<=0?t=n=e=NaN:e<=0||e>=1?t=n=NaN:n<=0&&(t=NaN),new qt(t,n,e,r)}function Lt(t){if(t instanceof qt)return new qt(t.h,t.s,t.l,t.opacity);if(t instanceof kt||(t=Nt(t)),!t)return new qt;if(t instanceof qt)return t;t=t.rgb();var n=t.r/255,e=t.g/255,r=t.b/255,i=Math.min(n,e,r),o=Math.max(n,e,r),u=NaN,a=o-i,c=(o+i)/2;return a?(u=n===o?(e-r)/a+6*(e0&&c<1?0:u,new qt(u,a,c,t.opacity)}function Rt(t,n,e,r){return 1===arguments.length?Lt(t):new qt(t,n,e,null==r?1:r)}function qt(t,n,e,r){this.h=+t,this.s=+n,this.l=+e,this.opacity=+r}function Ut(t,n,e){return 255*(t<60?n+(e-n)*t/60:t<180?e:t<240?n+(e-n)*(240-t)/60:n)}function Dt(t){if(t instanceof Ft)return new Ft(t.l,t.a,t.b,t.opacity);if(t instanceof $t){var n=t.h*Kl;return new Ft(t.l,Math.cos(n)*t.c,Math.sin(n)*t.c,t.opacity)}t instanceof zt||(t=At(t));var e=Ht(t.r),r=Ht(t.g),i=Ht(t.b),o=It((.4124564*e+.3575761*r+.1804375*i)/nh),u=It((.2126729*e+.7151522*r+.072175*i)/eh);return new Ft(116*u-16,500*(o-u),200*(u-It((.0193339*e+.119192*r+.9503041*i)/rh)),t.opacity)}function Ot(t,n,e,r){return 1===arguments.length?Dt(t):new Ft(t,n,e,null==r?1:r)}function Ft(t,n,e,r){this.l=+t,this.a=+n,this.b=+e,this.opacity=+r}function It(t){return t>ah?Math.pow(t,1/3):t/uh+ih}function Yt(t){return t>oh?t*t*t:uh*(t-ih)}function Bt(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function Ht(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function jt(t){if(t instanceof $t)return new $t(t.h,t.c,t.l,t.opacity);t instanceof Ft||(t=Dt(t));var n=Math.atan2(t.b,t.a)*th;return new $t(n<0?n+360:n,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function Xt(t,n,e,r){return 1===arguments.length?jt(t):new $t(t,n,e,null==r?1:r)}function $t(t,n,e,r){this.h=+t,this.c=+n,this.l=+e,this.opacity=+r}function Vt(t){if(t instanceof Zt)return new Zt(t.h,t.s,t.l,t.opacity);t instanceof zt||(t=At(t));var n=t.r/255,e=t.g/255,r=t.b/255,i=(vh*r+ph*n-dh*e)/(vh+ph-dh),o=r-i,u=(hh*(e-i)-fh*o)/lh,a=Math.sqrt(u*u+o*o)/(hh*i*(1-i)),c=a?Math.atan2(u,o)*th-120:NaN;return new Zt(c<0?c+360:c,a,i,t.opacity)}function Wt(t,n,e,r){return 1===arguments.length?Vt(t):new Zt(t,n,e,null==r?1:r)}function Zt(t,n,e,r){this.h=+t,this.s=+n,this.l=+e,this.opacity=+r}function Gt(t,n,e,r,i){var o=t*t,u=o*t;return((1-3*t+3*o-u)*n+(4-6*o+3*u)*e+(1+3*t+3*o-3*u)*r+u*i)/6}function Jt(t,n){return function(e){return t+e*n}}function Qt(t,n,e){return t=Math.pow(t,e),n=Math.pow(n,e)-t,e=1/e,function(r){return Math.pow(t+r*n,e)}}function Kt(t,n){var e=n-t;return e?Jt(t,e>180||e<-180?e-360*Math.round(e/360):e):Th(isNaN(t)?n:t)}function tn(t){return 1==(t=+t)?nn:function(n,e){return e-n?Qt(n,e,t):Th(isNaN(n)?e:n)}}function nn(t,n){var e=n-t;return e?Jt(t,e):Th(isNaN(t)?n:t)}function en(t){return function(n){var e,r,i=n.length,o=new Array(i),u=new Array(i),a=new Array(i);for(e=0;e180?n+=360:n-t>180&&(t+=360),o.push({i:e.push(i(e)+"rotate(",null,r)-2,x:Ch(t,n)})):n&&e.push(i(e)+"rotate("+n+r)}function a(t,n,e,o){t!==n?o.push({i:e.push(i(e)+"skewX(",null,r)-2,x:Ch(t,n)}):n&&e.push(i(e)+"skewX("+n+r)}function c(t,n,e,r,o,u){if(t!==e||n!==r){var a=o.push(i(o)+"scale(",null,",",null,")");u.push({i:a-4,x:Ch(t,e)},{i:a-2,x:Ch(n,r)})}else 1===e&&1===r||o.push(i(o)+"scale("+e+","+r+")")}return function(n,e){var r=[],i=[];return n=t(n),e=t(e),o(n.translateX,n.translateY,e.translateX,e.translateY,r,i),u(n.rotate,e.rotate,r,i),a(n.skewX,e.skewX,r,i),c(n.scaleX,n.scaleY,e.scaleX,e.scaleY,r,i),n=e=null,function(t){for(var n,e=-1,o=i.length;++e=0&&n._call.call(null,t),n=n._next;--Jh}function bn(){ep=(np=ip.now())+rp,Jh=Qh=0;try{xn()}finally{Jh=0,Mn(),ep=0}}function wn(){var t=ip.now(),n=t-np;n>tp&&(rp-=n,np=t)}function Mn(){for(var t,n,e=xh,r=1/0;e;)e._call?(r>e._time&&(r=e._time),t=e,e=e._next):(n=e._next,e._next=null,e=t?t._next=n:xh=n);bh=t,Tn(r)}function Tn(t){if(!Jh){Qh&&(Qh=clearTimeout(Qh));var n=t-ep;n>24?(t<1/0&&(Qh=setTimeout(bn,n)),Kh&&(Kh=clearInterval(Kh))):(Kh||(np=ep,Kh=setInterval(wn,tp)),Jh=1,op(bn))}}function kn(t,n){var e=t.__transition;if(!e||!(e=e[n])||e.state>fp)throw new Error("too late");return e}function Nn(t,n){var e=t.__transition;if(!e||!(e=e[n])||e.state>hp)throw new Error("too late");return e}function Sn(t,n){var e=t.__transition;if(!e||!(e=e[n]))throw new Error("too late");return e}function En(t,n,e){function r(t){e.state=lp,e.timer.restart(i,e.delay,e.time),e.delay<=t&&i(t-e.delay)}function i(r){var s,f,l,h;if(e.state!==lp)return u();for(s in c)if(h=c[s],h.name===e.name){if(h.state===pp)return up(i);h.state===dp?(h.state=_p,h.timer.stop(),h.on.call("interrupt",t,t.__data__,h.index,h.group),delete c[s]):+s=0&&(t=t.slice(0,n)),!t||"start"===t})}function $n(t,n,e){var r,i,o=Xn(n)?kn:Nn;return function(){var u=o(this,t),a=u.on;a!==r&&(i=(r=a).copy()).on(n,e),u.on=i}}function Vn(t){return function(){var n=this.parentNode;for(var e in this.__transition)if(+e!==t)return;n&&n.removeChild(this)}}function Wn(t,n){var e,r,i;return function(){var o=X(this,t),u=(this.style.removeProperty(t),X(this,t));return o===u?null:o===e&&u===r?i:i=n(e=o,r=u)}}function Zn(t){return function(){this.style.removeProperty(t)}}function Gn(t,n,e){var r,i;return function(){var o=X(this,t);return o===e?null:o===r?i:i=n(r=o,e)}}function Jn(t,n,e){var r,i,o;return function(){var u=X(this,t),a=e(this);return null==a&&(this.style.removeProperty(t),a=X(this,t)),u===a?null:u===r&&a===i?o:o=n(r=u,i=a)}}function Qn(t,n,e){function r(){var r=this,i=n.apply(r,arguments);return i&&function(n){r.style.setProperty(t,i(n),e)}}return r._value=n,r}function Kn(t){return function(){this.textContent=t}}function te(t){return function(){var n=t(this);this.textContent=null==n?"":n}}function ne(t,n,e,r){this._groups=t,this._parents=n,this._name=e,this._id=r}function ee(t){return yt().transition(t)}function re(){return++Fp}function ie(t){return+t}function oe(t){return t*t}function ue(t){return t*(2-t)}function ae(t){return((t*=2)<=1?t*t:--t*(2-t)+1)/2}function ce(t){return t*t*t}function se(t){return--t*t*t+1}function fe(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}function le(t){return 1-Math.cos(t*Xp)}function he(t){return Math.sin(t*Xp)}function pe(t){return(1-Math.cos(jp*t))/2}function de(t){return Math.pow(2,10*t-10)}function ve(t){return 1-Math.pow(2,-10*t)}function _e(t){return((t*=2)<=1?Math.pow(2,10*t-10):2-Math.pow(2,10-10*t))/2}function ye(t){return 1-Math.sqrt(1-t*t)}function ge(t){return Math.sqrt(1- --t*t)}function me(t){return((t*=2)<=1?1-Math.sqrt(1-t*t):Math.sqrt(1-(t-=2)*t)+1)/2}function xe(t){return 1-be(1-t)}function be(t){return(t=+t)<$p?nd*t*t:tMath.abs(t[1]-O[1])?M=!0:w=!0),O=t,b=!0,vd(),o()}function o(){var t;switch(m=O[0]-D[0],x=O[1]-D[1],N){case yd:case _d:S&&(m=Math.max(P-l,Math.min(R-v,m)),h=l+m,_=v+m),E&&(x=Math.max(L-p,Math.min(q-y,x)),d=p+x,g=y+x);break;case gd:S<0?(m=Math.max(P-l,Math.min(R-l,m)),h=l+m,_=v):S>0&&(m=Math.max(P-v,Math.min(R-v,m)),h=l,_=v+m),E<0?(x=Math.max(L-p,Math.min(q-p,x)),d=p+x,g=y):E>0&&(x=Math.max(L-y,Math.min(q-y,x)),d=p,g=y+x);break;case md:S&&(h=Math.max(P,Math.min(R,l-m*S)),_=Math.max(P,Math.min(R,v+m*S))),E&&(d=Math.max(L,Math.min(q,p-x*E)),g=Math.max(L,Math.min(q,y+x*E)))}_0&&(l=h-m),E<0?y=g-x:E>0&&(p=d-x),N=yd,Y.attr("cursor",Md.selection),o());break;default:return}vd()}function s(){switch(t.event.keyCode){case 16:U&&(w=M=U=!1,o());break;case 18:N===md&&(S<0?v=_:S>0&&(l=h),E<0?y=g:E>0&&(p=d),N=gd,o());break;case 32:N===yd&&(t.event.altKey?(S&&(v=_-m*S,l=h+m*S),E&&(y=g-x*E,p=d+x*E),N=md):(S<0?v=_:S>0&&(l=h),E<0?y=g:E>0&&(p=d),N=gd),Y.attr("cursor",Md[k]),o());break;default:return}vd()}if(t.event.touches){if(t.event.changedTouches.length=(o=(v+y)/2))?v=o:y=o,(f=e>=(u=(_+g)/2))?_=u:g=u,i=p,!(p=p[l=f<<1|s]))return i[l]=d,t;if(a=+t._x.call(null,p.data),c=+t._y.call(null,p.data),n===a&&e===c)return d.next=p,i?i[l]=d:t._root=d,t;do{i=i?i[l]=new Array(4):t._root=new Array(4),(s=n>=(o=(v+y)/2))?v=o:y=o,(f=e>=(u=(_+g)/2))?_=u:g=u}while((l=f<<1|s)==(h=(c>=u)<<1|a>=o));return i[h]=p,i[l]=d,t}function tr(t){var n,e,r,i,o=t.length,u=new Array(o),a=new Array(o),c=1/0,s=1/0,f=-1/0,l=-1/0;for(e=0;ef&&(f=r),il&&(l=i));for(f",i=n[3]||"-",o=n[4]||"",u=!!n[5],a=n[6]&&+n[6],c=!!n[7],s=n[8]&&+n[8].slice(1),f=n[9]||"";"n"===f?(c=!0,f="g"):Dv[f]||(f=""),(u||"0"===e&&"="===r)&&(u=!0,e="0",r="="),this.fill=e,this.align=r, +this.sign=i,this.symbol=o,this.zero=u,this.width=a,this.comma=c,this.precision=s,this.type=f}function vr(n){return Fv=Bv(n),t.format=Fv.format,t.formatPrefix=Fv.formatPrefix,Fv}function _r(){this.reset()}function yr(t,n,e){var r=t.s=n+e,i=r-n,o=r-i;t.t=n-o+(e-i)}function gr(t){return t>1?0:t<-1?N_:Math.acos(t)}function mr(t){return t>1?S_:t<-1?-S_:Math.asin(t)}function xr(t){return(t=I_(t/2))*t}function br(){}function wr(t,n){t&&X_.hasOwnProperty(t.type)&&X_[t.type](t,n)}function Mr(t,n,e){var r,i=-1,o=t.length-e;for(n.lineStart();++i=0?1:-1,i=r*e,o=q_(n),u=I_(n),a=Jv*u,c=Gv*o+a*q_(i),s=a*r*I_(i);V_.add(R_(s,c)),Zv=t,Gv=o,Jv=u}function Ar(t){return[R_(t[1],t[0]),mr(t[2])]}function Cr(t){var n=t[0],e=t[1],r=q_(e);return[r*q_(n),r*I_(n),I_(e)]}function zr(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]}function Pr(t,n){return[t[1]*n[2]-t[2]*n[1],t[2]*n[0]-t[0]*n[2],t[0]*n[1]-t[1]*n[0]]}function Lr(t,n){t[0]+=n[0],t[1]+=n[1],t[2]+=n[2]}function Rr(t,n){return[t[0]*n,t[1]*n,t[2]*n]}function qr(t){var n=B_(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=n,t[1]/=n,t[2]/=n}function Ur(t,n){u_.push(a_=[Qv=t,t_=t]),nn_&&(n_=n)}function Dr(t,n){var e=Cr([t*z_,n*z_]);if(o_){var r=Pr(o_,e),i=[r[1],-r[0],0],o=Pr(i,r);qr(o),o=Ar(o);var u,a=t-e_,c=a>0?1:-1,s=o[0]*C_*c,f=P_(a)>180;f^(c*e_n_&&(n_=u):(s=(s+360)%360-180,f^(c*e_n_&&(n_=n))),f?tHr(Qv,t_)&&(t_=t):Hr(t,t_)>Hr(Qv,t_)&&(Qv=t):t_>=Qv?(tt_&&(t_=t)):t>e_?Hr(Qv,t)>Hr(Qv,t_)&&(t_=t):Hr(t,t_)>Hr(Qv,t_)&&(Qv=t)}else u_.push(a_=[Qv=t,t_=t]);nn_&&(n_=n),o_=e,e_=t}function Or(){Q_.point=Dr}function Fr(){a_[0]=Qv,a_[1]=t_,Q_.point=Ur,o_=null}function Ir(t,n){if(o_){var e=t-e_;J_.add(P_(e)>180?e+(e>0?360:-360):e)}else r_=t,i_=n;Z_.point(t,n),Dr(t,n)}function Yr(){Z_.lineStart()}function Br(){Ir(r_,i_),Z_.lineEnd(),P_(J_)>k_&&(Qv=-(t_=180)),a_[0]=Qv,a_[1]=t_,o_=null}function Hr(t,n){return(n-=t)<0?n+360:n}function jr(t,n){return t[0]-n[0]}function Xr(t,n){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:nN_?t-A_:t<-N_?t+A_:t,n]}function ri(t,n,e){return(t%=A_)?n||e?ry(oi(t),ui(n,e)):oi(t):n||e?ui(n,e):ei}function ii(t){return function(n,e){return n+=t,[n>N_?n-A_:n<-N_?n+A_:n,e]}}function oi(t){var n=ii(t);return n.invert=ii(-t),n}function ui(t,n){function e(t,n){var e=q_(n),a=q_(t)*e,c=I_(t)*e,s=I_(n),f=s*r+a*i;return[R_(c*o-f*u,a*r-s*i),mr(f*o+c*u)]}var r=q_(t),i=I_(t),o=q_(n),u=I_(n);return e.invert=function(t,n){var e=q_(n),a=q_(t)*e,c=I_(t)*e,s=I_(n),f=s*o-c*u;return[R_(c*o+s*u,a*r+f*i),mr(f*r-a*i)]},e}function ai(t,n,e,r,i,o){if(e){var u=q_(n),a=I_(n),c=r*e;null==i?(i=n+r*A_,o=n-c/2):(i=ci(u,i),o=ci(u,o),(r>0?io)&&(i+=r*A_));for(var s,f=i;r>0?f>o:f0)do{s.point(0===f||3===f?t:e,f>1?r:n)}while((f=(f+a+4)%4)!==l);else s.point(o[0],o[1])}function u(r,i){return P_(r[0]-t)0?0:3:P_(r[0]-e)0?2:1:P_(r[1]-n)0?1:0:i>0?3:2}function a(t,n){return c(t.x,n.x)}function c(t,n){var e=u(t,1),r=u(n,1);return e!==r?e-r:0===e?n[1]-t[1]:1===e?t[0]-n[0]:2===e?t[1]-n[1]:n[0]-t[0]}return function(u){function c(t,n){i(t,n)&&N.point(t,n)}function s(){for(var n=0,e=0,i=_.length;er&&(l-o)*(r-u)>(h-u)*(t-o)&&++n:h<=r&&(l-o)*(r-u)<(h-u)*(t-o)&&--n;return n}function f(){N=S,v=[],_=[],k=!0}function l(){var t=s(),n=k&&t,e=(v=bf(v)).length;(n||e)&&(u.polygonStart(),n&&(u.lineStart(),o(null,null,1,u),u.lineEnd()),e&&xy(v,a,t,o,u),u.polygonEnd()),N=u,v=_=y=null}function h(){E.point=d,_&&_.push(y=[]),T=!0,M=!1,b=w=NaN}function p(){v&&(d(g,m),x&&M&&S.rejoin(),v.push(S.result())),E.point=c,M&&N.lineEnd()}function d(o,u){var a=i(o,u);if(_&&y.push([o,u]),T)g=o,m=u,x=a,T=!1,a&&(N.lineStart(),N.point(o,u));else if(a&&M)N.point(o,u);else{var c=[b=Math.max(wy,Math.min(by,b)),w=Math.max(wy,Math.min(by,w))],s=[o=Math.max(wy,Math.min(by,o)),u=Math.max(wy,Math.min(by,u))];gy(c,s,t,n,e,r)?(M||(N.lineStart(),N.point(c[0],c[1])),N.point(s[0],s[1]),a||N.lineEnd(),k=!1):a&&(N.lineStart(),N.point(o,u),k=!1)}b=o,w=u,M=a}var v,_,y,g,m,x,b,w,M,T,k,N=u,S=yy(),E={point:c,lineStart:h,lineEnd:p,polygonStart:f,polygonEnd:l};return E}}function hi(){Sy.point=di,Sy.lineEnd=pi}function pi(){Sy.point=Sy.lineEnd=br}function di(t,n){t*=z_,n*=z_,iy=t,oy=I_(n),uy=q_(n),Sy.point=vi}function vi(t,n){t*=z_,n*=z_;var e=I_(n),r=q_(n),i=P_(t-iy),o=q_(i),u=I_(i),a=r*u,c=uy*e-oy*r*o,s=oy*e+uy*r*o;Ny.add(R_(B_(a*a+c*c),s)),iy=t,oy=e,uy=r}function _i(t,n){return!(!t||!Ly.hasOwnProperty(t.type))&&Ly[t.type](t,n)}function yi(t,n){return 0===zy(t,n)}function gi(t,n){var e=zy(t[0],t[1]);return zy(t[0],n)+zy(n,t[1])<=e+k_}function mi(t,n){return!!ky(t.map(xi),bi(n))}function xi(t){return t=t.map(bi),t.pop(),t}function bi(t){return[t[0]*z_,t[1]*z_]}function wi(t,n,e){var r=cf(t,n-k_,e).concat(n);return function(t){return r.map(function(n){return[t,n]})}}function Mi(t,n,e){var r=cf(t,n-k_,e).concat(n);return function(t){return r.map(function(n){return[n,t]})}}function Ti(){function t(){return{type:"MultiLineString",coordinates:n()}}function n(){return cf(U_(o/_)*_,i,_).map(h).concat(cf(U_(s/y)*y,c,y).map(p)).concat(cf(U_(r/d)*d,e,d).filter(function(t){return P_(t%_)>k_}).map(f)).concat(cf(U_(a/v)*v,u,v).filter(function(t){return P_(t%y)>k_}).map(l))}var e,r,i,o,u,a,c,s,f,l,h,p,d=10,v=d,_=90,y=360,g=2.5;return t.lines=function(){return n().map(function(t){return{type:"LineString",coordinates:t}})},t.outline=function(){return{type:"Polygon",coordinates:[h(o).concat(p(c).slice(1),h(i).reverse().slice(1),p(s).reverse().slice(1))]}},t.extent=function(n){return arguments.length?t.extentMajor(n).extentMinor(n):t.extentMinor()},t.extentMajor=function(n){return arguments.length?(o=+n[0][0],i=+n[1][0],s=+n[0][1],c=+n[1][1],o>i&&(n=o,o=i,i=n),s>c&&(n=s,s=c,c=n),t.precision(g)):[[o,s],[i,c]]},t.extentMinor=function(n){return arguments.length?(r=+n[0][0],e=+n[1][0],a=+n[0][1],u=+n[1][1],r>e&&(n=r,r=e,e=n),a>u&&(n=a,a=u,u=n),t.precision(g)):[[r,a],[e,u]]},t.step=function(n){return arguments.length?t.stepMajor(n).stepMinor(n):t.stepMinor()},t.stepMajor=function(n){return arguments.length?(_=+n[0],y=+n[1],t):[_,y]},t.stepMinor=function(n){return arguments.length?(d=+n[0],v=+n[1],t):[d,v]},t.precision=function(n){return arguments.length?(g=+n,f=wi(a,u,90),l=Mi(r,e,g),h=wi(s,c,90),p=Mi(o,i,g),t):g},t.extentMajor([[-180,-90+k_],[180,90-k_]]).extentMinor([[-180,-80-k_],[180,80+k_]])}function ki(){return Ti()()}function Ni(){Fy.point=Si}function Si(t,n){Fy.point=Ei,ay=sy=t,cy=fy=n}function Ei(t,n){Oy.add(fy*t-sy*n),sy=t,fy=n}function Ai(){Ei(ay,cy)}function Ci(t,n){tBy&&(By=t),nHy&&(Hy=n)}function zi(t,n){Xy+=t,$y+=n,++Vy}function Pi(){tg.point=Li}function Li(t,n){tg.point=Ri,zi(py=t,dy=n)}function Ri(t,n){var e=t-py,r=n-dy,i=B_(e*e+r*r);Wy+=i*(py+t)/2,Zy+=i*(dy+n)/2,Gy+=i,zi(py=t,dy=n)}function qi(){tg.point=zi}function Ui(){tg.point=Oi}function Di(){Fi(ly,hy)}function Oi(t,n){tg.point=Fi,zi(ly=py=t,hy=dy=n)}function Fi(t,n){var e=t-py,r=n-dy,i=B_(e*e+r*r);Wy+=i*(py+t)/2,Zy+=i*(dy+n)/2,Gy+=i,i=dy*t-py*n,Jy+=i*(py+t),Qy+=i*(dy+n),Ky+=3*i,zi(py=t,dy=n)}function Ii(t){this._context=t}function Yi(t,n){ag.point=Bi,eg=ig=t,rg=og=n}function Bi(t,n){ig-=t,og-=n,ug.add(B_(ig*ig+og*og)),ig=t,og=n}function Hi(){this._string=[]}function ji(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}function Xi(t){return t.length>1}function $i(t,n){return((t=t.x)[0]<0?t[1]-S_-k_:S_-t[1])-((n=n.x)[0]<0?n[1]-S_-k_:S_-n[1])}function Vi(t){var n,e=NaN,r=NaN,i=NaN;return{lineStart:function(){t.lineStart(),n=1},point:function(o,u){var a=o>0?N_:-N_,c=P_(o-e);P_(c-N_)0?S_:-S_),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(a,r),t.point(o,r),n=0):i!==a&&c>=N_&&(P_(e-i)k_?L_((I_(n)*(o=q_(r))*I_(e)-I_(r)*(i=q_(n))*I_(t))/(i*o*u)):(n+r)/2}function Zi(t,n,e,r){var i;if(null==t)i=e*S_,r.point(-N_,i),r.point(0,i),r.point(N_,i),r.point(N_,0),r.point(N_,-i),r.point(0,-i),r.point(-N_,-i),r.point(-N_,0),r.point(-N_,i);else if(P_(t[0]-n[0])>k_){var o=t[0]4*n&&v--){var x=u+h,b=a+p,w=c+d,M=B_(x*x+b*b+w*w),T=mr(w/=M),k=P_(P_(w)-1)n||P_((y*A+g*C)/m-.5)>.3||u*h+a*p+c*d2?t[2]%360*z_:0,i()):[b*C_,w*C_,M*C_]},n.precision=function(t){return arguments.length?(A=vg(r,E=t*t),o()):B_(E)},n.fitExtent=function(t,e){return Qi(n,t,e)},n.fitSize=function(t,e){return Ki(n,t,e)},function(){return u=t.apply(this,arguments),n.invert=u.invert&&e,i()}}function io(t){var n=0,e=N_/3,r=ro(t),i=r(n,e);return i.parallels=function(t){return arguments.length?r(n=t[0]*z_,e=t[1]*z_):[n*C_,e*C_]},i}function oo(t){function n(t,n){return[t*e,I_(n)/e]}var e=q_(t);return n.invert=function(t,n){return[t/e,mr(n*e)]},n}function uo(t,n){function e(t,n){var e=B_(o-2*i*I_(n))/i;return[e*I_(t*=i),u-e*q_(t)]}var r=I_(t),i=(r+I_(n))/2;if(P_(i)0?n<-S_+k_&&(n=-S_+k_):n>S_-k_&&(n=S_-k_);var e=o/F_(ho(n),i);return[e*I_(i*t),o-e*q_(i*t)]}var r=q_(t),i=t===n?I_(t):O_(r/q_(n))/O_(ho(n)/ho(t)),o=r*F_(ho(t),i)/i;return i?(e.invert=function(t,n){var e=o-n,r=Y_(i)*B_(t*t+e*e);return[R_(t,P_(e))/i*Y_(e),2*L_(F_(o/r,1/i))-S_]},e):fo}function vo(t,n){return[t,n]}function _o(t,n){function e(t,n){var e=o-n,r=i*t;return[e*I_(r),o-e*q_(r)]}var r=q_(t),i=t===n?I_(t):(r-q_(n))/(n-t),o=r/i+t;return P_(i)=0;)n+=e[r].value;else n=1;t.value=n}function Co(t,n){if(t===n)return t;var e=t.ancestors(),r=n.ancestors(),i=null;for(t=e.pop(),n=r.pop();t===n;)i=t,t=e.pop(),n=r.pop();return i}function zo(t,n){var e,r,i,o,u,a=new Uo(t),c=+t.value&&(a.value=t.value),s=[a];for(null==n&&(n=Lo);e=s.pop();)if(c&&(e.value=+e.data.value),(i=n(e.data))&&(u=i.length))for(e.children=new Array(u),o=u-1;o>=0;--o)s.push(r=e.children[o]=new Uo(i[o])),r.parent=e,r.depth=e.depth+1;return a.eachBefore(qo)}function Po(){return zo(this).eachBefore(Ro)}function Lo(t){return t.children}function Ro(t){t.data=t.data.data}function qo(t){var n=0;do{t.height=n}while((t=t.parent)&&t.height<++n)}function Uo(t){this.data=t,this.depth=this.height=0,this.parent=null}function Do(t){this._=t,this.next=null}function Oo(t,n){var e=n.x-t.x,r=n.y-t.y,i=t.r-n.r;return i*i+1e-6>e*e+r*r}function Fo(t,n){var e,r,i,o=null,u=t.head;switch(n.length){case 1:e=Io(n[0]);break;case 2:e=Yo(n[0],n[1]);break;case 3:e=Bo(n[0],n[1],n[2])}for(;u;)i=u._,r=u.next,e&&Oo(e,i)?o=u:(o?(t.tail=o,o.next=null):t.head=t.tail=null,n.push(i),e=Fo(t,n),n.pop(),t.head?(u.next=t.head,t.head=u):(u.next=null,t.head=t.tail=u),o=t.tail,o.next=r),u=r;return t.tail=o,e}function Io(t){return{x:t.x,y:t.y,r:t.r}}function Yo(t,n){var e=t.x,r=t.y,i=t.r,o=n.x,u=n.y,a=n.r,c=o-e,s=u-r,f=a-i,l=Math.sqrt(c*c+s*s);return{x:(e+o+c/l*f)/2,y:(r+u+s/l*f)/2,r:(l+i+a)/2}}function Bo(t,n,e){var r=t.x,i=t.y,o=t.r,u=n.x,a=n.y,c=n.r,s=e.x,f=e.y,l=e.r,h=2*(r-u),p=2*(i-a),d=2*(c-o),v=r*r+i*i-o*o-u*u-a*a+c*c,_=2*(r-s),y=2*(i-f),g=2*(l-o),m=r*r+i*i-o*o-s*s-f*f+l*l,x=_*p-h*y,b=(p*m-y*v)/x-r,w=(y*d-p*g)/x,M=(_*v-h*m)/x-i,T=(h*g-_*d)/x,k=w*w+T*T-1,N=2*(b*w+M*T+o),S=b*b+M*M-o*o,E=(-N-Math.sqrt(N*N-4*k*S))/(2*k);return{x:b+w*E+r,y:M+T*E+i,r:E}}function Ho(t,n,e){var r=t.x,i=t.y,o=n.r+e.r,u=t.r+e.r,a=n.x-r,c=n.y-i,s=a*a+c*c;if(s){var f=.5+((u*=u)-(o*=o))/(2*s),l=Math.sqrt(Math.max(0,2*o*(u+s)-(u-=s)*u-o*o))/(2*s);e.x=r+f*a+l*c,e.y=i+f*c-l*a}else e.x=r+u,e.y=i}function jo(t,n){var e=n.x-t.x,r=n.y-t.y,i=t.r+n.r;return i*i-1e-6>e*e+r*r}function Xo(t,n,e){var r=t._,i=t.next._,o=r.r+i.r,u=(r.x*i.r+i.x*r.r)/o-n,a=(r.y*i.r+i.y*r.r)/o-e;return u*u+a*a}function $o(t){this._=t,this.next=null,this.previous=null}function Vo(t){if(!(i=t.length))return 0;var n,e,r,i;if(n=t[0],n.x=0,n.y=0,!(i>1))return n.r;if(e=t[1],n.x=-e.r,e.x=n.r,e.y=0,!(i>2))return n.r+e.r;Ho(e,n,r=t[2]);var o,u,a,c,s,f,l,h=n.r*n.r,p=e.r*e.r,d=r.r*r.r,v=h+p+d,_=h*n.x+p*e.x+d*r.x,y=h*n.y+p*e.y+d*r.y;n=new $o(n),e=new $o(e),r=new $o(r),n.next=r.previous=e,e.next=n.previous=r,r.next=e.previous=n;t:for(a=3;a=0;)n=i[o],n.z+=e,n.m+=e,e+=n.s+(r+=n.c)}function cu(t,n,e){return t.a.parent===n.parent?t.a:e}function su(t,n){this._=t,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=n}function fu(t){for(var n,e,r,i,o,u=new su(t,0),a=[u];n=a.pop();)if(r=n._.children)for(n.children=new Array(o=r.length),i=o-1;i>=0;--i)a.push(e=n.children[i]=new su(r[i],i)),e.parent=n;return(u.parent=new su(null,0)).children=[u],u}function lu(t,n,e,r,i,o){for(var u,a,c,s,f,l,h,p,d,v,_,y=[],g=n.children,m=0,x=0,b=g.length,w=n.value;mh&&(h=a),_=f*f*v,(p=Math.max(h/_,_/l))>d){f-=a;break}d=p}y.push(u={value:f,dice:c1&&pm(t[e[r-2]],t[e[r-1]],t[i])<=0;)--r;e[r++]=i}return e.slice(0,r)}function du(t){this._size=t,this._call=this._error=null,this._tasks=[],this._data=[],this._waiting=this._active=this._ended=this._start=0}function vu(t){if(!t._start)try{_u(t)}catch(n){if(t._tasks[t._ended+t._active-1])gu(t,n);else if(!t._data)throw n}}function _u(t){for(;t._start=t._waiting&&t._active=0;)if((e=t._tasks[r])&&(t._tasks[r]=null,e.abort))try{e.abort()}catch(n){}t._active=NaN,mu(t)}function mu(t){if(!t._active&&t._call){var n=t._data;t._data=void 0,t._call(t._error,n)}}function xu(t){if(null==t)t=1/0;else if(!((t=+t)>=1))throw new Error("invalid concurrency");return new du(t)}function bu(t){return function(n,e){t(null==n?e:null)}}function wu(t){var n=t.responseType;return n&&"text"!==n?t.response:t.responseText}function Mu(t,n){return function(e){return t(e.responseText,n)}}function Tu(t){function n(n){var o=n+"",u=e.get(o);if(!u){if(i!==Om)return i;e.set(o,u=r.push(n))}return t[(u-1)%t.length]}var e=He(),r=[],i=Om;return t=null==t?[]:Dm.call(t),n.domain=function(t){if(!arguments.length)return r.slice();r=[],e=He();for(var i,o,u=-1,a=t.length;++u=e?1:r(t)}}}function Cu(t){return function(n,e){var r=t(n=+n,e=+e);return function(t){return t<=0?n:t>=1?e:r(t)}}}function zu(t,n,e,r){var i=t[0],o=t[1],u=n[0],a=n[1];return o2?Pu:zu,o=u=null,r}function r(n){return(o||(o=i(a,c,f?Au(t):t,s)))(+n)}var i,o,u,a=Ym,c=Ym,s=qh,f=!1;return r.invert=function(t){return(u||(u=i(c,a,Eu,f?Cu(n):n)))(+t)},r.domain=function(t){return arguments.length?(a=Um.call(t,Im),e()):a.slice()},r.range=function(t){return arguments.length?(c=Dm.call(t),e()):c.slice()},r.rangeRound=function(t){return c=Dm.call(t),s=Uh,e()},r.clamp=function(t){return arguments.length?(f=!!t,e()):f},r.interpolate=function(t){return arguments.length?(s=t,e()):s},e()}function qu(t){var n=t.domain;return t.ticks=function(t){var e=n();return hf(e[0],e[e.length-1],null==t?10:t)},t.tickFormat=function(t,e){return Bm(n(),t,e)},t.nice=function(e){null==e&&(e=10);var i,o=n(),u=0,a=o.length-1,c=o[u],s=o[a];return s0?(c=Math.floor(c/i)*i,s=Math.ceil(s/i)*i,i=r(c,s,e)):i<0&&(c=Math.ceil(c*i)/i,s=Math.floor(s*i)/i,i=r(c,s,e)),i>0?(o[u]=Math.floor(c/i)*i,o[a]=Math.ceil(s/i)*i,n(o)):i<0&&(o[u]=Math.ceil(c*i)/i,o[a]=Math.floor(s*i)/i,n(o)),t},t}function Uu(){var t=Ru(Eu,Ch);return t.copy=function(){return Lu(t,Uu())},qu(t)}function Du(){function t(t){return+t}var n=[0,1];return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=Um.call(e,Im),t):n.slice()},t.copy=function(){return Du().domain(n)},qu(t)}function Ou(t,n){return(n=Math.log(n/t))?function(e){return Math.log(e/t)/n}:Fm(n)}function Fu(t,n){return t<0?function(e){return-Math.pow(-n,e)*Math.pow(-t,1-e)}:function(e){return Math.pow(n,e)*Math.pow(t,1-e)}}function Iu(t){return isFinite(t)?+("1e"+t):t<0?0:t}function Yu(t){return 10===t?Iu:t===Math.E?Math.exp:function(n){return Math.pow(t,n)}}function Bu(t){return t===Math.E?Math.log:10===t&&Math.log10||2===t&&Math.log2||(t=Math.log(t),function(n){return Math.log(n)/t})}function Hu(t){return function(n){return-t(-n)}}function ju(){function n(){return o=Bu(i),u=Yu(i),r()[0]<0&&(o=Hu(o),u=Hu(u)),e}var e=Ru(Ou,Fu).domain([1,10]),r=e.domain,i=10,o=Bu(10),u=Yu(10);return e.base=function(t){return arguments.length?(i=+t,n()):i},e.domain=function(t){return arguments.length?(r(t),n()):r()},e.ticks=function(t){var n,e=r(),a=e[0],c=e[e.length-1];(n=c0){for(;hc)break;v.push(l)}}else for(;h=1;--f)if(!((l=s*f)c)break;v.push(l)}}else v=hf(h,p,Math.min(p-h,d)).map(u);return n?v.reverse():v},e.tickFormat=function(n,r){if(null==r&&(r=10===i?".0e":","),"function"!=typeof r&&(r=t.format(r)),n===1/0)return r;null==n&&(n=10);var a=Math.max(1,i*n/e.ticks().length);return function(t){var n=t/u(Math.round(o(t)));return n*i0?i[n-1]:e[0],n=i?[o[i-1],r]:[o[n-1],o[n]]},t.copy=function(){return Zu().domain([e,r]).range(u)},qu(t)}function Gu(){function t(t){if(t<=t)return e[Vs(n,t,0,r)]}var n=[.5],e=[0,1],r=1;return t.domain=function(i){return arguments.length?(n=Dm.call(i),r=Math.min(n.length,e.length-1),t):n.slice()},t.range=function(i){return arguments.length?(e=Dm.call(i),r=Math.min(n.length,e.length-1),t):e.slice()},t.invertExtent=function(t){var r=e.indexOf(t);return[n[r-1],n[r]]},t.copy=function(){return Gu().domain(n).range(e)},t}function Ju(t,n,e,r){function i(n){return t(n=new Date(+n)),n}return i.floor=i,i.ceil=function(e){return t(e=new Date(e-1)),n(e,1),t(e),e},i.round=function(t){var n=i(t),e=i.ceil(t);return t-n0))return u;do{u.push(new Date(+e))}while(n(e,o),t(e),e=n)for(;t(n),!e(n);)n.setTime(n-1)},function(t,r){if(t>=t)for(;--r>=0;)for(;n(t,1),!e(t););})},e&&(i.count=function(n,r){return jm.setTime(+n),Xm.setTime(+r),t(jm),t(Xm),Math.floor(e(jm,Xm))},i.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?function(n){return r(n)%t==0}:function(n){return i.count(0,n)%t==0}):i:null}),i}function Qu(t){return Ju(function(n){n.setDate(n.getDate()-(n.getDay()+7-t)%7),n.setHours(0,0,0,0)},function(t,n){t.setDate(t.getDate()+7*n)},function(t,n){return(n-t-(n.getTimezoneOffset()-t.getTimezoneOffset())*Wm)/Zm})}function Ku(t){return Ju(function(n){n.setUTCDate(n.getUTCDate()-(n.getUTCDay()+7-t)%7),n.setUTCHours(0,0,0,0)},function(t,n){t.setUTCDate(t.getUTCDate()+7*n)},function(t,n){return(n-t)/Zm})}function ta(t){if(0<=t.y&&t.y<100){var n=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return n.setFullYear(t.y),n}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function na(t){if(0<=t.y&&t.y<100){var n=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return n.setUTCFullYear(t.y),n}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function ea(t){return{y:t,m:0,d:1,H:0,M:0,S:0,L:0}}function ra(t){function n(t,n){return function(e){var r,i,o,u=[],a=-1,c=0,s=t.length;for(e instanceof Date||(e=new Date(+e));++a=c)return-1;if(37===(i=n.charCodeAt(u++))){if(i=n.charAt(u++),!(o=B[i in Vx?n.charAt(u++):i])||(r=o(t,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function i(t,n,e){var r=C.exec(n.slice(e));return r?(t.p=z[r[0].toLowerCase()],e+r[0].length):-1}function o(t,n,e){var r=R.exec(n.slice(e));return r?(t.w=q[r[0].toLowerCase()],e+r[0].length):-1}function u(t,n,e){var r=P.exec(n.slice(e));return r?(t.w=L[r[0].toLowerCase()],e+r[0].length):-1}function a(t,n,e){var r=O.exec(n.slice(e));return r?(t.m=F[r[0].toLowerCase()],e+r[0].length):-1}function c(t,n,e){var r=U.exec(n.slice(e));return r?(t.m=D[r[0].toLowerCase()],e+r[0].length):-1}function s(t,n,e){return r(t,w,n,e)}function f(t,n,e){return r(t,M,n,e)}function l(t,n,e){return r(t,T,n,e)}function h(t){return S[t.getDay()]}function p(t){return N[t.getDay()]}function d(t){return A[t.getMonth()]}function v(t){return E[t.getMonth()]}function _(t){return k[+(t.getHours()>=12)]}function y(t){return S[t.getUTCDay()]}function g(t){return N[t.getUTCDay()]}function m(t){return A[t.getUTCMonth()]}function x(t){return E[t.getUTCMonth()]}function b(t){return k[+(t.getUTCHours()>=12)]}var w=t.dateTime,M=t.date,T=t.time,k=t.periods,N=t.days,S=t.shortDays,E=t.months,A=t.shortMonths,C=ua(k),z=aa(k),P=ua(N),L=aa(N),R=ua(S),q=aa(S),U=ua(E),D=aa(E),O=ua(A),F=aa(A),I={a:h,A:p,b:d,B:v,c:null,d:wa,e:wa,H:Ma,I:Ta,j:ka,L:Na,m:Sa,M:Ea,p:_,S:Aa,U:Ca,w:za,W:Pa,x:null,X:null,y:La,Y:Ra,Z:qa,"%":Ga},Y={a:y,A:g,b:m,B:x,c:null,d:Ua,e:Ua,H:Da,I:Oa,j:Fa,L:Ia,m:Ya,M:Ba,p:b,S:Ha,U:ja,w:Xa,W:$a,x:null,X:null,y:Va,Y:Wa,Z:Za,"%":Ga},B={a:o,A:u,b:a,B:c,c:s,d:va,e:va,H:ya,I:ya,j:_a,L:xa,m:da,M:ga,p:i,S:ma,U:sa,w:ca,W:fa,x:f,X:l,y:ha,Y:la,Z:pa,"%":ba};return I.x=n(M,I),I.X=n(T,I),I.c=n(w,I),Y.x=n(M,Y),Y.X=n(T,Y),Y.c=n(w,Y),{format:function(t){var e=n(t+="",I);return e.toString=function(){return t},e},parse:function(t){var n=e(t+="",ta);return n.toString=function(){return t},n},utcFormat:function(t){var e=n(t+="",Y);return e.toString=function(){return t},e},utcParse:function(t){var n=e(t,na);return n.toString=function(){return t},n}}}function ia(t,n,e){var r=t<0?"-":"",i=(r?-t:t)+"",o=i.length;return r+(o68?1900:2e3),e+r[0].length):-1}function pa(t,n,e){var r=/^(Z)|([+-]\d\d)(?:\:?(\d\d))?/.exec(n.slice(e,e+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),e+r[0].length):-1}function da(t,n,e){var r=Wx.exec(n.slice(e,e+2));return r?(t.m=r[0]-1,e+r[0].length):-1}function va(t,n,e){var r=Wx.exec(n.slice(e,e+2));return r?(t.d=+r[0],e+r[0].length):-1}function _a(t,n,e){var r=Wx.exec(n.slice(e,e+3));return r?(t.m=0,t.d=+r[0],e+r[0].length):-1}function ya(t,n,e){var r=Wx.exec(n.slice(e,e+2));return r?(t.H=+r[0],e+r[0].length):-1}function ga(t,n,e){var r=Wx.exec(n.slice(e,e+2));return r?(t.M=+r[0],e+r[0].length):-1}function ma(t,n,e){var r=Wx.exec(n.slice(e,e+2));return r?(t.S=+r[0],e+r[0].length):-1}function xa(t,n,e){var r=Wx.exec(n.slice(e,e+3));return r?(t.L=+r[0],e+r[0].length):-1}function ba(t,n,e){var r=Zx.exec(n.slice(e,e+1));return r?e+r[0].length:-1}function wa(t,n){return ia(t.getDate(),n,2)}function Ma(t,n){return ia(t.getHours(),n,2)}function Ta(t,n){return ia(t.getHours()%12||12,n,2)}function ka(t,n){return ia(1+ex.count(xx(t),t),n,3)}function Na(t,n){return ia(t.getMilliseconds(),n,3)}function Sa(t,n){return ia(t.getMonth()+1,n,2)}function Ea(t,n){return ia(t.getMinutes(),n,2)}function Aa(t,n){return ia(t.getSeconds(),n,2)}function Ca(t,n){return ia(ix.count(xx(t),t),n,2)}function za(t){return t.getDay()}function Pa(t,n){return ia(ox.count(xx(t),t),n,2)}function La(t,n){return ia(t.getFullYear()%100,n,2)}function Ra(t,n){return ia(t.getFullYear()%1e4,n,4)}function qa(t){var n=t.getTimezoneOffset();return(n>0?"-":(n*=-1,"+"))+ia(n/60|0,"0",2)+ia(n%60,"0",2)}function Ua(t,n){return ia(t.getUTCDate(),n,2)}function Da(t,n){return ia(t.getUTCHours(),n,2)}function Oa(t,n){return ia(t.getUTCHours()%12||12,n,2)}function Fa(t,n){return ia(1+Nx.count(jx(t),t),n,3)}function Ia(t,n){return ia(t.getUTCMilliseconds(),n,3)}function Ya(t,n){return ia(t.getUTCMonth()+1,n,2)}function Ba(t,n){return ia(t.getUTCMinutes(),n,2)}function Ha(t,n){return ia(t.getUTCSeconds(),n,2)}function ja(t,n){return ia(Ex.count(jx(t),t),n,2)}function Xa(t){return t.getUTCDay()}function $a(t,n){return ia(Ax.count(jx(t),t),n,2)}function Va(t,n){return ia(t.getUTCFullYear()%100,n,2)}function Wa(t,n){return ia(t.getUTCFullYear()%1e4,n,4)}function Za(){return"+0000"}function Ga(){return"%"}function Ja(n){return Xx=ra(n),t.timeFormat=Xx.format,t.timeParse=Xx.parse,t.utcFormat=Xx.utcFormat,t.utcParse=Xx.utcParse,Xx}function Qa(t){return t.toISOString()}function Ka(t){var n=new Date(t);return isNaN(n)?null:n}function tc(t){return new Date(t)}function nc(t){return t instanceof Date?+t:+new Date(+t)}function ec(t,n,e,r,o,u,a,c,s){function f(i){return(a(i)1?0:t<-1?zb:Math.acos(t)}function uc(t){return t>=1?Pb:t<=-1?-Pb:Math.asin(t)}function ac(t){return t.innerRadius}function cc(t){return t.outerRadius}function sc(t){return t.startAngle}function fc(t){return t.endAngle}function lc(t){return t&&t.padAngle}function hc(t,n,e,r,i,o,u,a){var c=e-t,s=r-n,f=u-i,l=a-o,h=(f*(n-o)-l*(t-i))/(l*c-f*s);return[t+h*c,n+h*s]}function pc(t,n,e,r,i,o,u){var a=t-e,c=n-r,s=(u?o:-o)/Ab(a*a+c*c),f=s*c,l=-s*a,h=t+f,p=n+l,d=e+f,v=r+l,_=(h+d)/2,y=(p+v)/2,g=d-h,m=v-p,x=g*g+m*m,b=i-o,w=h*v-d*p,M=(m<0?-1:1)*Ab(Nb(0,b*b*x-w*w)),T=(w*m-g*M)/x,k=(-w*g-m*M)/x,N=(w*m+g*M)/x,S=(-w*g+m*M)/x,E=T-_,A=k-y,C=N-_,z=S-y;return E*E+A*A>C*C+z*z&&(T=N,k=S),{cx:T,cy:k,x01:-f,y01:-l,x11:T*(i/b-1),y11:k*(i/b-1)}}function dc(t){this._context=t}function vc(t){return t[0]}function _c(t){return t[1]}function yc(t){this._curve=t}function gc(t){function n(n){return new yc(t(n))}return n._curve=t,n}function mc(t){var n=t.curve;return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t.curve=function(t){return arguments.length?n(gc(t)):n()._curve},t}function xc(t){return t.source}function bc(t){return t.target}function wc(t){function n(){var n,a=jb.call(arguments),c=e.apply(this,a),s=r.apply(this,a);if(u||(u=n=Ue()),t(u,+i.apply(this,(a[0]=c,a)),+o.apply(this,a),+i.apply(this,(a[0]=s,a)),+o.apply(this,a)),n)return u=null,n+""||null}var e=xc,r=bc,i=vc,o=_c,u=null;return n.source=function(t){return arguments.length?(e=t,n):e},n.target=function(t){return arguments.length?(r=t,n):r},n.x=function(t){return arguments.length?(i="function"==typeof t?t:wb(+t),n):i},n.y=function(t){return arguments.length?(o="function"==typeof t?t:wb(+t),n):o},n.context=function(t){return arguments.length?(u=null==t?null:t,n):u},n}function Mc(t,n,e,r,i){t.moveTo(n,e),t.bezierCurveTo(n=(n+r)/2,e,n,i,r,i)}function Tc(t,n,e,r,i){t.moveTo(n,e),t.bezierCurveTo(n,e=(e+i)/2,r,e,r,i)}function kc(t,n,e,r,i){var o=Xb(n,e),u=Xb(n,e=(e+i)/2),a=Xb(r,e),c=Xb(r,i);t.moveTo(o[0],o[1]),t.bezierCurveTo(u[0],u[1],a[0],a[1],c[0],c[1])}function Nc(){return wc(Mc)}function Sc(){return wc(Tc)}function Ec(){var t=wc(kc);return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t}function Ac(t,n,e){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+n)/6,(t._y0+4*t._y1+e)/6)}function Cc(t){this._context=t}function zc(t){this._context=t}function Pc(t){this._context=t}function Lc(t,n){this._basis=new Cc(t),this._beta=n}function Rc(t,n,e){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-n),t._y2+t._k*(t._y1-e),t._x2,t._y2)}function qc(t,n){this._context=t,this._k=(1-n)/6}function Uc(t,n){this._context=t,this._k=(1-n)/6}function Dc(t,n){this._context=t,this._k=(1-n)/6}function Oc(t,n,e){var r=t._x1,i=t._y1,o=t._x2,u=t._y2;if(t._l01_a>Cb){var a=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,c=3*t._l01_a*(t._l01_a+t._l12_a);r=(r*a-t._x0*t._l12_2a+t._x2*t._l01_2a)/c,i=(i*a-t._y0*t._l12_2a+t._y2*t._l01_2a)/c}if(t._l23_a>Cb){var s=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,f=3*t._l23_a*(t._l23_a+t._l12_a);o=(o*s+t._x1*t._l23_2a-n*t._l12_2a)/f,u=(u*s+t._y1*t._l23_2a-e*t._l12_2a)/f}t._context.bezierCurveTo(r,i,o,u,t._x2,t._y2)}function Fc(t,n){this._context=t,this._alpha=n}function Ic(t,n){this._context=t,this._alpha=n}function Yc(t,n){this._context=t,this._alpha=n}function Bc(t){this._context=t}function Hc(t){return t<0?-1:1}function jc(t,n,e){var r=t._x1-t._x0,i=n-t._x1,o=(t._y1-t._y0)/(r||i<0&&-0),u=(e-t._y1)/(i||r<0&&-0),a=(o*i+u*r)/(r+i);return(Hc(o)+Hc(u))*Math.min(Math.abs(o),Math.abs(u),.5*Math.abs(a))||0}function Xc(t,n){var e=t._x1-t._x0;return e?(3*(t._y1-t._y0)/e-n)/2:n}function $c(t,n,e){var r=t._x0,i=t._y0,o=t._x1,u=t._y1,a=(o-r)/3;t._context.bezierCurveTo(r+a,i+a*n,o-a,u-a*e,o,u)}function Vc(t){this._context=t}function Wc(t){this._context=new Zc(t)}function Zc(t){this._context=t}function Gc(t){return new Vc(t)}function Jc(t){return new Wc(t)}function Qc(t){this._context=t}function Kc(t){var n,e,r=t.length-1,i=new Array(r),o=new Array(r),u=new Array(r);for(i[0]=0,o[0]=2,u[0]=t[0]+2*t[1],n=1;n=0;--n)i[n]=(u[n]-i[n+1])/o[n];for(o[r-1]=(t[r]+i[r-1])/2,n=0;n0)){if(o/=d,d<0){if(o0){if(o>p)return;o>h&&(h=o)}if(o=r-c,d||!(o<0)){if(o/=d,d<0){if(o>p)return;o>h&&(h=o)}else if(d>0){if(o0)){if(o/=v,v<0){if(o0){if(o>p)return;o>h&&(h=o)}if(o=i-s,v||!(o<0)){if(o/=v,v<0){if(o>p)return;o>h&&(h=o)}else if(v>0){if(o0||p<1)||(h>0&&(t[0]=[c+h*d,s+h*v]),p<1&&(t[1]=[c+p*d,s+p*v]),!0)}}}}}function _s(t,n,e,r,i){var o=t[1];if(o)return!0;var u,a,c=t[0],s=t.left,f=t.right,l=s[0],h=s[1],p=f[0],d=f[1],v=(l+p)/2,_=(h+d)/2;if(d===h){if(v=r)return;if(l>p){if(c){if(c[1]>=i)return}else c=[v,e];o=[v,i]}else{if(c){if(c[1]1)if(l>p){if(c){if(c[1]>=i)return}else c=[(e-a)/u,e];o=[(i-a)/u,i]}else{if(c){if(c[1]=r)return}else c=[n,u*n+a];o=[r,u*r+a]}else{if(c){if(c[0]jw||Math.abs(i[0][1]-i[1][1])>jw)||delete Yw[o]}function gs(t){return Fw[t.index]={site:t,halfedges:[]}}function ms(t,n){var e=t.site,r=n.left,i=n.right;return e===i&&(i=r,r=e),i?Math.atan2(i[1]-r[1],i[0]-r[0]):(e===r?(r=n[1],i=n[0]):(r=n[0],i=n[1]),Math.atan2(r[0]-i[0],i[1]-r[1]))}function xs(t,n){return n[+(n.left!==t.site)]}function bs(t,n){return n[+(n.left===t.site)]}function ws(){for(var t,n,e,r,i=0,o=Fw.length;ijw||Math.abs(v-h)>jw)&&(c.splice(a,0,Yw.push(ps(u,p,Math.abs(d-t)jw?[t,Math.abs(l-t)jw?[Math.abs(h-r)jw?[e,Math.abs(l-e)jw?[Math.abs(h-n)=-Xw)){var p=c*c+s*s,d=f*f+l*l,v=(l*p-s*d)/h,_=(c*d-f*p)/h,y=Bw.pop()||new Ts;y.arc=t,y.site=i,y.x=v+u,y.y=(y.cy=_+a)+Math.sqrt(v*v+_*_),t.circle=y;for(var g=null,m=Iw._;m;)if(y.yjw)a=a.L;else{if(!((i=o-Ls(a,u))>jw)){r>-jw?(n=a.P,e=a):i>-jw?(n=a,e=a.N):n=e=a;break}if(!a.R){n=a;break}a=a.R}gs(t);var c=Es(t);if(Ow.insert(n,c),n||e){if(n===e)return Ns(n),e=Es(n.site),Ow.insert(c,e),c.edge=e.edge=hs(n.site,c.site),ks(n),void ks(e);if(!e)return void(c.edge=hs(n.site,c.site));Ns(n),Ns(e);var s=n.site,f=s[0],l=s[1],h=t[0]-f,p=t[1]-l,d=e.site,v=d[0]-f,_=d[1]-l,y=2*(h*_-p*v),g=h*h+p*p,m=v*v+_*_,x=[(_*g-p*m)/y+f,(h*m-v*g)/y+l];ds(e.edge,s,d,x),c.edge=hs(s,t,null,x),e.edge=hs(t,d,null,x),ks(n),ks(e)}}function Ps(t,n){var e=t.site,r=e[0],i=e[1],o=i-n;if(!o)return r;var u=t.P;if(!u)return-1/0;e=u.site;var a=e[0],c=e[1],s=c-n;if(!s)return a;var f=a-r,l=1/o-1/s,h=f/s;return l?(-h+Math.sqrt(h*h-2*l*(f*f/(-2*s)-c+s/2+i-o/2)))/l+r:(r+a)/2}function Ls(t,n){var e=t.N;if(e)return Ps(e,n);var r=t.site;return r[1]===n?r[0]:1/0}function Rs(t,n,e){return(t[0]-e[0])*(n[1]-t[1])-(t[0]-n[0])*(e[1]-t[1])}function qs(t,n){return n[1]-t[1]||n[0]-t[0]}function Us(t,n){var e,r,i,o=t.sort(qs).pop();for(Yw=[],Fw=new Array(t.length),Ow=new as,Iw=new as;;)if(i=Dw,o&&(!i||o[1]n?1:t>=n?0:NaN},Xs=function(t){return 1===t.length&&(t=n(t)),{left:function(n,e,r,i){for(null==r&&(r=0),null==i&&(i=n.length);r>>1;t(n[o],e)<0?r=o+1:i=o}return r},right:function(n,e,r,i){for(null==r&&(r=0),null==i&&(i=n.length);r>>1;t(n[o],e)>0?i=o:r=o+1}return r}}},$s=Xs(js),Vs=$s.right,Ws=$s.left,Zs=function(t,n){null==n&&(n=e);for(var r=0,i=t.length-1,o=t[0],u=new Array(i<0?0:i);rt?1:n>=t?0:NaN},Qs=function(t){return null===t?NaN:+t},Ks=function(t,n){var e,r,i=t.length,o=0,u=-1,a=0,c=0;if(null==n)for(;++u1)return c/(o-1)},tf=function(t,n){var e=Ks(t,n);return e?Math.sqrt(e):e},nf=function(t,n){var e,r,i,o=t.length,u=-1;if(null==n){for(;++u=e)for(r=i=e;++ue&&(r=e),i=e)for(r=i=e;++ue&&(r=e),i0)for(t=Math.ceil(t/u),n=Math.floor(n/u),o=new Array(i=Math.ceil(n-t+1));++cl;)h.pop(),--p;var d,v=new Array(p+1);for(o=0;o<=p;++o)d=v[o]=[],d.x0=o>0?h[o-1]:f,d.x1=o=1)return+e(t[r-1],r-1,t);var r,i=(r-1)*n,o=Math.floor(i),u=+e(t[o],o,t);return u+(+e(t[o+1],o+1,t)-u)*(i-o)}},_f=function(t,n,e){return t=of.call(t,Qs).sort(js),Math.ceil((e-n)/(2*(vf(t,.75)-vf(t,.25))*Math.pow(t.length,-1/3)))},yf=function(t,n,e){return Math.ceil((e-n)/(3.5*tf(t)*Math.pow(t.length,-1/3)))},gf=function(t,n){var e,r,i=t.length,o=-1;if(null==n){for(;++o=e)for(r=e;++or&&(r=e)}else for(;++o=e)for(r=e;++or&&(r=e);return r},mf=function(t,n){var e,r=t.length,i=r,o=-1,u=0;if(null==n)for(;++o=0;)for(r=t[i],n=r.length;--n>=0;)e[--u]=r[n];return e},wf=function(t,n){var e,r,i=t.length,o=-1;if(null==n){for(;++o=e)for(r=e;++oe&&(r=e)}else for(;++o=e)for(r=e;++oe&&(r=e);return r},Mf=function(t,n){for(var e=n.length,r=new Array(e);e--;)r[e]=t[n[e]];return r},Tf=function(t,n){if(e=t.length){var e,r,i=0,o=0,u=t[o];for(null==n&&(n=js);++i0)for(var e,r,i=new Array(e),o=0;o=0&&"xmlns"!==(n=t.slice(0,e))&&(t=t.slice(e+1)),Of.hasOwnProperty(n)?{space:Of[n],local:t}:t},If=function(t){var n=Ff(t);return(n.local?b:x)(n)},Yf=0;M.prototype=w.prototype={constructor:M,get:function(t){for(var n=this._;!(n in t);)if(!(t=t.parentNode))return;return t[n]},set:function(t,n){return t[this._]=n},remove:function(t){return this._ in t&&delete t[this._]},toString:function(){return this._}};var Bf=function(t){return function(){return this.matches(t)}};if("undefined"!=typeof document){var Hf=document.documentElement;if(!Hf.matches){var jf=Hf.webkitMatchesSelector||Hf.msMatchesSelector||Hf.mozMatchesSelector||Hf.oMatchesSelector;Bf=function(t){return function(){return jf.call(this,t)}}}}var Xf=Bf,$f={};if(t.event=null,"undefined"!=typeof document){"onmouseenter"in document.documentElement||($f={mouseenter:"mouseover",mouseleave:"mouseout"})}var Vf=function(t,n,e){var r,i,o=N(t+""),u=o.length;{if(!(arguments.length<2)){for(a=n?E:S,null==e&&(e=!1),r=0;r=x&&(x=m+1);!(g=_[x])&&++x=0;)(r=i[o])&&(u&&u!==r.nextSibling&&u.parentNode.insertBefore(r,u),u=r);return this},fl=function(t){function n(n,e){return n&&e?t(n.__data__,e.__data__):!n-!e}t||(t=q);for(var e=this._groups,r=e.length,i=new Array(r),o=0;o1?this.each((null==n?B:"function"==typeof n?j:H)(t,n,null==e?"":e)):X(this.node(),t)},xl=function(t,n){return arguments.length>1?this.each((null==n?$:"function"==typeof n?W:V)(t,n)):this.node()[t]};J.prototype={add:function(t){this._names.indexOf(t)<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var n=this._names.indexOf(t);n>=0&&(this._names.splice(n,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var bl=function(t,n){var e=Z(t+"");if(arguments.length<2){for(var r=G(this.node()),i=-1,o=e.length;++ix}y.mouse("drag")}function i(){Pl(t.event.view).on("mousemove.drag mouseup.drag",null),mt(t.event.view,l),Ul(),y.mouse("end")}function o(){if(p.apply(this,arguments)){var n,e,r=t.event.changedTouches,i=d.apply(this,arguments),o=r.length;for(n=0;n=240?t-240:t+120,i,r),Ut(t,i,r),Ut(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1}}));var Kl=Math.PI/180,th=180/Math.PI,nh=.95047,eh=1,rh=1.08883,ih=4/29,oh=6/29,uh=3*oh*oh,ah=oh*oh*oh;Il(Ft,Ot,Tt(kt,{brighter:function(t){return new Ft(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker:function(t){return new Ft(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb:function(){var t=(this.l+16)/116,n=isNaN(this.a)?t:t+this.a/500,e=isNaN(this.b)?t:t-this.b/200;return t=eh*Yt(t),n=nh*Yt(n),e=rh*Yt(e),new zt(Bt(3.2404542*n-1.5371385*t-.4985314*e),Bt(-.969266*n+1.8760108*t+.041556*e),Bt(.0556434*n-.2040259*t+1.0572252*e),this.opacity)}})),Il($t,Xt,Tt(kt,{brighter:function(t){return new $t(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker:function(t){return new $t(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb:function(){return Dt(this).rgb()}}));var ch=-.14861,sh=1.78277,fh=-.29227,lh=-.90649,hh=1.97294,ph=hh*lh,dh=hh*sh,vh=sh*fh-lh*ch;Il(Zt,Wt,Tt(kt,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new Zt(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new Zt(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=isNaN(this.h)?0:(this.h+120)*Kl,n=+this.l,e=isNaN(this.s)?0:this.s*n*(1-n),r=Math.cos(t),i=Math.sin(t);return new zt(255*(n+e*(ch*r+sh*i)),255*(n+e*(fh*r+lh*i)),255*(n+e*(hh*r)),this.opacity)}}));var _h,yh,gh,mh,xh,bh,wh=function(t){var n=t.length-1;return function(e){var r=e<=0?e=0:e>=1?(e=1,n-1):Math.floor(e*n),i=t[r],o=t[r+1],u=r>0?t[r-1]:2*i-o,a=ro&&(i=n.slice(o,i),a[u]?a[u]+=i:a[++u]=i),(e=e[0])===(r=r[0])?a[u]?a[u]+=r:a[++u]=r:(a[++u]=null,c.push({i:u,x:Ch(e,r)})),o=Lh.lastIndex;return ohp&&e.statelp&&e.name===n)return new ne([[t]],ld,n,+r)}return null},pd=function(t){return function(){return t}},dd=function(t,n,e){this.target=t,this.type=n,this.selection=e},vd=function(){t.event.preventDefault(),t.event.stopImmediatePropagation()},_d={name:"drag"},yd={name:"space"},gd={name:"handle"},md={name:"center"},xd={name:"x",handles:["e","w"].map(ke),input:function(t,n){return t&&[[t[0],n[0][1]],[t[1],n[1][1]]]},output:function(t){return t&&[t[0][0],t[1][0]]}},bd={name:"y",handles:["n","s"].map(ke),input:function(t,n){return t&&[[n[0][0],t[0]],[n[1][0],t[1]]]},output:function(t){return t&&[t[0][1],t[1][1]]}},wd={name:"xy",handles:["n","e","s","w","nw","ne","se","sw"].map(ke),input:function(t){return t},output:function(t){return t}},Md={overlay:"crosshair",selection:"move",n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Td={e:"w",w:"e",nw:"ne",ne:"nw",se:"sw",sw:"se"},kd={n:"s",s:"n",nw:"sw",ne:"se",se:"ne",sw:"nw"},Nd={overlay:1,selection:1,n:null,e:1,s:null,w:-1,nw:-1,ne:1,se:1,sw:-1},Sd={overlay:1,selection:1,n:-1,e:null,s:1,w:null,nw:-1,ne:-1,se:1,sw:1},Ed=function(){return Le(wd)},Ad=Math.cos,Cd=Math.sin,zd=Math.PI,Pd=zd/2,Ld=2*zd,Rd=Math.max,qd=function(){function t(t){var o,u,a,c,s,f,l=t.length,h=[],p=cf(l),d=[],v=[],_=v.groups=new Array(l),y=new Array(l*l);for(o=0,s=-1;++s1e-6)if(Math.abs(f*a-c*s)>1e-6&&i){var h=e-o,p=r-u,d=a*a+c*c,v=h*h+p*p,_=Math.sqrt(d),y=Math.sqrt(l),g=i*Math.tan((Od-Math.acos((d+l-v)/(2*_*y)))/2),m=g/y,x=g/_;Math.abs(m-1)>1e-6&&(this._+="L"+(t+m*s)+","+(n+m*f)),this._+="A"+i+","+i+",0,0,"+ +(f*h>s*p)+","+(this._x1=t+x*a)+","+(this._y1=n+x*c)}else this._+="L"+(this._x1=t)+","+(this._y1=n);else;},arc:function(t,n,e,r,i,o){t=+t,n=+n,e=+e;var u=e*Math.cos(r),a=e*Math.sin(r),c=t+u,s=n+a,f=1^o,l=o?r-i:i-r;if(e<0)throw new Error("negative radius: "+e);null===this._x1?this._+="M"+c+","+s:(Math.abs(this._x1-c)>1e-6||Math.abs(this._y1-s)>1e-6)&&(this._+="L"+c+","+s),e&&(l<0&&(l=l%Fd+Fd),l>Id?this._+="A"+e+","+e+",0,1,"+f+","+(t-u)+","+(n-a)+"A"+e+","+e+",0,1,"+f+","+(this._x1=c)+","+(this._y1=s):l>1e-6&&(this._+="A"+e+","+e+",0,"+ +(l>=Od)+","+f+","+(this._x1=t+e*Math.cos(i))+","+(this._y1=n+e*Math.sin(i))))},rect:function(t,n,e,r){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+n)+"h"+ +e+"v"+ +r+"h"+-e+"Z"},toString:function(){return this._}};var Yd=function(){function t(){var t,a=Ud.call(arguments),c=n.apply(this,a),s=e.apply(this,a),f=+r.apply(this,(a[0]=c,a)),l=i.apply(this,a)-Pd,h=o.apply(this,a)-Pd,p=f*Ad(l),d=f*Cd(l),v=+r.apply(this,(a[0]=s,a)),_=i.apply(this,a)-Pd,y=o.apply(this,a)-Pd;if(u||(u=t=Ue()),u.moveTo(p,d),u.arc(0,0,f,l,h),l===_&&h===y||(u.quadraticCurveTo(0,0,v*Ad(_),v*Cd(_)),u.arc(0,0,v,_,y)),u.quadraticCurveTo(0,0,p,d),u.closePath(),t)return u=null,t+""||null}var n=De,e=Oe,r=Fe,i=Ie,o=Ye,u=null;return t.radius=function(n){return arguments.length?(r="function"==typeof n?n:Dd(+n),t):r},t.startAngle=function(n){return arguments.length?(i="function"==typeof n?n:Dd(+n),t):i},t.endAngle=function(n){return arguments.length?(o="function"==typeof n?n:Dd(+n),t):o},t.source=function(e){return arguments.length?(n=e,t):n},t.target=function(n){return arguments.length?(e=n,t):e},t.context=function(n){return arguments.length?(u=null==n?null:n,t):u},t};Be.prototype=He.prototype={constructor:Be,has:function(t){return"$"+t in this},get:function(t){return this["$"+t]},set:function(t,n){return this["$"+t]=n,this},remove:function(t){var n="$"+t;return n in this&&delete this[n]},clear:function(){for(var t in this)"$"===t[0]&&delete this[t]},keys:function(){var t=[];for(var n in this)"$"===n[0]&&t.push(n.slice(1));return t},values:function(){var t=[];for(var n in this)"$"===n[0]&&t.push(this[n]);return t},entries:function(){var t=[];for(var n in this)"$"===n[0]&&t.push({key:n.slice(1),value:this[n]});return t},size:function(){var t=0;for(var n in this)"$"===n[0]&&++t;return t},empty:function(){for(var t in this)if("$"===t[0])return!1;return!0},each:function(t){for(var n in this)"$"===n[0]&&t(this[n],n.slice(1),this)}};var Bd=function(){function t(n,i,u,a){if(i>=o.length)return null!=r?r(n):null!=e?n.sort(e):n;for(var c,s,f,l=-1,h=n.length,p=o[i++],d=He(),v=u();++lo.length)return t;var i,a=u[e-1];return null!=r&&e>=o.length?i=t.entries():(i=[],t.each(function(t,r){i.push({key:r,values:n(t,e)})})),null!=a?i.sort(function(t,n){return a(t.key,n.key)}):i}var e,r,i,o=[],u=[];return i={object:function(n){return t(n,0,je,Xe)},map:function(n){return t(n,0,$e,Ve)},entries:function(e){return n(t(e,0,$e,Ve),0)},key:function(t){return o.push(t),i},sortKeys:function(t){return u[o.length-1]=t,i},sortValues:function(t){return e=t,i},rollup:function(t){return r=t,i}}},Hd=He.prototype;We.prototype=Ze.prototype={constructor:We,has:Hd.has,add:function(t){return t+="",this["$"+t]=t,this},remove:Hd.remove,clear:Hd.clear,values:Hd.keys,size:Hd.size,empty:Hd.empty,each:Hd.each};var jd=function(t){var n=[];for(var e in t)n.push(e);return n},Xd=function(t){var n=[];for(var e in t)n.push(t[e]);return n},$d=function(t){var n=[];for(var e in t)n.push({key:e,value:t[e]});return n},Vd=function(t){function n(t,n){var r,i,o=e(t,function(t,e){if(r)return r(t,e-1);i=t,r=n?Je(t,n):Ge(t)});return o.columns=i,o}function e(t,n){function e(){if(f>=s)return u;if(i)return i=!1,o;var n,e=f;if(34===t.charCodeAt(e)){for(var r=e;r++t||t>i||r>n||n>o))return this;var u,a,c=i-e,s=this._root;switch(a=(n<(r+o)/2)<<1|t<(e+i)/2){case 0:do{u=new Array(4),u[a]=s,s=u}while(c*=2,i=e+c,o=r+c,t>i||n>o);break;case 1:do{u=new Array(4),u[a]=s,s=u}while(c*=2,e=i-c,o=r+c,e>t||n>o);break;case 2:do{u=new Array(4),u[a]=s,s=u}while(c*=2,i=e+c,r=o-c,t>i||r>n);break;case 3:do{u=new Array(4),u[a]=s,s=u}while(c*=2,e=i-c,r=o-c,e>t||r>n)}this._root&&this._root.length&&(this._root=s)}return this._x0=e,this._y0=r,this._x1=i,this._y1=o,this},sv=function(){var t=[];return this.visit(function(n){if(!n.length)do{t.push(n.data)}while(n=n.next)}),t},fv=function(t){return arguments.length?this.cover(+t[0][0],+t[0][1]).cover(+t[1][0],+t[1][1]):isNaN(this._x0)?void 0:[[this._x0,this._y0],[this._x1,this._y1]]},lv=function(t,n,e,r,i){this.node=t,this.x0=n,this.y0=e,this.x1=r,this.y1=i},hv=function(t,n,e){var r,i,o,u,a,c,s,f=this._x0,l=this._y0,h=this._x1,p=this._y1,d=[],v=this._root;for(v&&d.push(new lv(v,f,l,h,p)),null==e?e=1/0:(f=t-e,l=n-e,h=t+e,p=n+e,e*=e);c=d.pop();)if(!(!(v=c.node)||(i=c.x0)>h||(o=c.y0)>p||(u=c.x1)=y)<<1|t>=_)&&(c=d[d.length-1],d[d.length-1]=d[d.length-1-s],d[d.length-1-s]=c)}else{var g=t-+this._x.call(null,v.data),m=n-+this._y.call(null,v.data),x=g*g+m*m;if(x=(a=(d+_)/2))?d=a:_=a,(f=u>=(c=(v+y)/2))?v=c:y=c,n=p,!(p=p[l=f<<1|s]))return this;if(!p.length)break;(n[l+1&3]||n[l+2&3]||n[l+3&3])&&(e=n,h=l)}for(;p.data!==t;)if(r=p,!(p=p.next))return this;return(i=p.next)&&delete p.next,r?(i?r.next=i:delete r.next,this):n?(i?n[l]=i:delete n[l],(p=n[0]||n[1]||n[2]||n[3])&&p===(n[3]||n[2]||n[1]||n[0])&&!p.length&&(e?e[h]=p:this._root=p),this):(this._root=i,this)},dv=function(){return this._root},vv=function(){var t=0;return this.visit(function(n){if(!n.length)do{++t}while(n=n.next)}),t},_v=function(t){var n,e,r,i,o,u,a=[],c=this._root;for(c&&a.push(new lv(c,this._x0,this._y0,this._x1,this._y1));n=a.pop();)if(!t(c=n.node,r=n.x0,i=n.y0,o=n.x1,u=n.y1)&&c.length){var s=(r+o)/2,f=(i+u)/2;(e=c[3])&&a.push(new lv(e,s,f,o,u)),(e=c[2])&&a.push(new lv(e,r,f,s,u)),(e=c[1])&&a.push(new lv(e,s,i,o,f)),(e=c[0])&&a.push(new lv(e,r,i,s,f))}return this},yv=function(t){var n,e=[],r=[];for(this._root&&e.push(new lv(this._root,this._x0,this._y0,this._x1,this._y1));n=e.pop();){var i=n.node;if(i.length){var o,u=n.x0,a=n.y0,c=n.x1,s=n.y1,f=(u+c)/2,l=(a+s)/2;(o=i[0])&&e.push(new lv(o,u,a,f,l)),(o=i[1])&&e.push(new lv(o,f,a,c,l)),(o=i[2])&&e.push(new lv(o,u,l,f,s)),(o=i[3])&&e.push(new lv(o,f,l,c,s))}r.push(n)}for(;n=r.pop();)t(n.node,n.x0,n.y0,n.x1,n.y1);return this},gv=function(t){return arguments.length?(this._x=t,this):this._x},mv=function(t){return arguments.length?(this._y=t,this):this._y},xv=ir.prototype=or.prototype;xv.copy=function(){var t,n,e=new or(this._x,this._y,this._x0,this._y0,this._x1,this._y1),r=this._root;if(!r)return e;if(!r.length)return e._root=ur(r),e;for(t=[{source:r,target:e._root=new Array(4)}];r=t.pop();)for(var i=0;i<4;++i)(n=r.source[i])&&(n.length?t.push({source:n,target:r.target[i]=new Array(4)}):r.target[i]=ur(n));return e},xv.add=av,xv.addAll=tr,xv.cover=cv,xv.data=sv,xv.extent=fv,xv.find=hv,xv.remove=pv,xv.removeAll=nr,xv.root=dv,xv.size=vv,xv.visit=_v,xv.visitAfter=yv,xv.x=gv,xv.y=mv;var bv,wv=function(t){function n(){function t(t,n,e,r,i){var o=t.data,a=t.r,p=l+a;{if(!o)return n>s+p||rf+p||ic.index){var d=s-o.x-o.vx,v=f-o.y-o.vy,_=d*d+v*v;_t.r&&(t.r=t[n].r)}function r(){if(i){var n,e,r=i.length;for(o=new Array(r),n=0;n1?(null==n?l.remove(t):l.set(t,i(n)),o):l.get(t)},find:function(n,e,r){var i,o,u,a,c,s=0,f=t.length;for(null==r?r=1/0:r*=r,s=0;s1?(p.on(t,n),o):p.on(t)}}},Sv=function(){function t(t){var n,a=i.length,c=ir(i,lr,hr).visitAfter(e);for(u=t,n=0;n=f)){(t.data!==o||t.next)&&(0===i&&(i=uv(),p+=i*i),0===c&&(c=uv(),p+=c*c),p1?r[0]+r.slice(2):r,+t.slice(e+1)]},zv=function(t){return t=Cv(Math.abs(t)),t?t[1]:NaN},Pv=function(t,n){return function(e,r){for(var i=e.length,o=[],u=0,a=t[0],c=0;i>0&&a>0&&(c+a+1>r&&(a=Math.max(1,r-c)),o.push(e.substring(i-=a,i+a)),!((c+=a+1)>r));)a=t[u=(u+1)%t.length];return o.reverse().join(n)}},Lv=function(t){return function(n){return n.replace(/[0-9]/g,function(n){return t[+n]})}},Rv=function(t,n){t=t.toPrecision(n);t:for(var e,r=t.length,i=1,o=-1;i0&&(o=0)}return o>0?t.slice(0,o)+t.slice(e+1):t},qv=function(t,n){var e=Cv(t,n);if(!e)return t+"";var r=e[0],i=e[1],o=i-(bv=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,u=r.length;return o===u?r:o>u?r+new Array(o-u+1).join("0"):o>0?r.slice(0,o)+"."+r.slice(o):"0."+new Array(1-o).join("0")+Cv(t,Math.max(0,n+o-1))[0]},Uv=function(t,n){var e=Cv(t,n);if(!e)return t+"";var r=e[0],i=e[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")},Dv={"":Rv,"%":function(t,n){return(100*t).toFixed(n)},b:function(t){return Math.round(t).toString(2)},c:function(t){return t+""},d:function(t){return Math.round(t).toString(10)},e:function(t,n){return t.toExponential(n)},f:function(t,n){return t.toFixed(n)},g:function(t,n){return t.toPrecision(n)},o:function(t){return Math.round(t).toString(8)},p:function(t,n){return Uv(100*t,n)},r:Uv,s:qv,X:function(t){return Math.round(t).toString(16).toUpperCase()},x:function(t){return Math.round(t).toString(16)}},Ov=/^(?:(.)?([<>=^]))?([+\-\( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?([a-z%])?$/i;pr.prototype=dr.prototype,dr.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(null==this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(null==this.precision?"":"."+Math.max(0,0|this.precision))+this.type};var Fv,Iv=function(t){return t},Yv=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],Bv=function(t){function n(t){function n(t){var n,i,a,f=_,x=y;if("c"===v)x=g(t)+x,t="";else{t=+t;var b=t<0;if(t=g(Math.abs(t),d),b&&0==+t&&(b=!1),f=(b?"("===s?s:"-":"-"===s||"("===s?"":s)+f,x=x+("s"===v?Yv[8+bv/3]:"")+(b&&"("===s?")":""),m)for(n=-1,i=t.length;++n(a=t.charCodeAt(n))||a>57){x=(46===a?o+t.slice(n+1):t.slice(n))+x,t=t.slice(0,n);break}}p&&!l&&(t=r(t,1/0));var w=f.length+t.length+x.length,M=w>1)+f+t+x+M.slice(w);break;default:t=M+f+t+x}return u(t)}t=pr(t);var e=t.fill,c=t.align,s=t.sign,f=t.symbol,l=t.zero,h=t.width,p=t.comma,d=t.precision,v=t.type,_="$"===f?i[0]:"#"===f&&/[boxX]/.test(v)?"0"+v.toLowerCase():"",y="$"===f?i[1]:/[%p]/.test(v)?a:"",g=Dv[v],m=!v||/[defgprs%]/.test(v);return d=null==d?v?6:12:/[gprs]/.test(v)?Math.max(1,Math.min(21,d)):Math.max(0,Math.min(20,d)),n.toString=function(){return t+""},n}function e(t,e){var r=n((t=pr(t),t.type="f",t)),i=3*Math.max(-8,Math.min(8,Math.floor(zv(e)/3))),o=Math.pow(10,-i),u=Yv[8+i/3];return function(t){return r(o*t)+u}}var r=t.grouping&&t.thousands?Pv(t.grouping,t.thousands):Iv,i=t.currency,o=t.decimal,u=t.numerals?Lv(t.numerals):Iv,a=t.percent||"%";return{format:n,formatPrefix:e}};vr({decimal:".",thousands:",",grouping:[3],currency:["$",""]});var Hv=function(t){return Math.max(0,-zv(Math.abs(t)))},jv=function(t,n){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(zv(n)/3)))-zv(Math.abs(t)))},Xv=function(t,n){return t=Math.abs(t),n=Math.abs(n)-t,Math.max(0,zv(n)-zv(t))+1},$v=function(){return new _r};_r.prototype={constructor:_r,reset:function(){this.s=this.t=0},add:function(t){yr(T_,t,this.t),yr(this,T_.s,this.s),this.s?this.t+=T_.t:this.s=T_.t},valueOf:function(){return this.s}};var Vv,Wv,Zv,Gv,Jv,Qv,Kv,t_,n_,e_,r_,i_,o_,u_,a_,c_,s_,f_,l_,h_,p_,d_,v_,__,y_,g_,m_,x_,b_,w_,M_,T_=new _r,k_=1e-6,N_=Math.PI,S_=N_/2,E_=N_/4,A_=2*N_,C_=180/N_,z_=N_/180,P_=Math.abs,L_=Math.atan,R_=Math.atan2,q_=Math.cos,U_=Math.ceil,D_=Math.exp,O_=Math.log,F_=Math.pow,I_=Math.sin,Y_=Math.sign||function(t){return t>0?1:t<0?-1:0},B_=Math.sqrt,H_=Math.tan,j_={Feature:function(t,n){wr(t.geometry,n)},FeatureCollection:function(t,n){for(var e=t.features,r=-1,i=e.length;++rk_?n_=90:J_<-k_&&(Kv=-90),a_[0]=Qv,a_[1]=t_}},K_=function(t){var n,e,r,i,o,u,a;if(n_=t_=-(Qv=Kv=1/0),u_=[],$_(t,Q_),e=u_.length){for(u_.sort(jr),n=1,r=u_[0],o=[r];nHr(r[0],r[1])&&(r[1]=i[1]),Hr(i[0],r[1])>Hr(r[0],r[1])&&(r[0]=i[0])):o.push(r=i);for(u=-1/0,e=o.length-1,n=0,r=o[e];n<=e;r=i,++n)i=o[n],(a=Hr(r[1],i[0]))>u&&(u=a,Qv=i[0],t_=r[1])}return u_=a_=null,Qv===1/0||Kv===1/0?[[NaN,NaN],[NaN,NaN]]:[[Qv,Kv],[t_,n_]]},ty={sphere:br,point:$r,lineStart:Wr,lineEnd:Jr,polygonStart:function(){ty.lineStart=Qr,ty.lineEnd=Kr},polygonEnd:function(){ty.lineStart=Wr,ty.lineEnd=Jr}},ny=function(t){c_=s_=f_=l_=h_=p_=d_=v_=__=y_=g_=0,$_(t,ty);var n=__,e=y_,r=g_,i=n*n+e*e+r*r;return i<1e-12&&(n=p_,e=d_,r=v_,s_2?t[2]*z_:0),n.invert=function(n){return n=t.invert(n[0]*z_,n[1]*z_),n[0]*=C_,n[1]*=C_,n},n},_y=function(){function t(t,n){e.push(t=r(t,n)),t[0]*=C_,t[1]*=C_}function n(){var t=i.apply(this,arguments),n=o.apply(this,arguments)*z_,c=u.apply(this,arguments)*z_;return e=[],r=ri(-t[0]*z_,-t[1]*z_,0).invert,ai(a,n,c,1),t={type:"Polygon",coordinates:[e]},e=r=null,t}var e,r,i=ey([0,0]),o=ey(90),u=ey(6),a={point:t};return n.center=function(t){return arguments.length?(i="function"==typeof t?t:ey([+t[0],+t[1]]),n):i},n.radius=function(t){return arguments.length?(o="function"==typeof t?t:ey(+t),n):o},n.precision=function(t){return arguments.length?(u="function"==typeof t?t:ey(+t),n):u},n},yy=function(){var t,n=[];return{point:function(n,e){t.push([n,e])},lineStart:function(){n.push(t=[])},lineEnd:br,rejoin:function(){n.length>1&&n.push(n.pop().concat(n.shift()))},result:function(){var e=n;return n=[],t=null,e}}},gy=function(t,n,e,r,i,o){var u,a=t[0],c=t[1],s=n[0],f=n[1],l=0,h=1,p=s-a,d=f-c;if(u=e-a,p||!(u>0)){if(u/=p,p<0){if(u0){if(u>h)return;u>l&&(l=u)}if(u=i-a,p||!(u<0)){if(u/=p,p<0){if(u>h)return;u>l&&(l=u)}else if(p>0){if(u0)){if(u/=d,d<0){if(u0){if(u>h)return;u>l&&(l=u)}if(u=o-c,d||!(u<0)){if(u/=d,d<0){if(u>h)return;u>l&&(l=u)}else if(d>0){if(u0&&(t[0]=a+l*p,t[1]=c+l*d),h<1&&(n[0]=a+h*p,n[1]=c+h*d),!0}}}}},my=function(t,n){return P_(t[0]-n[0])=0;--o)i.point((f=s[o])[0],f[1]);else r(h.x,h.p.x,-1,i);h=h.p}h=h.o,s=h.z,p=!p}while(!h.v);i.lineEnd()}}},by=1e9,wy=-by,My=function(){var t,n,e,r=0,i=0,o=960,u=500;return e={stream:function(e){return t&&n===e?t:t=li(r,i,o,u)(n=e)},extent:function(a){return arguments.length?(r=+a[0][0],i=+a[0][1],o=+a[1][0],u=+a[1][1],t=n=null,e):[[r,i],[o,u]]}}},Ty=$v(),ky=function(t,n){var e=n[0],r=n[1],i=[I_(e),-q_(e),0],o=0,u=0;Ty.reset();for(var a=0,c=t.length;a=0?1:-1,T=M*w,k=T>N_,N=d*x;if(Ty.add(R_(N*M*I_(T),v*b+N*q_(T))),o+=k?w+M*A_:w,k^h>=e^g>=e){var S=Pr(Cr(l),Cr(y));qr(S);var E=Pr(i,S);qr(E);var A=(k^w>=0?-1:1)*mr(E[2]);(r>A||r===A&&(S[0]||S[1]))&&(u+=k^w>=0?1:-1)}}return(o<-k_||o0){for(x||(o.polygonStart(),x=!0),o.lineStart(),t=0;t1&&2&i&&u.push(u.pop().concat(u.shift())),d.push(u.filter(Xi))}var p,d,v,_=n(o),y=i.invert(r[0],r[1]),g=yy(),m=n(g),x=!1,b={point:u,lineStart:c,lineEnd:s,polygonStart:function(){b.point=f,b.lineStart=l,b.lineEnd=h,d=[],p=[]},polygonEnd:function(){b.point=u,b.lineStart=c,b.lineEnd=s,d=bf(d);var t=ky(p,y);d.length?(x||(o.polygonStart(),x=!0),xy(d,$i,t,e,o)):t&&(x||(o.polygonStart(),x=!0),o.lineStart(),e(null,null,1,o),o.lineEnd()),x&&(o.polygonEnd(),x=!1),d=p=null},sphere:function(){o.polygonStart(),o.lineStart(),e(null,null,1,o),o.lineEnd(),o.polygonEnd()}};return b}},fg=sg(function(){return!0},Vi,Zi,[-N_,-S_]),lg=function(t,n){function e(e,r,i,o){ai(o,t,n,i,e,r)}function r(t,n){return q_(t)*q_(n)>a}function i(t){var n,e,i,a,f;return{lineStart:function(){a=i=!1,f=1},point:function(l,h){var p,d=[l,h],v=r(l,h),_=c?v?0:u(l,h):v?u(l+(l<0?N_:-N_),h):0;if(!n&&(a=i=v)&&t.lineStart(),v!==i&&(!(p=o(n,d))||my(n,p)||my(d,p))&&(d[0]+=k_,d[1]+=k_,v=r(d[0],d[1])),v!==i)f=0,v?(t.lineStart(),p=o(d,n),t.point(p[0],p[1])):(p=o(n,d),t.point(p[0],p[1]),t.lineEnd()),n=p;else if(s&&n&&c^v){var y;_&e||!(y=o(d,n,!0))||(f=0,c?(t.lineStart(),t.point(y[0][0],y[0][1]),t.point(y[1][0],y[1][1]),t.lineEnd()):(t.point(y[1][0],y[1][1]),t.lineEnd(),t.lineStart(),t.point(y[0][0],y[0][1])))}!v||n&&my(n,d)||t.point(d[0],d[1]),n=d,i=v,e=_},lineEnd:function(){i&&t.lineEnd(),n=null},clean:function(){return f|(a&&i)<<1}}}function o(t,n,e){var r=Cr(t),i=Cr(n),o=[1,0,0],u=Pr(r,i),c=zr(u,u),s=u[0],f=c-s*s;if(!f)return!e&&t;var l=a*c/f,h=-a*s/f,p=Pr(o,u),d=Rr(o,l);Lr(d,Rr(u,h));var v=p,_=zr(d,v),y=zr(v,v),g=_*_-y*(zr(d,d)-1);if(!(g<0)){var m=B_(g),x=Rr(v,(-_-m)/y);if(Lr(x,d),x=Ar(x),!e)return x;var b,w=t[0],M=n[0],T=t[1],k=n[1];M0^x[1]<(P_(x[0]-w)N_^(w<=x[0]&&x[0]<=M)){var A=Rr(v,(-_+m)/y);return Lr(A,d),[x,Ar(A)]}}}function u(n,e){var r=c?t:N_-t,i=0;return n<-r?i|=1:n>r&&(i|=2),e<-r?i|=4:e>r&&(i|=8),i}var a=q_(t),c=a>0,s=P_(a)>k_;return sg(r,i,e,c?[0,-t]:[-N_,t-N_])},hg=function(t){return{stream:Gi(t)}};Ji.prototype={constructor:Ji,point:function(t,n){this.stream.point(t,n)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}};var pg=16,dg=q_(30*z_),vg=function(t,n){return+n?no(t,n):to(t)},_g=Gi({point:function(t,n){this.stream.point(t*z_,n*z_)}}),yg=function(){return io(uo).scale(155.424).center([0,33.6442])},gg=function(){return yg().parallels([29.5,45.5]).scale(1070).translate([480,250]).rotate([96,0]).center([-.6,38.7])},mg=function(){function t(t){var n=t[0],e=t[1];return a=null,i.point(n,e),a||(o.point(n,e),a)||(u.point(n,e),a)}function n(){return e=r=null,t}var e,r,i,o,u,a,c=gg(),s=yg().rotate([154,0]).center([-2,58.5]).parallels([55,65]),f=yg().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(t,n){a=[t,n]}};return t.invert=function(t){var n=c.scale(),e=c.translate(),r=(t[0]-e[0])/n,i=(t[1]-e[1])/n;return(i>=.12&&i<.234&&r>=-.425&&r<-.214?s:i>=.166&&i<.234&&r>=-.214&&r<-.115?f:c).invert(t)},t.stream=function(t){return e&&r===t?e:e=ao([c.stream(r=t),s.stream(t),f.stream(t)])},t.precision=function(t){return arguments.length?(c.precision(t),s.precision(t),f.precision(t),n()):c.precision()},t.scale=function(n){return arguments.length?(c.scale(n),s.scale(.35*n),f.scale(n),t.translate(c.translate())):c.scale()},t.translate=function(t){if(!arguments.length)return c.translate();var e=c.scale(),r=+t[0],a=+t[1];return i=c.translate(t).clipExtent([[r-.455*e,a-.238*e],[r+.455*e,a+.238*e]]).stream(l),o=s.translate([r-.307*e,a+.201*e]).clipExtent([[r-.425*e+k_,a+.12*e+k_],[r-.214*e-k_,a+.234*e-k_]]).stream(l),u=f.translate([r-.205*e,a+.212*e]).clipExtent([[r-.214*e+k_,a+.166*e+k_],[r-.115*e-k_,a+.234*e-k_]]).stream(l),n()},t.fitExtent=function(n,e){return Qi(t,n,e)},t.fitSize=function(n,e){return Ki(t,n,e)},t.scale(1070)},xg=co(function(t){return B_(2/(1+t))});xg.invert=so(function(t){return 2*mr(t/2)});var bg=function(){return eo(xg).scale(124.75).clipAngle(179.999)},wg=co(function(t){return(t=gr(t))&&t/I_(t)});wg.invert=so(function(t){return t});var Mg=function(){return eo(wg).scale(79.4188).clipAngle(179.999)};fo.invert=function(t,n){return[t,2*L_(D_(n))-S_]};var Tg=function(){return lo(fo).scale(961/A_)},kg=function(){return io(po).scale(109.5).parallels([30,30])};vo.invert=vo;var Ng=function(){return eo(vo).scale(152.63)},Sg=function(){return io(_o).scale(131.154).center([0,13.9389])};yo.invert=so(L_);var Eg=function(){return eo(yo).scale(144.049).clipAngle(60)},Ag=function(){function t(){return i=o=null,u}var n,e,r,i,o,u,a=1,c=0,s=0,f=1,l=1,h=Uy,p=null,d=Uy;return u={stream:function(t){return i&&o===t?i:i=h(d(o=t))},clipExtent:function(i){return arguments.length?(d=null==i?(p=n=e=r=null,Uy):li(p=+i[0][0],n=+i[0][1],e=+i[1][0],r=+i[1][1]),t()):null==p?null:[[p,n],[e,r]]},scale:function(n){return arguments.length?(h=go((a=+n)*f,a*l,c,s),t()):a},translate:function(n){return arguments.length?(h=go(a*f,a*l,c=+n[0],s=+n[1]),t()):[c,s]},reflectX:function(n){return arguments.length?(h=go(a*(f=n?-1:1),a*l,c,s),t()):f<0},reflectY:function(n){return arguments.length?(h=go(a*f,a*(l=n?-1:1),c,s),t()):l<0},fitExtent:function(t,n){return Qi(u,t,n)},fitSize:function(t,n){return Ki(u,t,n)}}};mo.invert=so(mr);var Cg=function(){return eo(mo).scale(249.5).clipAngle(90+k_)};xo.invert=so(function(t){return 2*L_(t)});var zg=function(){return eo(xo).scale(250).clipAngle(142)};bo.invert=function(t,n){return[-n,2*L_(D_(t))-S_]};var Pg=function(){var t=lo(bo),n=t.center,e=t.rotate;return t.center=function(t){return arguments.length?n([-t[1],t[0]]):(t=n(),[t[1],-t[0]])},t.rotate=function(t){return arguments.length?e([t[0],t[1],t.length>2?t[2]+90:90]):(t=e(),[t[0],t[1],t[2]-90])},e([0,0,90]).scale(159.155)},Lg=function(){function t(t){var o,u=0;t.eachAfter(function(t){var e=t.children;e?(t.x=Mo(e),t.y=ko(e)):(t.x=o?u+=n(t,o):0,t.y=0,o=t)});var a=So(t),c=Eo(t),s=a.x-n(a,c)/2,f=c.x+n(c,a)/2;return t.eachAfter(i?function(n){n.x=(n.x-t.x)*e,n.y=(t.y-n.y)*r}:function(n){n.x=(n.x-s)/(f-s)*e,n.y=(1-(t.y?n.y/t.y:1))*r})}var n=wo,e=1,r=1,i=!1;return t.separation=function(e){return arguments.length?(n=e,t):n},t.size=function(n){return arguments.length?(i=!1,e=+n[0],r=+n[1],t):i?null:[e,r]},t.nodeSize=function(n){return arguments.length?(i=!0,e=+n[0],r=+n[1],t):i?[e,r]:null},t},Rg=function(){return this.eachAfter(Ao)},qg=function(t){var n,e,r,i,o=this,u=[o];do{for(n=u.reverse(),u=[];o=n.pop();)if(t(o),e=o.children)for(r=0,i=e.length;r=0;--e)i.push(n[e]);return this},Dg=function(t){for(var n,e,r,i=this,o=[i],u=[];i=o.pop();)if(u.push(i),n=i.children)for(e=0,r=n.length;e=0;)e+=r[i].value;n.value=e})},Fg=function(t){return this.eachBefore(function(n){n.children&&n.children.sort(t)})},Ig=function(t){for(var n=this,e=Co(n,t),r=[n];n!==e;)n=n.parent,r.push(n);for(var i=r.length;t!==e;)r.splice(i,0,t),t=t.parent;return r},Yg=function(){for(var t=this,n=[t];t=t.parent;)n.push(t);return n},Bg=function(){var t=[];return this.each(function(n){t.push(n)}),t},Hg=function(){var t=[];return this.eachBefore(function(n){n.children||t.push(n)}),t},jg=function(){var t=this,n=[];return t.each(function(e){e!==t&&n.push({source:e.parent,target:e})}),n};Uo.prototype=zo.prototype={constructor:Uo,count:Rg,each:qg,eachAfter:Dg,eachBefore:Ug,sum:Og,sort:Fg,path:Ig,ancestors:Yg,descendants:Bg,leaves:Hg,links:jg,copy:Po};var Xg=function(t){for(var n=(t=t.slice()).length,e=null,r=e;n;){var i=new Do(t[n-1]);r=r?r.next=i:e=i,t[void 0]=t[--n]}return{head:e,tail:r}},$g=function(t){return Fo(Xg(t),[])},Vg=function(t){return Vo(t),t},Wg=function(t){return function(){return t}},Zg=function(){function t(t){return t.x=e/2,t.y=r/2,n?t.eachBefore(Qo(n)).eachAfter(Ko(i,.5)).eachBefore(tu(1)):t.eachBefore(Qo(Jo)).eachAfter(Ko(Go,1)).eachAfter(Ko(i,t.r/Math.min(e,r))).eachBefore(tu(Math.min(e,r)/(2*t.r))),t}var n=null,e=1,r=1,i=Go;return t.radius=function(e){return arguments.length?(n=Wo(e),t):n},t.size=function(n){return arguments.length?(e=+n[0],r=+n[1],t):[e,r]},t.padding=function(n){return arguments.length?(i="function"==typeof n?n:Wg(+n),t):i},t},Gg=function(t){t.x0=Math.round(t.x0),t.y0=Math.round(t.y0),t.x1=Math.round(t.x1),t.y1=Math.round(t.y1)},Jg=function(t,n,e,r,i){for(var o,u=t.children,a=-1,c=u.length,s=t.value&&(r-n)/t.value;++a0)throw new Error("cycle");return o}var n=nu,e=eu;return t.id=function(e){return arguments.length?(n=Zo(e),t):n},t.parentId=function(n){return arguments.length?(e=Zo(n),t):e},t};su.prototype=Object.create(Uo.prototype);var rm=function(){function t(t){var r=fu(t);if(r.eachAfter(n),r.parent.m=-r.z,r.eachBefore(e),c)t.eachBefore(i);else{var s=t,f=t,l=t;t.eachBefore(function(t){t.xf.x&&(f=t),t.depth>l.depth&&(l=t)});var h=s===f?1:o(s,f)/2,p=h-s.x,d=u/(f.x+h+p),v=a/(l.depth||1);t.eachBefore(function(t){t.x=(t.x+p)*d,t.y=t.depth*v})}return t}function n(t){var n=t.children,e=t.parent.children,i=t.i?e[t.i-1]:null;if(n){au(t);var u=(n[0].z+n[n.length-1].z)/2;i?(t.z=i.z+o(t._,i._),t.m=t.z-u):t.z=u}else i&&(t.z=i.z+o(t._,i._));t.parent.A=r(t,i,t.parent.A||e[0])}function e(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function r(t,n,e){if(n){for(var r,i=t,u=t,a=n,c=i.parent.children[0],s=i.m,f=u.m,l=a.m,h=c.m;a=ou(a),i=iu(i),a&&i;)c=iu(c),u=ou(u),u.a=t,r=a.z+l-i.z-s+o(a._,i._),r>0&&(uu(cu(a,t,e),t,r),s+=r,f+=r),l+=a.m,s+=i.m,h+=c.m,f+=u.m;a&&!ou(u)&&(u.t=a,u.m+=l-f),i&&!iu(c)&&(c.t=i,c.m+=s-h,e=t)}return e}function i(t){t.x*=u,t.y=t.depth*a}var o=ru,u=1,a=1,c=null;return t.separation=function(n){return arguments.length?(o=n,t):o},t.size=function(n){return arguments.length?(c=!1,u=+n[0],a=+n[1],t):c?null:[u,a]},t.nodeSize=function(n){return arguments.length?(c=!0,u=+n[0],a=+n[1],t):c?[u,a]:null},t},im=function(t,n,e,r,i){for(var o,u=t.children,a=-1,c=u.length,s=t.value&&(i-e)/t.value;++a1?n:1)},e}(om),am=function(){function t(t){return t.x0=t.y0=0,t.x1=i,t.y1=o,t.eachBefore(n),u=[0],r&&t.eachBefore(Gg),t}function n(t){var n=u[t.depth],r=t.x0+n,i=t.y0+n,o=t.x1-n,h=t.y1-n;o=n-1){var s=c[t];return s.x0=r,s.y0=i,s.x1=u,s.y1=a,void 0}for(var l=f[t],h=e/2+l,p=t+1,d=n-1;p>>1;f[v]a-i){var g=(r*y+u*_)/e;o(t,p,_,r,i,g,a),o(p,n,y,g,i,u,a)}else{var m=(i*y+a*_)/e;o(t,p,_,r,i,u,m),o(p,n,y,r,m,u,a)}}var u,a,c=t.children,s=c.length,f=new Array(s+1);for(f[0]=a=u=0;u1?n:1)},e}(om),lm=function(t){for(var n,e=-1,r=t.length,i=t[r-1],o=0;++e=0;--n)s.push(t[r[o[n]][2]]);for(n=+a;na!=s>a&&u<(c-e)*(a-r)/(s-r)+e&&(f=!f),c=e,s=r;return f},_m=function(t){for(var n,e,r=-1,i=t.length,o=t[i-1],u=o[0],a=o[1],c=0;++r1);return t+e*o*Math.sqrt(-2*Math.log(i)/i)}}return e.source=t,e}(mm),wm=function t(n){function e(){var t=bm.source(n).apply(this,arguments);return function(){return Math.exp(t())}}return e.source=t,e}(mm),Mm=function t(n){function e(t){return function(){for(var e=0,r=0;r=200&&e<300||304===e){if(o)try{n=o.call(r,s)}catch(t){return void a.call("error",r,t)}else n=s;a.call("load",r,n)}else a.call("error",r,t)}var r,i,o,u,a=v("beforesend","progress","load","error"),c=He(),s=new XMLHttpRequest,f=null,l=null,h=0;if("undefined"==typeof XDomainRequest||"withCredentials"in s||!/^(http(s)?:)?\/\//.test(t)||(s=new XDomainRequest),"onload"in s?s.onload=s.onerror=s.ontimeout=e:s.onreadystatechange=function(t){s.readyState>3&&e(t)},s.onprogress=function(t){a.call("progress",r,t)},r={header:function(t,n){return t=(t+"").toLowerCase(),arguments.length<2?c.get(t):(null==n?c.remove(t):c.set(t,n+""),r)},mimeType:function(t){return arguments.length?(i=null==t?null:t+"",r):i},responseType:function(t){return arguments.length?(u=t,r):u},timeout:function(t){return arguments.length?(h=+t,r):h},user:function(t){return arguments.length<1?f:(f=null==t?null:t+"",r)},password:function(t){return arguments.length<1?l:(l=null==t?null:t+"",r)},response:function(t){return o=t,r},get:function(t,n){return r.send("GET",t,n)},post:function(t,n){return r.send("POST",t,n)},send:function(n,e,o){return s.open(n,t,!0,f,l),null==i||c.has("accept")||c.set("accept",i+",*/*"),s.setRequestHeader&&c.each(function(t,n){s.setRequestHeader(n,t)}),null!=i&&s.overrideMimeType&&s.overrideMimeType(i),null!=u&&(s.responseType=u),h>0&&(s.timeout=h),null==o&&"function"==typeof e&&(o=e,e=null),null!=o&&1===o.length&&(o=bu(o)),null!=o&&r.on("error",o).on("load",function(t){o(null,t)}),a.call("beforesend",r,s),s.send(null==e?null:e),r},abort:function(){return s.abort(),r},on:function(){var t=a.on.apply(a,arguments);return t===a?r:t}},null!=n){if("function"!=typeof n)throw new Error("invalid callback: "+n);return r.get(n)}return r},Sm=function(t,n){return function(e,r){var i=Nm(e).mimeType(t).response(n);if(null!=r){if("function"!=typeof r)throw new Error("invalid callback: "+r);return i.get(r)}return i}},Em=Sm("text/html",function(t){return document.createRange().createContextualFragment(t.responseText)}),Am=Sm("application/json",function(t){return JSON.parse(t.responseText)}),Cm=Sm("text/plain",function(t){return t.responseText}),zm=Sm("application/xml",function(t){var n=t.responseXML;if(!n)throw new Error("parse error");return n}),Pm=function(t,n){return function(e,r,i){arguments.length<3&&(i=r,r=null);var o=Nm(e).mimeType(t);return o.row=function(t){return arguments.length?o.response(Mu(n,r=t)):r},o.row(r),i?o.get(i):o}},Lm=Pm("text/csv",Zd),Rm=Pm("text/tab-separated-values",tv),qm=Array.prototype,Um=qm.map,Dm=qm.slice,Om={name:"implicit"},Fm=function(t){return function(){return t}},Im=function(t){return+t},Ym=[0,1],Bm=function(n,e,r){var o,u=n[0],a=n[n.length-1],c=i(u,a,null==e?10:e);switch(r=pr(null==r?",f":r),r.type){case"s":var s=Math.max(Math.abs(u),Math.abs(a));return null!=r.precision||isNaN(o=jv(c,s))||(r.precision=o),t.formatPrefix(r,s);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(o=Xv(c,Math.max(Math.abs(u),Math.abs(a))))||(r.precision=o-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(o=Hv(c))||(r.precision=o-2*("%"===r.type))}return t.format(r)},Hm=function(t,n){t=t.slice();var e,r=0,i=t.length-1,o=t[r],u=t[i];return u0?t>1?Ju(function(n){n.setTime(Math.floor(n/t)*t)},function(n,e){n.setTime(+n+e*t)},function(n,e){return(e-n)/t}):$m:null};var Vm=$m.range,Wm=6e4,Zm=6048e5,Gm=Ju(function(t){t.setTime(1e3*Math.floor(t/1e3))},function(t,n){t.setTime(+t+1e3*n)},function(t,n){return(n-t)/1e3},function(t){return t.getUTCSeconds()}),Jm=Gm.range,Qm=Ju(function(t){t.setTime(Math.floor(t/Wm)*Wm)},function(t,n){t.setTime(+t+n*Wm)},function(t,n){return(n-t)/Wm},function(t){return t.getMinutes()}),Km=Qm.range,tx=Ju(function(t){var n=t.getTimezoneOffset()*Wm%36e5;n<0&&(n+=36e5),t.setTime(36e5*Math.floor((+t-n)/36e5)+n)},function(t,n){t.setTime(+t+36e5*n)},function(t,n){return(n-t)/36e5},function(t){return t.getHours()}),nx=tx.range,ex=Ju(function(t){t.setHours(0,0,0,0)},function(t,n){t.setDate(t.getDate()+n)},function(t,n){return(n-t-(n.getTimezoneOffset()-t.getTimezoneOffset())*Wm)/864e5},function(t){return t.getDate()-1}),rx=ex.range,ix=Qu(0),ox=Qu(1),ux=Qu(2),ax=Qu(3),cx=Qu(4),sx=Qu(5),fx=Qu(6),lx=ix.range,hx=ox.range,px=ux.range,dx=ax.range,vx=cx.range,_x=sx.range,yx=fx.range,gx=Ju(function(t){t.setDate(1),t.setHours(0,0,0,0)},function(t,n){t.setMonth(t.getMonth()+n)},function(t,n){return n.getMonth()-t.getMonth()+12*(n.getFullYear()-t.getFullYear())},function(t){return t.getMonth()}),mx=gx.range,xx=Ju(function(t){t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,n){t.setFullYear(t.getFullYear()+n)},function(t,n){return n.getFullYear()-t.getFullYear()},function(t){return t.getFullYear()});xx.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Ju(function(n){n.setFullYear(Math.floor(n.getFullYear()/t)*t),n.setMonth(0,1),n.setHours(0,0,0,0)},function(n,e){n.setFullYear(n.getFullYear()+e*t)}):null};var bx=xx.range,wx=Ju(function(t){t.setUTCSeconds(0,0)},function(t,n){t.setTime(+t+n*Wm)},function(t,n){return(n-t)/Wm},function(t){return t.getUTCMinutes()}),Mx=wx.range,Tx=Ju(function(t){t.setUTCMinutes(0,0,0)},function(t,n){t.setTime(+t+36e5*n)},function(t,n){return(n-t)/36e5},function(t){return t.getUTCHours()}),kx=Tx.range,Nx=Ju(function(t){t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCDate(t.getUTCDate()+n)},function(t,n){return(n-t)/864e5},function(t){return t.getUTCDate()-1}),Sx=Nx.range,Ex=Ku(0),Ax=Ku(1),Cx=Ku(2),zx=Ku(3),Px=Ku(4),Lx=Ku(5),Rx=Ku(6),qx=Ex.range,Ux=Ax.range,Dx=Cx.range,Ox=zx.range,Fx=Px.range,Ix=Lx.range,Yx=Rx.range,Bx=Ju(function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCMonth(t.getUTCMonth()+n)},function(t,n){return n.getUTCMonth()-t.getUTCMonth()+12*(n.getUTCFullYear()-t.getUTCFullYear())},function(t){return t.getUTCMonth()}),Hx=Bx.range,jx=Ju(function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCFullYear(t.getUTCFullYear()+n)},function(t,n){return n.getUTCFullYear()-t.getUTCFullYear()},function(t){return t.getUTCFullYear()});jx.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Ju(function(n){n.setUTCFullYear(Math.floor(n.getUTCFullYear()/t)*t),n.setUTCMonth(0,1),n.setUTCHours(0,0,0,0)},function(n,e){n.setUTCFullYear(n.getUTCFullYear()+e*t)}):null};var Xx,$x=jx.range,Vx={"-":"",_:" ",0:"0"},Wx=/^\s*\d+/,Zx=/^%/,Gx=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;Ja({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});var Jx=Date.prototype.toISOString?Qa:t.utcFormat("%Y-%m-%dT%H:%M:%S.%LZ"),Qx=+new Date("2000-01-01T00:00:00.000Z")?Ka:t.utcParse("%Y-%m-%dT%H:%M:%S.%LZ"),Kx=1e3,tb=60*Kx,nb=60*tb,eb=24*nb,rb=7*eb,ib=30*eb,ob=365*eb,ub=function(){return ec(xx,gx,ix,ex,tx,Qm,Gm,$m,t.timeFormat).domain([new Date(2e3,0,1),new Date(2e3,0,2)])},ab=function(){return ec(jx,Bx,Ex,Nx,Tx,wx,Gm,$m,t.utcFormat).domain([Date.UTC(2e3,0,1),Date.UTC(2e3,0,2)])},cb=function(t){return t.match(/.{6}/g).map(function(t){return"#"+t})},sb=cb("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf"),fb=cb("393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6"),lb=cb("3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9"),hb=cb("1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5"),pb=Zh(Wt(300,.5,0),Wt(-240,.5,1)),db=Zh(Wt(-100,.75,.35),Wt(80,1.5,.8)),vb=Zh(Wt(260,.75,.35),Wt(80,1.5,.8)),_b=Wt(),yb=function(t){(t<0||t>1)&&(t-=Math.floor(t));var n=Math.abs(t-.5);return _b.h=360*t-100,_b.s=1.5-1.5*n,_b.l=.8-.9*n,_b+""},gb=rc(cb("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),mb=rc(cb("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),xb=rc(cb("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),bb=rc(cb("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),wb=function(t){return function(){return t}},Mb=Math.abs,Tb=Math.atan2,kb=Math.cos,Nb=Math.max,Sb=Math.min,Eb=Math.sin,Ab=Math.sqrt,Cb=1e-12,zb=Math.PI,Pb=zb/2,Lb=2*zb,Rb=function(){function t(){var t,s,f=+n.apply(this,arguments),l=+e.apply(this,arguments),h=o.apply(this,arguments)-Pb,p=u.apply(this,arguments)-Pb,d=Mb(p-h),v=p>h;if(c||(c=t=Ue()),lCb)if(d>Lb-Cb)c.moveTo(l*kb(h),l*Eb(h)),c.arc(0,0,l,h,p,!v),f>Cb&&(c.moveTo(f*kb(p),f*Eb(p)),c.arc(0,0,f,p,h,v));else{var _,y,g=h,m=p,x=h,b=p,w=d,M=d,T=a.apply(this,arguments)/2,k=T>Cb&&(i?+i.apply(this,arguments):Ab(f*f+l*l)),N=Sb(Mb(l-f)/2,+r.apply(this,arguments)),S=N,E=N;if(k>Cb){var A=uc(k/f*Eb(T)),C=uc(k/l*Eb(T));(w-=2*A)>Cb?(A*=v?1:-1,x+=A,b-=A):(w=0,x=b=(h+p)/2),(M-=2*C)>Cb?(C*=v?1:-1,g+=C,m-=C):(M=0,g=m=(h+p)/2)}var z=l*kb(g),P=l*Eb(g),L=f*kb(b),R=f*Eb(b);if(N>Cb){var q=l*kb(m),U=l*Eb(m),D=f*kb(x),O=f*Eb(x);if(dCb?hc(z,P,D,O,q,U,L,R):[L,R],I=z-F[0],Y=P-F[1],B=q-F[0],H=U-F[1],j=1/Eb(oc((I*B+Y*H)/(Ab(I*I+Y*Y)*Ab(B*B+H*H)))/2),X=Ab(F[0]*F[0]+F[1]*F[1]);S=Sb(N,(f-X)/(j-1)),E=Sb(N,(l-X)/(j+1))}}M>Cb?E>Cb?(_=pc(D,O,z,P,l,E,v),y=pc(q,U,L,R,l,E,v),c.moveTo(_.cx+_.x01,_.cy+_.y01),ECb&&w>Cb?S>Cb?(_=pc(L,R,q,U,f,-S,v),y=pc(z,P,D,O,f,-S,v),c.lineTo(_.cx+_.x01,_.cy+_.y01),S=f;--l)s.point(_[l],y[l]);s.lineEnd(),s.areaEnd()}v&&(_[n]=+e(h,n,t),y[n]=+i(h,n,t),s.point(r?+r(h,n,t):_[n],o?+o(h,n,t):y[n]))}if(p)return s=null,p+""||null}function n(){return Ub().defined(u).curve(c).context(a)}var e=vc,r=null,i=wb(0),o=_c,u=wb(!0),a=null,c=qb,s=null;return t.x=function(n){return arguments.length?(e="function"==typeof n?n:wb(+n),r=null,t):e},t.x0=function(n){return arguments.length?(e="function"==typeof n?n:wb(+n),t):e},t.x1=function(n){return arguments.length?(r=null==n?null:"function"==typeof n?n:wb(+n),t):r},t.y=function(n){return arguments.length?(i="function"==typeof n?n:wb(+n),o=null,t):i},t.y0=function(n){return arguments.length?(i="function"==typeof n?n:wb(+n),t):i},t.y1=function(n){return arguments.length?(o=null==n?null:"function"==typeof n?n:wb(+n),t):o},t.lineX0=t.lineY0=function(){return n().x(e).y(i)},t.lineY1=function(){return n().x(e).y(o)},t.lineX1=function(){return n().x(r).y(i)},t.defined=function(n){return arguments.length?(u="function"==typeof n?n:wb(!!n),t):u},t.curve=function(n){return arguments.length?(c=n,null!=a&&(s=c(a)),t):c},t.context=function(n){return arguments.length?(null==n?a=s=null:s=c(a=n),t):a},t},Ob=function(t,n){return nt?1:n>=t?0:NaN},Fb=function(t){return t},Ib=function(){function t(t){var a,c,s,f,l,h=t.length,p=0,d=new Array(h),v=new Array(h),_=+i.apply(this,arguments),y=Math.min(Lb,Math.max(-Lb,o.apply(this,arguments)-_)),g=Math.min(Math.abs(y)/h,u.apply(this,arguments)),m=g*(y<0?-1:1);for(a=0;a0&&(p+=l);for(null!=e?d.sort(function(t,n){return e(v[t],v[n])}):null!=r&&d.sort(function(n,e){return r(t[n],t[e])}),a=0,s=p?(y-h*m)/p:0;a0?l*s:0)+m,v[c]={data:t[c],index:a,value:l,startAngle:_,endAngle:f,padAngle:g};return v}var n=Fb,e=Ob,r=null,i=wb(0),o=wb(Lb),u=wb(0);return t.value=function(e){return arguments.length?(n="function"==typeof e?e:wb(+e),t):n},t.sortValues=function(n){return arguments.length?(e=n,r=null,t):e},t.sort=function(n){return arguments.length?(r=n,e=null,t):r},t.startAngle=function(n){return arguments.length?(i="function"==typeof n?n:wb(+n),t):i},t.endAngle=function(n){return arguments.length?(o="function"==typeof n?n:wb(+n),t):o},t.padAngle=function(n){return arguments.length?(u="function"==typeof n?n:wb(+n),t):u},t},Yb=gc(qb);yc.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(t,n){this._curve.point(n*Math.sin(t),n*-Math.cos(t))}};var Bb=function(){return mc(Ub().curve(Yb))},Hb=function(){var t=Db().curve(Yb),n=t.curve,e=t.lineX0,r=t.lineX1,i=t.lineY0,o=t.lineY1;return t.angle=t.x,delete t.x,t.startAngle=t.x0,delete t.x0,t.endAngle=t.x1,delete t.x1,t.radius=t.y,delete t.y,t.innerRadius=t.y0,delete t.y0,t.outerRadius=t.y1,delete t.y1,t.lineStartAngle=function(){return mc(e())},delete t.lineX0,t.lineEndAngle=function(){return mc(r())},delete t.lineX1,t.lineInnerRadius=function(){return mc(i())},delete t.lineY0,t.lineOuterRadius=function(){return mc(o())},delete t.lineY1,t.curve=function(t){return arguments.length?n(gc(t)):n()._curve},t},jb=Array.prototype.slice,Xb=function(t,n){return[(n=+n)*Math.cos(t-=Math.PI/2),n*Math.sin(t)]},$b={draw:function(t,n){var e=Math.sqrt(n/zb);t.moveTo(e,0),t.arc(0,0,e,0,Lb)}},Vb={draw:function(t,n){var e=Math.sqrt(n/5)/2;t.moveTo(-3*e,-e),t.lineTo(-e,-e),t.lineTo(-e,-3*e),t.lineTo(e,-3*e),t.lineTo(e,-e),t.lineTo(3*e,-e),t.lineTo(3*e,e),t.lineTo(e,e),t.lineTo(e,3*e),t.lineTo(-e,3*e),t.lineTo(-e,e),t.lineTo(-3*e,e),t.closePath()}},Wb=Math.sqrt(1/3),Zb=2*Wb,Gb={draw:function(t,n){var e=Math.sqrt(n/Zb),r=e*Wb;t.moveTo(0,-e),t.lineTo(r,0),t.lineTo(0,e),t.lineTo(-r,0),t.closePath()}},Jb=Math.sin(zb/10)/Math.sin(7*zb/10),Qb=Math.sin(Lb/10)*Jb,Kb=-Math.cos(Lb/10)*Jb,tw={draw:function(t,n){var e=Math.sqrt(.8908130915292852*n),r=Qb*e,i=Kb*e;t.moveTo(0,-e),t.lineTo(r,i);for(var o=1;o<5;++o){var u=Lb*o/5,a=Math.cos(u),c=Math.sin(u);t.lineTo(c*e,-a*e),t.lineTo(a*r-c*i,c*r+a*i)}t.closePath()}},nw={draw:function(t,n){var e=Math.sqrt(n),r=-e/2;t.rect(r,r,e,e)}},ew=Math.sqrt(3),rw={draw:function(t,n){var e=-Math.sqrt(n/(3*ew));t.moveTo(0,2*e),t.lineTo(-ew*e,-e),t.lineTo(ew*e,-e),t.closePath()}},iw=-.5,ow=Math.sqrt(3)/2,uw=1/Math.sqrt(12),aw=3*(uw/2+1),cw={draw:function(t,n){var e=Math.sqrt(n/aw),r=e/2,i=e*uw,o=r,u=e*uw+e,a=-o,c=u;t.moveTo(r,i),t.lineTo(o,u),t.lineTo(a,c),t.lineTo(iw*r-ow*i,ow*r+iw*i),t.lineTo(iw*o-ow*u,ow*o+iw*u),t.lineTo(iw*a-ow*c,ow*a+iw*c),t.lineTo(iw*r+ow*i,iw*i-ow*r),t.lineTo(iw*o+ow*u,iw*u-ow*o),t.lineTo(iw*a+ow*c,iw*c-ow*a),t.closePath()}},sw=[$b,Vb,Gb,nw,tw,rw,cw],fw=function(){function t(){var t;if(r||(r=t=Ue()),n.apply(this,arguments).draw(r,+e.apply(this,arguments)),t)return r=null,t+""||null}var n=wb($b),e=wb(64),r=null;return t.type=function(e){return arguments.length?(n="function"==typeof e?e:wb(e),t):n},t.size=function(n){return arguments.length?(e="function"==typeof n?n:wb(+n),t):e},t.context=function(n){return arguments.length?(r=null==n?null:n,t):r},t},lw=function(){};Cc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Ac(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Ac(this,t,n)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n}};var hw=function(t){return new Cc(t)};zc.prototype={areaStart:lw,areaEnd:lw,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._x2=t,this._y2=n;break;case 1:this._point=2,this._x3=t,this._y3=n;break;case 2:this._point=3,this._x4=t,this._y4=n,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+n)/6);break;default:Ac(this,t,n)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n}};var pw=function(t){return new zc(t)};Pc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var e=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+n)/6;this._line?this._context.lineTo(e,r):this._context.moveTo(e,r);break;case 3:this._point=4;default:Ac(this,t,n)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n}};var dw=function(t){return new Pc(t)};Lc.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,n=this._y,e=t.length-1;if(e>0)for(var r,i=t[0],o=n[0],u=t[e]-i,a=n[e]-o,c=-1;++c<=e;)r=c/e,this._basis.point(this._beta*t[c]+(1-this._beta)*(i+r*u),this._beta*n[c]+(1-this._beta)*(o+r*a));this._x=this._y=null,this._basis.lineEnd()},point:function(t,n){this._x.push(+t),this._y.push(+n)}};var vw=function t(n){function e(t){return 1===n?new Cc(t):new Lc(t,n)}return e.beta=function(n){return t(+n)},e}(.85);qc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:Rc(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2,this._x1=t,this._y1=n;break;case 2:this._point=3;default:Rc(this,t,n)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1, +this._y1=this._y2,this._y2=n}};var _w=function t(n){function e(t){return new qc(t,n)}return e.tension=function(n){return t(+n)},e}(0);Uc.prototype={areaStart:lw,areaEnd:lw,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._x3=t,this._y3=n;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=n);break;case 2:this._point=3,this._x5=t,this._y5=n;break;default:Rc(this,t,n)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var yw=function t(n){function e(t){return new Uc(t,n)}return e.tension=function(n){return t(+n)},e}(0);Dc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Rc(this,t,n)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var gw=function t(n){function e(t){return new Dc(t,n)}return e.tension=function(n){return t(+n)},e}(0);Fc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){if(t=+t,n=+n,this._point){var e=this._x2-t,r=this._y2-n;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(e*e+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;break;case 2:this._point=3;default:Oc(this,t,n)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var mw=function t(n){function e(t){return n?new Fc(t,n):new qc(t,0)}return e.alpha=function(n){return t(+n)},e}(.5);Ic.prototype={areaStart:lw,areaEnd:lw,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,n){if(t=+t,n=+n,this._point){var e=this._x2-t,r=this._y2-n;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(e*e+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=n;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=n);break;case 2:this._point=3,this._x5=t,this._y5=n;break;default:Oc(this,t,n)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var xw=function t(n){function e(t){return n?new Ic(t,n):new Uc(t,0)}return e.alpha=function(n){return t(+n)},e}(.5);Yc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){if(t=+t,n=+n,this._point){var e=this._x2-t,r=this._y2-n;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(e*e+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Oc(this,t,n)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var bw=function t(n){function e(t){return n?new Yc(t,n):new Dc(t,0)}return e.alpha=function(n){return t(+n)},e}(.5);Bc.prototype={areaStart:lw,areaEnd:lw,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,n){t=+t,n=+n,this._point?this._context.lineTo(t,n):(this._point=1,this._context.moveTo(t,n))}};var ww=function(t){return new Bc(t)};Vc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:$c(this,this._t0,Xc(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){var e=NaN;if(t=+t,n=+n,t!==this._x1||n!==this._y1){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;break;case 2:this._point=3,$c(this,Xc(this,e=jc(this,t,n)),e);break;default:$c(this,this._t0,e=jc(this,t,n))}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n,this._t0=e}}},(Wc.prototype=Object.create(Vc.prototype)).point=function(t,n){Vc.prototype.point.call(this,n,t)},Zc.prototype={moveTo:function(t,n){this._context.moveTo(n,t)},closePath:function(){this._context.closePath()},lineTo:function(t,n){this._context.lineTo(n,t)},bezierCurveTo:function(t,n,e,r,i,o){this._context.bezierCurveTo(n,t,r,e,o,i)}},Qc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,n=this._y,e=t.length;if(e)if(this._line?this._context.lineTo(t[0],n[0]):this._context.moveTo(t[0],n[0]),2===e)this._context.lineTo(t[1],n[1]);else for(var r=Kc(t),i=Kc(n),o=0,u=1;u=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,n),this._context.lineTo(t,n);else{var e=this._x*(1-this._t)+t*this._t;this._context.lineTo(e,this._y),this._context.lineTo(e,n)}}this._x=t,this._y=n}};var Tw=function(t){return new ts(t,.5)},kw=function(t,n){if((i=t.length)>1)for(var e,r,i,o=1,u=t[n[0]],a=u.length;o=0;)e[n]=n;return e},Sw=function(){function t(t){var o,u,a=n.apply(this,arguments),c=t.length,s=a.length,f=new Array(s);for(o=0;o0){for(var e,r,i,o=0,u=t[0].length;o1)for(var e,r,i,o,u,a,c=0,s=t[n[0]].length;c=0?(r[0]=o,r[1]=o+=i):i<0?(r[1]=u,r[0]=u+=i):r[0]=o},Cw=function(t,n){if((e=t.length)>0){for(var e,r=0,i=t[n[0]],o=i.length;r0&&(r=(e=t[n[0]]).length)>0){for(var e,r,i,o=0,u=1;u=a)return null;var c=t-i.site[0],s=n-i.site[1],f=c*c+s*s;do{i=o.cells[r=u],u=null,i.halfedges.forEach(function(e){var r=o.edges[e],a=r.left;if(a!==i.site&&a||(a=r.right)){var c=t-a[0],s=n-a[1],l=c*c+s*s;le?(e+r)/2:Math.min(0,e)||Math.max(0,r),o>i?(i+o)/2:Math.min(0,i)||Math.max(0,o))}function o(t){return[(+t[0][0]+ +t[1][0])/2,(+t[0][1]+ +t[1][1])/2]}function u(t,n,e){t.on("start.zoom",function(){a(this,arguments).start()}).on("interrupt.zoom end.zoom",function(){a(this,arguments).end()}).tween("zoom",function(){var t=this,r=arguments,i=a(t,r),u=m.apply(t,r),c=e||o(u),s=Math.max(u[1][0]-u[0][0],u[1][1]-u[0][1]),f=t.__zoom,l="function"==typeof n?n.apply(t,r):n,h=S(f.invert(c).concat(s/f.k),l.invert(c).concat(s/l.k));return function(t){if(1===t)t=l;else{var n=h(t),e=s/n[2];t=new Os(e,c[0]-n[0]*e,c[1]-n[1]*e)}i.zoom(null,t)}})}function a(t,n){for(var e,r=0,i=E.length;rL}o.zoom("mouse",i(r(o.that.__zoom,o.mouse[0]=Gf(o.that),o.mouse[1]),o.extent))}function e(){u.on("mousemove.zoom mouseup.zoom",null),mt(t.event.view,o.moved),Zw(),o.end()}if(!y&&g.apply(this,arguments)){var o=a(this,arguments),u=Pl(t.event.view).on("mousemove.zoom",n,!0).on("mouseup.zoom",e,!0),c=Gf(this),s=t.event.clientX,f=t.event.clientY;Dl(t.event.view),Is(),o.mouse=[c,this.__zoom.invert(c)],gp(this),o.start()}}function l(){if(g.apply(this,arguments)){var o=this.__zoom,a=Gf(this),c=o.invert(a),s=o.k*(t.event.shiftKey?.5:2),f=i(r(e(o,s),a,c),m.apply(this,arguments));Zw(),N>0?Pl(this).transition().duration(N).call(u,f,a):Pl(this).call(n.transform,f)}}function h(){if(g.apply(this,arguments)){var n,e,r,i,o=a(this,arguments),u=t.event.changedTouches,c=u.length;for(Is(),e=0;e").addClass(errClass); + errorSpan.text(err.message); + $el.after(errorSpan); + } + } else if (display === "block") { + // If block, add an error just after the el, set visibility:none on the + // el, and position the error to be on top of the el. + // Mark it with a unique ID and CSS class so we can remove it later. + $el.css("visibility", "hidden"); + if (err.message !== "") { + var errorDiv = $("
").addClass(errClass).css("position", "absolute") + .css("top", el.offsetTop) + .css("left", el.offsetLeft) + // setting width can push out the page size, forcing otherwise + // unnecessary scrollbars to appear and making it impossible for + // the element to shrink; so use max-width instead + .css("maxWidth", el.offsetWidth) + .css("height", el.offsetHeight); + errorDiv.text(err.message); + $el.after(errorDiv); + + // Really dumb way to keep the size/position of the error in sync with + // the parent element as the window is resized or whatever. + var intId = setInterval(function() { + if (!errorDiv[0].parentElement) { + clearInterval(intId); + return; + } + errorDiv + .css("top", el.offsetTop) + .css("left", el.offsetLeft) + .css("maxWidth", el.offsetWidth) + .css("height", el.offsetHeight); + }, 500); + } + } + }, + clearError: function(el) { + var $el = $(el); + var display = $el.data("restore-display-mode"); + $el.data("restore-display-mode", null); + + if (display === "inline" || display === "inline-block") { + if (display) + $el.css("display", display); + $(el.nextSibling).filter(".htmlwidgets-error").remove(); + } else if (display === "block"){ + $el.css("visibility", "inherit"); + $(el.nextSibling).filter(".htmlwidgets-error").remove(); + } + }, + sizing: {} + }; + + // Called by widget bindings to register a new type of widget. The definition + // object can contain the following properties: + // - name (required) - A string indicating the binding name, which will be + // used by default as the CSS classname to look for. + // - initialize (optional) - A function(el) that will be called once per + // widget element; if a value is returned, it will be passed as the third + // value to renderValue. + // - renderValue (required) - A function(el, data, initValue) that will be + // called with data. Static contexts will cause this to be called once per + // element; Shiny apps will cause this to be called multiple times per + // element, as the data changes. + window.HTMLWidgets.widget = function(definition) { + if (!definition.name) { + throw new Error("Widget must have a name"); + } + if (!definition.type) { + throw new Error("Widget must have a type"); + } + // Currently we only support output widgets + if (definition.type !== "output") { + throw new Error("Unrecognized widget type '" + definition.type + "'"); + } + // TODO: Verify that .name is a valid CSS classname + + // Support new-style instance-bound definitions. Old-style class-bound + // definitions have one widget "object" per widget per type/class of + // widget; the renderValue and resize methods on such widget objects + // take el and instance arguments, because the widget object can't + // store them. New-style instance-bound definitions have one widget + // object per widget instance; the definition that's passed in doesn't + // provide renderValue or resize methods at all, just the single method + // factory(el, width, height) + // which returns an object that has renderValue(x) and resize(w, h). + // This enables a far more natural programming style for the widget + // author, who can store per-instance state using either OO-style + // instance fields or functional-style closure variables (I guess this + // is in contrast to what can only be called C-style pseudo-OO which is + // what we required before). + if (definition.factory) { + definition = createLegacyDefinitionAdapter(definition); + } + + if (!definition.renderValue) { + throw new Error("Widget must have a renderValue function"); + } + + // For static rendering (non-Shiny), use a simple widget registration + // scheme. We also use this scheme for Shiny apps/documents that also + // contain static widgets. + window.HTMLWidgets.widgets = window.HTMLWidgets.widgets || []; + // Merge defaults into the definition; don't mutate the original definition. + var staticBinding = extend({}, defaults, definition); + overrideMethod(staticBinding, "find", function(superfunc) { + return function(scope) { + var results = superfunc(scope); + // Filter out Shiny outputs, we only want the static kind + return filterByClass(results, "html-widget-output", false); + }; + }); + window.HTMLWidgets.widgets.push(staticBinding); + + if (shinyMode) { + // Shiny is running. Register the definition with an output binding. + // The definition itself will not be the output binding, instead + // we will make an output binding object that delegates to the + // definition. This is because we foolishly used the same method + // name (renderValue) for htmlwidgets definition and Shiny bindings + // but they actually have quite different semantics (the Shiny + // bindings receive data that includes lots of metadata that it + // strips off before calling htmlwidgets renderValue). We can't + // just ignore the difference because in some widgets it's helpful + // to call this.renderValue() from inside of resize(), and if + // we're not delegating, then that call will go to the Shiny + // version instead of the htmlwidgets version. + + // Merge defaults with definition, without mutating either. + var bindingDef = extend({}, defaults, definition); + + // This object will be our actual Shiny binding. + var shinyBinding = new Shiny.OutputBinding(); + + // With a few exceptions, we'll want to simply use the bindingDef's + // version of methods if they are available, otherwise fall back to + // Shiny's defaults. NOTE: If Shiny's output bindings gain additional + // methods in the future, and we want them to be overrideable by + // HTMLWidget binding definitions, then we'll need to add them to this + // list. + delegateMethod(shinyBinding, bindingDef, "getId"); + delegateMethod(shinyBinding, bindingDef, "onValueChange"); + delegateMethod(shinyBinding, bindingDef, "onValueError"); + delegateMethod(shinyBinding, bindingDef, "renderError"); + delegateMethod(shinyBinding, bindingDef, "clearError"); + delegateMethod(shinyBinding, bindingDef, "showProgress"); + + // The find, renderValue, and resize are handled differently, because we + // want to actually decorate the behavior of the bindingDef methods. + + shinyBinding.find = function(scope) { + var results = bindingDef.find(scope); + + // Only return elements that are Shiny outputs, not static ones + var dynamicResults = results.filter(".html-widget-output"); + + // It's possible that whatever caused Shiny to think there might be + // new dynamic outputs, also caused there to be new static outputs. + // Since there might be lots of different htmlwidgets bindings, we + // schedule execution for later--no need to staticRender multiple + // times. + if (results.length !== dynamicResults.length) + scheduleStaticRender(); + + return dynamicResults; + }; + + // Wrap renderValue to handle initialization, which unfortunately isn't + // supported natively by Shiny at the time of this writing. + + shinyBinding.renderValue = function(el, data) { + Shiny.renderDependencies(data.deps); + // Resolve strings marked as javascript literals to objects + if (!(data.evals instanceof Array)) data.evals = [data.evals]; + for (var i = 0; data.evals && i < data.evals.length; i++) { + window.HTMLWidgets.evaluateStringMember(data.x, data.evals[i]); + } + if (!bindingDef.renderOnNullValue) { + if (data.x === null) { + el.style.visibility = "hidden"; + return; + } else { + el.style.visibility = "inherit"; + } + } + if (!elementData(el, "initialized")) { + initSizing(el); + + elementData(el, "initialized", true); + if (bindingDef.initialize) { + var rect = el.getBoundingClientRect(); + var result = bindingDef.initialize(el, rect.width, rect.height); + elementData(el, "init_result", result); + } + } + bindingDef.renderValue(el, data.x, elementData(el, "init_result")); + evalAndRun(data.jsHooks.render, elementData(el, "init_result"), [el, data.x]); + }; + + // Only override resize if bindingDef implements it + if (bindingDef.resize) { + shinyBinding.resize = function(el, width, height) { + // Shiny can call resize before initialize/renderValue have been + // called, which doesn't make sense for widgets. + if (elementData(el, "initialized")) { + bindingDef.resize(el, width, height, elementData(el, "init_result")); + } + }; + } + + Shiny.outputBindings.register(shinyBinding, bindingDef.name); + } + }; + + var scheduleStaticRenderTimerId = null; + function scheduleStaticRender() { + if (!scheduleStaticRenderTimerId) { + scheduleStaticRenderTimerId = setTimeout(function() { + scheduleStaticRenderTimerId = null; + window.HTMLWidgets.staticRender(); + }, 1); + } + } + + // Render static widgets after the document finishes loading + // Statically render all elements that are of this widget's class + window.HTMLWidgets.staticRender = function() { + var bindings = window.HTMLWidgets.widgets || []; + forEach(bindings, function(binding) { + var matches = binding.find(document.documentElement); + forEach(matches, function(el) { + var sizeObj = initSizing(el, binding); + + var getSize = function(el) { + if (sizeObj) { + return {w: sizeObj.getWidth(), h: sizeObj.getHeight()} + } else { + var rect = el.getBoundingClientRect(); + return {w: rect.width, h: rect.height} + } + }; + + if (hasClass(el, "html-widget-static-bound")) + return; + el.className = el.className + " html-widget-static-bound"; + + var initResult; + if (binding.initialize) { + var size = getSize(el); + initResult = binding.initialize(el, size.w, size.h); + elementData(el, "init_result", initResult); + } + + if (binding.resize) { + var lastSize = getSize(el); + var resizeHandler = function(e) { + var size = getSize(el); + if (size.w === 0 && size.h === 0) + return; + if (size.w === lastSize.w && size.h === lastSize.h) + return; + lastSize = size; + binding.resize(el, size.w, size.h, initResult); + }; + + on(window, "resize", resizeHandler); + + // This is needed for cases where we're running in a Shiny + // app, but the widget itself is not a Shiny output, but + // rather a simple static widget. One example of this is + // an rmarkdown document that has runtime:shiny and widget + // that isn't in a render function. Shiny only knows to + // call resize handlers for Shiny outputs, not for static + // widgets, so we do it ourselves. + if (window.jQuery) { + window.jQuery(document).on( + "shown.htmlwidgets shown.bs.tab.htmlwidgets shown.bs.collapse.htmlwidgets", + resizeHandler + ); + window.jQuery(document).on( + "hidden.htmlwidgets hidden.bs.tab.htmlwidgets hidden.bs.collapse.htmlwidgets", + resizeHandler + ); + } + + // This is needed for the specific case of ioslides, which + // flips slides between display:none and display:block. + // Ideally we would not have to have ioslide-specific code + // here, but rather have ioslides raise a generic event, + // but the rmarkdown package just went to CRAN so the + // window to getting that fixed may be long. + if (window.addEventListener) { + // It's OK to limit this to window.addEventListener + // browsers because ioslides itself only supports + // such browsers. + on(document, "slideenter", resizeHandler); + on(document, "slideleave", resizeHandler); + } + } + + var scriptData = document.querySelector("script[data-for='" + el.id + "'][type='application/json']"); + if (scriptData) { + var data = JSON.parse(scriptData.textContent || scriptData.text); + // Resolve strings marked as javascript literals to objects + if (!(data.evals instanceof Array)) data.evals = [data.evals]; + for (var k = 0; data.evals && k < data.evals.length; k++) { + window.HTMLWidgets.evaluateStringMember(data.x, data.evals[k]); + } + binding.renderValue(el, data.x, initResult); + evalAndRun(data.jsHooks.render, initResult, [el, data.x]); + } + }); + }); + + invokePostRenderHandlers(); + } + + + function has_jQuery3() { + if (!window.jQuery) { + return false; + } + var $version = window.jQuery.fn.jquery; + var $major_version = parseInt($version.split(".")[0]); + return $major_version >= 3; + } + + /* + / Shiny 1.4 bumped jQuery from 1.x to 3.x which means jQuery's + / on-ready handler (i.e., $(fn)) is now asyncronous (i.e., it now + / really means $(setTimeout(fn)). + / https://jquery.com/upgrade-guide/3.0/#breaking-change-document-ready-handlers-are-now-asynchronous + / + / Since Shiny uses $() to schedule initShiny, shiny>=1.4 calls initShiny + / one tick later than it did before, which means staticRender() is + / called renderValue() earlier than (advanced) widget authors might be expecting. + / https://github.com/rstudio/shiny/issues/2630 + / + / For a concrete example, leaflet has some methods (e.g., updateBounds) + / which reference Shiny methods registered in initShiny (e.g., setInputValue). + / Since leaflet is privy to this life-cycle, it knows to use setTimeout() to + / delay execution of those methods (until Shiny methods are ready) + / https://github.com/rstudio/leaflet/blob/18ec981/javascript/src/index.js#L266-L268 + / + / Ideally widget authors wouldn't need to use this setTimeout() hack that + / leaflet uses to call Shiny methods on a staticRender(). In the long run, + / the logic initShiny should be broken up so that method registration happens + / right away, but binding happens later. + */ + function maybeStaticRenderLater() { + if (shinyMode && has_jQuery3()) { + window.jQuery(window.HTMLWidgets.staticRender); + } else { + window.HTMLWidgets.staticRender(); + } + } + + if (document.addEventListener) { + document.addEventListener("DOMContentLoaded", function() { + document.removeEventListener("DOMContentLoaded", arguments.callee, false); + maybeStaticRenderLater(); + }, false); + } else if (document.attachEvent) { + document.attachEvent("onreadystatechange", function() { + if (document.readyState === "complete") { + document.detachEvent("onreadystatechange", arguments.callee); + maybeStaticRenderLater(); + } + }); + } + + + window.HTMLWidgets.getAttachmentUrl = function(depname, key) { + // If no key, default to the first item + if (typeof(key) === "undefined") + key = 1; + + var link = document.getElementById(depname + "-" + key + "-attachment"); + if (!link) { + throw new Error("Attachment " + depname + "/" + key + " not found in document"); + } + return link.getAttribute("href"); + }; + + window.HTMLWidgets.dataframeToD3 = function(df) { + var names = []; + var length; + for (var name in df) { + if (df.hasOwnProperty(name)) + names.push(name); + if (typeof(df[name]) !== "object" || typeof(df[name].length) === "undefined") { + throw new Error("All fields must be arrays"); + } else if (typeof(length) !== "undefined" && length !== df[name].length) { + throw new Error("All fields must be arrays of the same length"); + } + length = df[name].length; + } + var results = []; + var item; + for (var row = 0; row < length; row++) { + item = {}; + for (var col = 0; col < names.length; col++) { + item[names[col]] = df[names[col]][row]; + } + results.push(item); + } + return results; + }; + + window.HTMLWidgets.transposeArray2D = function(array) { + if (array.length === 0) return array; + var newArray = array[0].map(function(col, i) { + return array.map(function(row) { + return row[i] + }) + }); + return newArray; + }; + // Split value at splitChar, but allow splitChar to be escaped + // using escapeChar. Any other characters escaped by escapeChar + // will be included as usual (including escapeChar itself). + function splitWithEscape(value, splitChar, escapeChar) { + var results = []; + var escapeMode = false; + var currentResult = ""; + for (var pos = 0; pos < value.length; pos++) { + if (!escapeMode) { + if (value[pos] === splitChar) { + results.push(currentResult); + currentResult = ""; + } else if (value[pos] === escapeChar) { + escapeMode = true; + } else { + currentResult += value[pos]; + } + } else { + currentResult += value[pos]; + escapeMode = false; + } + } + if (currentResult !== "") { + results.push(currentResult); + } + return results; + } + // Function authored by Yihui/JJ Allaire + window.HTMLWidgets.evaluateStringMember = function(o, member) { + var parts = splitWithEscape(member, '.', '\\'); + for (var i = 0, l = parts.length; i < l; i++) { + var part = parts[i]; + // part may be a character or 'numeric' member name + if (o !== null && typeof o === "object" && part in o) { + if (i == (l - 1)) { // if we are at the end of the line then evalulate + if (typeof o[part] === "string") + o[part] = tryEval(o[part]); + } else { // otherwise continue to next embedded object + o = o[part]; + } + } + } + }; + + // Retrieve the HTMLWidget instance (i.e. the return value of an + // HTMLWidget binding's initialize() or factory() function) + // associated with an element, or null if none. + window.HTMLWidgets.getInstance = function(el) { + return elementData(el, "init_result"); + }; + + // Finds the first element in the scope that matches the selector, + // and returns the HTMLWidget instance (i.e. the return value of + // an HTMLWidget binding's initialize() or factory() function) + // associated with that element, if any. If no element matches the + // selector, or the first matching element has no HTMLWidget + // instance associated with it, then null is returned. + // + // The scope argument is optional, and defaults to window.document. + window.HTMLWidgets.find = function(scope, selector) { + if (arguments.length == 1) { + selector = scope; + scope = document; + } + + var el = scope.querySelector(selector); + if (el === null) { + return null; + } else { + return window.HTMLWidgets.getInstance(el); + } + }; + + // Finds all elements in the scope that match the selector, and + // returns the HTMLWidget instances (i.e. the return values of + // an HTMLWidget binding's initialize() or factory() function) + // associated with the elements, in an array. If elements that + // match the selector don't have an associated HTMLWidget + // instance, the returned array will contain nulls. + // + // The scope argument is optional, and defaults to window.document. + window.HTMLWidgets.findAll = function(scope, selector) { + if (arguments.length == 1) { + selector = scope; + scope = document; + } + + var nodes = scope.querySelectorAll(selector); + var results = []; + for (var i = 0; i < nodes.length; i++) { + results.push(window.HTMLWidgets.getInstance(nodes[i])); + } + return results; + }; + + var postRenderHandlers = []; + function invokePostRenderHandlers() { + while (postRenderHandlers.length) { + var handler = postRenderHandlers.shift(); + if (handler) { + handler(); + } + } + } + + // Register the given callback function to be invoked after the + // next time static widgets are rendered. + window.HTMLWidgets.addPostRenderHandler = function(callback) { + postRenderHandlers.push(callback); + }; + + // Takes a new-style instance-bound definition, and returns an + // old-style class-bound definition. This saves us from having + // to rewrite all the logic in this file to accomodate both + // types of definitions. + function createLegacyDefinitionAdapter(defn) { + var result = { + name: defn.name, + type: defn.type, + initialize: function(el, width, height) { + return defn.factory(el, width, height); + }, + renderValue: function(el, x, instance) { + return instance.renderValue(x); + }, + resize: function(el, width, height, instance) { + return instance.resize(width, height); + } + }; + + if (defn.find) + result.find = defn.find; + if (defn.renderError) + result.renderError = defn.renderError; + if (defn.clearError) + result.clearError = defn.clearError; + + return result; + } +})(); diff --git a/docs/reference/libs/sankey-1/d3-4.9.1/LICENSE b/docs/reference/libs/sankey-1/d3-4.9.1/LICENSE new file mode 100644 index 0000000..1d9d875 --- /dev/null +++ b/docs/reference/libs/sankey-1/d3-4.9.1/LICENSE @@ -0,0 +1,27 @@ +Copyright 2010-2017 Mike Bostock +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the author nor the names of contributors may be used to + endorse or promote products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/docs/reference/libs/sankey-1/d3-4.9.1/d3.min.js b/docs/reference/libs/sankey-1/d3-4.9.1/d3.min.js new file mode 100644 index 0000000..8a0709b --- /dev/null +++ b/docs/reference/libs/sankey-1/d3-4.9.1/d3.min.js @@ -0,0 +1,8 @@ +// https://d3js.org Version 4.9.1. Copyright 2017 Mike Bostock. +(function(t,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n(t.d3=t.d3||{})})(this,function(t){"use strict";function n(t){return function(n,e){return js(t(n),e)}}function e(t,n){return[t,n]}function r(t,n,e){var r=(n-t)/Math.max(0,e),i=Math.floor(Math.log(r)/Math.LN10),o=r/Math.pow(10,i);return i>=0?(o>=sf?10:o>=ff?5:o>=lf?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(o>=sf?10:o>=ff?5:o>=lf?2:1)}function i(t,n,e){var r=Math.abs(n-t)/Math.max(0,e),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),o=r/i;return o>=sf?i*=10:o>=ff?i*=5:o>=lf&&(i*=2),n=0&&(e=t.slice(r+1),t=t.slice(0,r)),t&&!n.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}})}function g(t,n){for(var e,r=0,i=t.length;r=0&&(n=t.slice(e+1),t=t.slice(0,e)),{type:t,name:n}})}function S(t){return function(){var n=this.__on;if(n){for(var e,r=0,i=-1,o=n.length;rn?1:t>=n?0:NaN}function U(t){return function(){this.removeAttribute(t)}}function D(t){return function(){this.removeAttributeNS(t.space,t.local)}}function O(t,n){return function(){this.setAttribute(t,n)}}function F(t,n){return function(){this.setAttributeNS(t.space,t.local,n)}}function I(t,n){return function(){var e=n.apply(this,arguments);null==e?this.removeAttribute(t):this.setAttribute(t,e)}}function Y(t,n){return function(){var e=n.apply(this,arguments);null==e?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,e)}}function B(t){return function(){this.style.removeProperty(t)}}function H(t,n,e){return function(){this.style.setProperty(t,n,e)}}function j(t,n,e){return function(){var r=n.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,e)}}function X(t,n){return t.style.getPropertyValue(n)||gl(t).getComputedStyle(t,null).getPropertyValue(n)}function $(t){return function(){delete this[t]}}function V(t,n){return function(){this[t]=n}}function W(t,n){return function(){var e=n.apply(this,arguments);null==e?delete this[t]:this[t]=e}}function Z(t){return t.trim().split(/^|\s+/)}function G(t){return t.classList||new J(t)}function J(t){this._node=t,this._names=Z(t.getAttribute("class")||"")}function Q(t,n){for(var e=G(t),r=-1,i=n.length;++r>8&15|n>>4&240,n>>4&15|240&n,(15&n)<<4|15&n,1)):(n=Xl.exec(t))?St(parseInt(n[1],16)):(n=$l.exec(t))?new zt(n[1],n[2],n[3],1):(n=Vl.exec(t))?new zt(255*n[1]/100,255*n[2]/100,255*n[3]/100,1):(n=Wl.exec(t))?Et(n[1],n[2],n[3],n[4]):(n=Zl.exec(t))?Et(255*n[1]/100,255*n[2]/100,255*n[3]/100,n[4]):(n=Gl.exec(t))?Pt(n[1],n[2]/100,n[3]/100,1):(n=Jl.exec(t))?Pt(n[1],n[2]/100,n[3]/100,n[4]):Ql.hasOwnProperty(t)?St(Ql[t]):"transparent"===t?new zt(NaN,NaN,NaN,0):null}function St(t){return new zt(t>>16&255,t>>8&255,255&t,1)}function Et(t,n,e,r){return r<=0&&(t=n=e=NaN),new zt(t,n,e,r)}function At(t){return t instanceof kt||(t=Nt(t)),t?(t=t.rgb(),new zt(t.r,t.g,t.b,t.opacity)):new zt}function Ct(t,n,e,r){return 1===arguments.length?At(t):new zt(t,n,e,null==r?1:r)}function zt(t,n,e,r){this.r=+t,this.g=+n,this.b=+e,this.opacity=+r}function Pt(t,n,e,r){return r<=0?t=n=e=NaN:e<=0||e>=1?t=n=NaN:n<=0&&(t=NaN),new qt(t,n,e,r)}function Lt(t){if(t instanceof qt)return new qt(t.h,t.s,t.l,t.opacity);if(t instanceof kt||(t=Nt(t)),!t)return new qt;if(t instanceof qt)return t;t=t.rgb();var n=t.r/255,e=t.g/255,r=t.b/255,i=Math.min(n,e,r),o=Math.max(n,e,r),u=NaN,a=o-i,c=(o+i)/2;return a?(u=n===o?(e-r)/a+6*(e0&&c<1?0:u,new qt(u,a,c,t.opacity)}function Rt(t,n,e,r){return 1===arguments.length?Lt(t):new qt(t,n,e,null==r?1:r)}function qt(t,n,e,r){this.h=+t,this.s=+n,this.l=+e,this.opacity=+r}function Ut(t,n,e){return 255*(t<60?n+(e-n)*t/60:t<180?e:t<240?n+(e-n)*(240-t)/60:n)}function Dt(t){if(t instanceof Ft)return new Ft(t.l,t.a,t.b,t.opacity);if(t instanceof $t){var n=t.h*Kl;return new Ft(t.l,Math.cos(n)*t.c,Math.sin(n)*t.c,t.opacity)}t instanceof zt||(t=At(t));var e=Ht(t.r),r=Ht(t.g),i=Ht(t.b),o=It((.4124564*e+.3575761*r+.1804375*i)/nh),u=It((.2126729*e+.7151522*r+.072175*i)/eh);return new Ft(116*u-16,500*(o-u),200*(u-It((.0193339*e+.119192*r+.9503041*i)/rh)),t.opacity)}function Ot(t,n,e,r){return 1===arguments.length?Dt(t):new Ft(t,n,e,null==r?1:r)}function Ft(t,n,e,r){this.l=+t,this.a=+n,this.b=+e,this.opacity=+r}function It(t){return t>ah?Math.pow(t,1/3):t/uh+ih}function Yt(t){return t>oh?t*t*t:uh*(t-ih)}function Bt(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function Ht(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function jt(t){if(t instanceof $t)return new $t(t.h,t.c,t.l,t.opacity);t instanceof Ft||(t=Dt(t));var n=Math.atan2(t.b,t.a)*th;return new $t(n<0?n+360:n,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function Xt(t,n,e,r){return 1===arguments.length?jt(t):new $t(t,n,e,null==r?1:r)}function $t(t,n,e,r){this.h=+t,this.c=+n,this.l=+e,this.opacity=+r}function Vt(t){if(t instanceof Zt)return new Zt(t.h,t.s,t.l,t.opacity);t instanceof zt||(t=At(t));var n=t.r/255,e=t.g/255,r=t.b/255,i=(vh*r+ph*n-dh*e)/(vh+ph-dh),o=r-i,u=(hh*(e-i)-fh*o)/lh,a=Math.sqrt(u*u+o*o)/(hh*i*(1-i)),c=a?Math.atan2(u,o)*th-120:NaN;return new Zt(c<0?c+360:c,a,i,t.opacity)}function Wt(t,n,e,r){return 1===arguments.length?Vt(t):new Zt(t,n,e,null==r?1:r)}function Zt(t,n,e,r){this.h=+t,this.s=+n,this.l=+e,this.opacity=+r}function Gt(t,n,e,r,i){var o=t*t,u=o*t;return((1-3*t+3*o-u)*n+(4-6*o+3*u)*e+(1+3*t+3*o-3*u)*r+u*i)/6}function Jt(t,n){return function(e){return t+e*n}}function Qt(t,n,e){return t=Math.pow(t,e),n=Math.pow(n,e)-t,e=1/e,function(r){return Math.pow(t+r*n,e)}}function Kt(t,n){var e=n-t;return e?Jt(t,e>180||e<-180?e-360*Math.round(e/360):e):Th(isNaN(t)?n:t)}function tn(t){return 1==(t=+t)?nn:function(n,e){return e-n?Qt(n,e,t):Th(isNaN(n)?e:n)}}function nn(t,n){var e=n-t;return e?Jt(t,e):Th(isNaN(t)?n:t)}function en(t){return function(n){var e,r,i=n.length,o=new Array(i),u=new Array(i),a=new Array(i);for(e=0;e180?n+=360:n-t>180&&(t+=360),o.push({i:e.push(i(e)+"rotate(",null,r)-2,x:Ch(t,n)})):n&&e.push(i(e)+"rotate("+n+r)}function a(t,n,e,o){t!==n?o.push({i:e.push(i(e)+"skewX(",null,r)-2,x:Ch(t,n)}):n&&e.push(i(e)+"skewX("+n+r)}function c(t,n,e,r,o,u){if(t!==e||n!==r){var a=o.push(i(o)+"scale(",null,",",null,")");u.push({i:a-4,x:Ch(t,e)},{i:a-2,x:Ch(n,r)})}else 1===e&&1===r||o.push(i(o)+"scale("+e+","+r+")")}return function(n,e){var r=[],i=[];return n=t(n),e=t(e),o(n.translateX,n.translateY,e.translateX,e.translateY,r,i),u(n.rotate,e.rotate,r,i),a(n.skewX,e.skewX,r,i),c(n.scaleX,n.scaleY,e.scaleX,e.scaleY,r,i),n=e=null,function(t){for(var n,e=-1,o=i.length;++e=0&&n._call.call(null,t),n=n._next;--Jh}function bn(){ep=(np=ip.now())+rp,Jh=Qh=0;try{xn()}finally{Jh=0,Mn(),ep=0}}function wn(){var t=ip.now(),n=t-np;n>tp&&(rp-=n,np=t)}function Mn(){for(var t,n,e=xh,r=1/0;e;)e._call?(r>e._time&&(r=e._time),t=e,e=e._next):(n=e._next,e._next=null,e=t?t._next=n:xh=n);bh=t,Tn(r)}function Tn(t){if(!Jh){Qh&&(Qh=clearTimeout(Qh));var n=t-ep;n>24?(t<1/0&&(Qh=setTimeout(bn,n)),Kh&&(Kh=clearInterval(Kh))):(Kh||(np=ep,Kh=setInterval(wn,tp)),Jh=1,op(bn))}}function kn(t,n){var e=t.__transition;if(!e||!(e=e[n])||e.state>fp)throw new Error("too late");return e}function Nn(t,n){var e=t.__transition;if(!e||!(e=e[n])||e.state>hp)throw new Error("too late");return e}function Sn(t,n){var e=t.__transition;if(!e||!(e=e[n]))throw new Error("too late");return e}function En(t,n,e){function r(t){e.state=lp,e.timer.restart(i,e.delay,e.time),e.delay<=t&&i(t-e.delay)}function i(r){var s,f,l,h;if(e.state!==lp)return u();for(s in c)if(h=c[s],h.name===e.name){if(h.state===pp)return up(i);h.state===dp?(h.state=_p,h.timer.stop(),h.on.call("interrupt",t,t.__data__,h.index,h.group),delete c[s]):+s=0&&(t=t.slice(0,n)),!t||"start"===t})}function $n(t,n,e){var r,i,o=Xn(n)?kn:Nn;return function(){var u=o(this,t),a=u.on;a!==r&&(i=(r=a).copy()).on(n,e),u.on=i}}function Vn(t){return function(){var n=this.parentNode;for(var e in this.__transition)if(+e!==t)return;n&&n.removeChild(this)}}function Wn(t,n){var e,r,i;return function(){var o=X(this,t),u=(this.style.removeProperty(t),X(this,t));return o===u?null:o===e&&u===r?i:i=n(e=o,r=u)}}function Zn(t){return function(){this.style.removeProperty(t)}}function Gn(t,n,e){var r,i;return function(){var o=X(this,t);return o===e?null:o===r?i:i=n(r=o,e)}}function Jn(t,n,e){var r,i,o;return function(){var u=X(this,t),a=e(this);return null==a&&(this.style.removeProperty(t),a=X(this,t)),u===a?null:u===r&&a===i?o:o=n(r=u,i=a)}}function Qn(t,n,e){function r(){var r=this,i=n.apply(r,arguments);return i&&function(n){r.style.setProperty(t,i(n),e)}}return r._value=n,r}function Kn(t){return function(){this.textContent=t}}function te(t){return function(){var n=t(this);this.textContent=null==n?"":n}}function ne(t,n,e,r){this._groups=t,this._parents=n,this._name=e,this._id=r}function ee(t){return yt().transition(t)}function re(){return++Fp}function ie(t){return+t}function oe(t){return t*t}function ue(t){return t*(2-t)}function ae(t){return((t*=2)<=1?t*t:--t*(2-t)+1)/2}function ce(t){return t*t*t}function se(t){return--t*t*t+1}function fe(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}function le(t){return 1-Math.cos(t*Xp)}function he(t){return Math.sin(t*Xp)}function pe(t){return(1-Math.cos(jp*t))/2}function de(t){return Math.pow(2,10*t-10)}function ve(t){return 1-Math.pow(2,-10*t)}function _e(t){return((t*=2)<=1?Math.pow(2,10*t-10):2-Math.pow(2,10-10*t))/2}function ye(t){return 1-Math.sqrt(1-t*t)}function ge(t){return Math.sqrt(1- --t*t)}function me(t){return((t*=2)<=1?1-Math.sqrt(1-t*t):Math.sqrt(1-(t-=2)*t)+1)/2}function xe(t){return 1-be(1-t)}function be(t){return(t=+t)<$p?nd*t*t:tMath.abs(t[1]-O[1])?M=!0:w=!0),O=t,b=!0,vd(),o()}function o(){var t;switch(m=O[0]-D[0],x=O[1]-D[1],N){case yd:case _d:S&&(m=Math.max(P-l,Math.min(R-v,m)),h=l+m,_=v+m),E&&(x=Math.max(L-p,Math.min(q-y,x)),d=p+x,g=y+x);break;case gd:S<0?(m=Math.max(P-l,Math.min(R-l,m)),h=l+m,_=v):S>0&&(m=Math.max(P-v,Math.min(R-v,m)),h=l,_=v+m),E<0?(x=Math.max(L-p,Math.min(q-p,x)),d=p+x,g=y):E>0&&(x=Math.max(L-y,Math.min(q-y,x)),d=p,g=y+x);break;case md:S&&(h=Math.max(P,Math.min(R,l-m*S)),_=Math.max(P,Math.min(R,v+m*S))),E&&(d=Math.max(L,Math.min(q,p-x*E)),g=Math.max(L,Math.min(q,y+x*E)))}_0&&(l=h-m),E<0?y=g-x:E>0&&(p=d-x),N=yd,Y.attr("cursor",Md.selection),o());break;default:return}vd()}function s(){switch(t.event.keyCode){case 16:U&&(w=M=U=!1,o());break;case 18:N===md&&(S<0?v=_:S>0&&(l=h),E<0?y=g:E>0&&(p=d),N=gd,o());break;case 32:N===yd&&(t.event.altKey?(S&&(v=_-m*S,l=h+m*S),E&&(y=g-x*E,p=d+x*E),N=md):(S<0?v=_:S>0&&(l=h),E<0?y=g:E>0&&(p=d),N=gd),Y.attr("cursor",Md[k]),o());break;default:return}vd()}if(t.event.touches){if(t.event.changedTouches.length=(o=(v+y)/2))?v=o:y=o,(f=e>=(u=(_+g)/2))?_=u:g=u,i=p,!(p=p[l=f<<1|s]))return i[l]=d,t;if(a=+t._x.call(null,p.data),c=+t._y.call(null,p.data),n===a&&e===c)return d.next=p,i?i[l]=d:t._root=d,t;do{i=i?i[l]=new Array(4):t._root=new Array(4),(s=n>=(o=(v+y)/2))?v=o:y=o,(f=e>=(u=(_+g)/2))?_=u:g=u}while((l=f<<1|s)==(h=(c>=u)<<1|a>=o));return i[h]=p,i[l]=d,t}function tr(t){var n,e,r,i,o=t.length,u=new Array(o),a=new Array(o),c=1/0,s=1/0,f=-1/0,l=-1/0;for(e=0;ef&&(f=r),il&&(l=i));for(f",i=n[3]||"-",o=n[4]||"",u=!!n[5],a=n[6]&&+n[6],c=!!n[7],s=n[8]&&+n[8].slice(1),f=n[9]||"";"n"===f?(c=!0,f="g"):Dv[f]||(f=""),(u||"0"===e&&"="===r)&&(u=!0,e="0",r="="),this.fill=e,this.align=r, +this.sign=i,this.symbol=o,this.zero=u,this.width=a,this.comma=c,this.precision=s,this.type=f}function vr(n){return Fv=Bv(n),t.format=Fv.format,t.formatPrefix=Fv.formatPrefix,Fv}function _r(){this.reset()}function yr(t,n,e){var r=t.s=n+e,i=r-n,o=r-i;t.t=n-o+(e-i)}function gr(t){return t>1?0:t<-1?N_:Math.acos(t)}function mr(t){return t>1?S_:t<-1?-S_:Math.asin(t)}function xr(t){return(t=I_(t/2))*t}function br(){}function wr(t,n){t&&X_.hasOwnProperty(t.type)&&X_[t.type](t,n)}function Mr(t,n,e){var r,i=-1,o=t.length-e;for(n.lineStart();++i=0?1:-1,i=r*e,o=q_(n),u=I_(n),a=Jv*u,c=Gv*o+a*q_(i),s=a*r*I_(i);V_.add(R_(s,c)),Zv=t,Gv=o,Jv=u}function Ar(t){return[R_(t[1],t[0]),mr(t[2])]}function Cr(t){var n=t[0],e=t[1],r=q_(e);return[r*q_(n),r*I_(n),I_(e)]}function zr(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]}function Pr(t,n){return[t[1]*n[2]-t[2]*n[1],t[2]*n[0]-t[0]*n[2],t[0]*n[1]-t[1]*n[0]]}function Lr(t,n){t[0]+=n[0],t[1]+=n[1],t[2]+=n[2]}function Rr(t,n){return[t[0]*n,t[1]*n,t[2]*n]}function qr(t){var n=B_(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=n,t[1]/=n,t[2]/=n}function Ur(t,n){u_.push(a_=[Qv=t,t_=t]),nn_&&(n_=n)}function Dr(t,n){var e=Cr([t*z_,n*z_]);if(o_){var r=Pr(o_,e),i=[r[1],-r[0],0],o=Pr(i,r);qr(o),o=Ar(o);var u,a=t-e_,c=a>0?1:-1,s=o[0]*C_*c,f=P_(a)>180;f^(c*e_n_&&(n_=u):(s=(s+360)%360-180,f^(c*e_n_&&(n_=n))),f?tHr(Qv,t_)&&(t_=t):Hr(t,t_)>Hr(Qv,t_)&&(Qv=t):t_>=Qv?(tt_&&(t_=t)):t>e_?Hr(Qv,t)>Hr(Qv,t_)&&(t_=t):Hr(t,t_)>Hr(Qv,t_)&&(Qv=t)}else u_.push(a_=[Qv=t,t_=t]);nn_&&(n_=n),o_=e,e_=t}function Or(){Q_.point=Dr}function Fr(){a_[0]=Qv,a_[1]=t_,Q_.point=Ur,o_=null}function Ir(t,n){if(o_){var e=t-e_;J_.add(P_(e)>180?e+(e>0?360:-360):e)}else r_=t,i_=n;Z_.point(t,n),Dr(t,n)}function Yr(){Z_.lineStart()}function Br(){Ir(r_,i_),Z_.lineEnd(),P_(J_)>k_&&(Qv=-(t_=180)),a_[0]=Qv,a_[1]=t_,o_=null}function Hr(t,n){return(n-=t)<0?n+360:n}function jr(t,n){return t[0]-n[0]}function Xr(t,n){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:nN_?t-A_:t<-N_?t+A_:t,n]}function ri(t,n,e){return(t%=A_)?n||e?ry(oi(t),ui(n,e)):oi(t):n||e?ui(n,e):ei}function ii(t){return function(n,e){return n+=t,[n>N_?n-A_:n<-N_?n+A_:n,e]}}function oi(t){var n=ii(t);return n.invert=ii(-t),n}function ui(t,n){function e(t,n){var e=q_(n),a=q_(t)*e,c=I_(t)*e,s=I_(n),f=s*r+a*i;return[R_(c*o-f*u,a*r-s*i),mr(f*o+c*u)]}var r=q_(t),i=I_(t),o=q_(n),u=I_(n);return e.invert=function(t,n){var e=q_(n),a=q_(t)*e,c=I_(t)*e,s=I_(n),f=s*o-c*u;return[R_(c*o+s*u,a*r+f*i),mr(f*r-a*i)]},e}function ai(t,n,e,r,i,o){if(e){var u=q_(n),a=I_(n),c=r*e;null==i?(i=n+r*A_,o=n-c/2):(i=ci(u,i),o=ci(u,o),(r>0?io)&&(i+=r*A_));for(var s,f=i;r>0?f>o:f0)do{s.point(0===f||3===f?t:e,f>1?r:n)}while((f=(f+a+4)%4)!==l);else s.point(o[0],o[1])}function u(r,i){return P_(r[0]-t)0?0:3:P_(r[0]-e)0?2:1:P_(r[1]-n)0?1:0:i>0?3:2}function a(t,n){return c(t.x,n.x)}function c(t,n){var e=u(t,1),r=u(n,1);return e!==r?e-r:0===e?n[1]-t[1]:1===e?t[0]-n[0]:2===e?t[1]-n[1]:n[0]-t[0]}return function(u){function c(t,n){i(t,n)&&N.point(t,n)}function s(){for(var n=0,e=0,i=_.length;er&&(l-o)*(r-u)>(h-u)*(t-o)&&++n:h<=r&&(l-o)*(r-u)<(h-u)*(t-o)&&--n;return n}function f(){N=S,v=[],_=[],k=!0}function l(){var t=s(),n=k&&t,e=(v=bf(v)).length;(n||e)&&(u.polygonStart(),n&&(u.lineStart(),o(null,null,1,u),u.lineEnd()),e&&xy(v,a,t,o,u),u.polygonEnd()),N=u,v=_=y=null}function h(){E.point=d,_&&_.push(y=[]),T=!0,M=!1,b=w=NaN}function p(){v&&(d(g,m),x&&M&&S.rejoin(),v.push(S.result())),E.point=c,M&&N.lineEnd()}function d(o,u){var a=i(o,u);if(_&&y.push([o,u]),T)g=o,m=u,x=a,T=!1,a&&(N.lineStart(),N.point(o,u));else if(a&&M)N.point(o,u);else{var c=[b=Math.max(wy,Math.min(by,b)),w=Math.max(wy,Math.min(by,w))],s=[o=Math.max(wy,Math.min(by,o)),u=Math.max(wy,Math.min(by,u))];gy(c,s,t,n,e,r)?(M||(N.lineStart(),N.point(c[0],c[1])),N.point(s[0],s[1]),a||N.lineEnd(),k=!1):a&&(N.lineStart(),N.point(o,u),k=!1)}b=o,w=u,M=a}var v,_,y,g,m,x,b,w,M,T,k,N=u,S=yy(),E={point:c,lineStart:h,lineEnd:p,polygonStart:f,polygonEnd:l};return E}}function hi(){Sy.point=di,Sy.lineEnd=pi}function pi(){Sy.point=Sy.lineEnd=br}function di(t,n){t*=z_,n*=z_,iy=t,oy=I_(n),uy=q_(n),Sy.point=vi}function vi(t,n){t*=z_,n*=z_;var e=I_(n),r=q_(n),i=P_(t-iy),o=q_(i),u=I_(i),a=r*u,c=uy*e-oy*r*o,s=oy*e+uy*r*o;Ny.add(R_(B_(a*a+c*c),s)),iy=t,oy=e,uy=r}function _i(t,n){return!(!t||!Ly.hasOwnProperty(t.type))&&Ly[t.type](t,n)}function yi(t,n){return 0===zy(t,n)}function gi(t,n){var e=zy(t[0],t[1]);return zy(t[0],n)+zy(n,t[1])<=e+k_}function mi(t,n){return!!ky(t.map(xi),bi(n))}function xi(t){return t=t.map(bi),t.pop(),t}function bi(t){return[t[0]*z_,t[1]*z_]}function wi(t,n,e){var r=cf(t,n-k_,e).concat(n);return function(t){return r.map(function(n){return[t,n]})}}function Mi(t,n,e){var r=cf(t,n-k_,e).concat(n);return function(t){return r.map(function(n){return[n,t]})}}function Ti(){function t(){return{type:"MultiLineString",coordinates:n()}}function n(){return cf(U_(o/_)*_,i,_).map(h).concat(cf(U_(s/y)*y,c,y).map(p)).concat(cf(U_(r/d)*d,e,d).filter(function(t){return P_(t%_)>k_}).map(f)).concat(cf(U_(a/v)*v,u,v).filter(function(t){return P_(t%y)>k_}).map(l))}var e,r,i,o,u,a,c,s,f,l,h,p,d=10,v=d,_=90,y=360,g=2.5;return t.lines=function(){return n().map(function(t){return{type:"LineString",coordinates:t}})},t.outline=function(){return{type:"Polygon",coordinates:[h(o).concat(p(c).slice(1),h(i).reverse().slice(1),p(s).reverse().slice(1))]}},t.extent=function(n){return arguments.length?t.extentMajor(n).extentMinor(n):t.extentMinor()},t.extentMajor=function(n){return arguments.length?(o=+n[0][0],i=+n[1][0],s=+n[0][1],c=+n[1][1],o>i&&(n=o,o=i,i=n),s>c&&(n=s,s=c,c=n),t.precision(g)):[[o,s],[i,c]]},t.extentMinor=function(n){return arguments.length?(r=+n[0][0],e=+n[1][0],a=+n[0][1],u=+n[1][1],r>e&&(n=r,r=e,e=n),a>u&&(n=a,a=u,u=n),t.precision(g)):[[r,a],[e,u]]},t.step=function(n){return arguments.length?t.stepMajor(n).stepMinor(n):t.stepMinor()},t.stepMajor=function(n){return arguments.length?(_=+n[0],y=+n[1],t):[_,y]},t.stepMinor=function(n){return arguments.length?(d=+n[0],v=+n[1],t):[d,v]},t.precision=function(n){return arguments.length?(g=+n,f=wi(a,u,90),l=Mi(r,e,g),h=wi(s,c,90),p=Mi(o,i,g),t):g},t.extentMajor([[-180,-90+k_],[180,90-k_]]).extentMinor([[-180,-80-k_],[180,80+k_]])}function ki(){return Ti()()}function Ni(){Fy.point=Si}function Si(t,n){Fy.point=Ei,ay=sy=t,cy=fy=n}function Ei(t,n){Oy.add(fy*t-sy*n),sy=t,fy=n}function Ai(){Ei(ay,cy)}function Ci(t,n){tBy&&(By=t),nHy&&(Hy=n)}function zi(t,n){Xy+=t,$y+=n,++Vy}function Pi(){tg.point=Li}function Li(t,n){tg.point=Ri,zi(py=t,dy=n)}function Ri(t,n){var e=t-py,r=n-dy,i=B_(e*e+r*r);Wy+=i*(py+t)/2,Zy+=i*(dy+n)/2,Gy+=i,zi(py=t,dy=n)}function qi(){tg.point=zi}function Ui(){tg.point=Oi}function Di(){Fi(ly,hy)}function Oi(t,n){tg.point=Fi,zi(ly=py=t,hy=dy=n)}function Fi(t,n){var e=t-py,r=n-dy,i=B_(e*e+r*r);Wy+=i*(py+t)/2,Zy+=i*(dy+n)/2,Gy+=i,i=dy*t-py*n,Jy+=i*(py+t),Qy+=i*(dy+n),Ky+=3*i,zi(py=t,dy=n)}function Ii(t){this._context=t}function Yi(t,n){ag.point=Bi,eg=ig=t,rg=og=n}function Bi(t,n){ig-=t,og-=n,ug.add(B_(ig*ig+og*og)),ig=t,og=n}function Hi(){this._string=[]}function ji(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}function Xi(t){return t.length>1}function $i(t,n){return((t=t.x)[0]<0?t[1]-S_-k_:S_-t[1])-((n=n.x)[0]<0?n[1]-S_-k_:S_-n[1])}function Vi(t){var n,e=NaN,r=NaN,i=NaN;return{lineStart:function(){t.lineStart(),n=1},point:function(o,u){var a=o>0?N_:-N_,c=P_(o-e);P_(c-N_)0?S_:-S_),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(a,r),t.point(o,r),n=0):i!==a&&c>=N_&&(P_(e-i)k_?L_((I_(n)*(o=q_(r))*I_(e)-I_(r)*(i=q_(n))*I_(t))/(i*o*u)):(n+r)/2}function Zi(t,n,e,r){var i;if(null==t)i=e*S_,r.point(-N_,i),r.point(0,i),r.point(N_,i),r.point(N_,0),r.point(N_,-i),r.point(0,-i),r.point(-N_,-i),r.point(-N_,0),r.point(-N_,i);else if(P_(t[0]-n[0])>k_){var o=t[0]4*n&&v--){var x=u+h,b=a+p,w=c+d,M=B_(x*x+b*b+w*w),T=mr(w/=M),k=P_(P_(w)-1)n||P_((y*A+g*C)/m-.5)>.3||u*h+a*p+c*d2?t[2]%360*z_:0,i()):[b*C_,w*C_,M*C_]},n.precision=function(t){return arguments.length?(A=vg(r,E=t*t),o()):B_(E)},n.fitExtent=function(t,e){return Qi(n,t,e)},n.fitSize=function(t,e){return Ki(n,t,e)},function(){return u=t.apply(this,arguments),n.invert=u.invert&&e,i()}}function io(t){var n=0,e=N_/3,r=ro(t),i=r(n,e);return i.parallels=function(t){return arguments.length?r(n=t[0]*z_,e=t[1]*z_):[n*C_,e*C_]},i}function oo(t){function n(t,n){return[t*e,I_(n)/e]}var e=q_(t);return n.invert=function(t,n){return[t/e,mr(n*e)]},n}function uo(t,n){function e(t,n){var e=B_(o-2*i*I_(n))/i;return[e*I_(t*=i),u-e*q_(t)]}var r=I_(t),i=(r+I_(n))/2;if(P_(i)0?n<-S_+k_&&(n=-S_+k_):n>S_-k_&&(n=S_-k_);var e=o/F_(ho(n),i);return[e*I_(i*t),o-e*q_(i*t)]}var r=q_(t),i=t===n?I_(t):O_(r/q_(n))/O_(ho(n)/ho(t)),o=r*F_(ho(t),i)/i;return i?(e.invert=function(t,n){var e=o-n,r=Y_(i)*B_(t*t+e*e);return[R_(t,P_(e))/i*Y_(e),2*L_(F_(o/r,1/i))-S_]},e):fo}function vo(t,n){return[t,n]}function _o(t,n){function e(t,n){var e=o-n,r=i*t;return[e*I_(r),o-e*q_(r)]}var r=q_(t),i=t===n?I_(t):(r-q_(n))/(n-t),o=r/i+t;return P_(i)=0;)n+=e[r].value;else n=1;t.value=n}function Co(t,n){if(t===n)return t;var e=t.ancestors(),r=n.ancestors(),i=null;for(t=e.pop(),n=r.pop();t===n;)i=t,t=e.pop(),n=r.pop();return i}function zo(t,n){var e,r,i,o,u,a=new Uo(t),c=+t.value&&(a.value=t.value),s=[a];for(null==n&&(n=Lo);e=s.pop();)if(c&&(e.value=+e.data.value),(i=n(e.data))&&(u=i.length))for(e.children=new Array(u),o=u-1;o>=0;--o)s.push(r=e.children[o]=new Uo(i[o])),r.parent=e,r.depth=e.depth+1;return a.eachBefore(qo)}function Po(){return zo(this).eachBefore(Ro)}function Lo(t){return t.children}function Ro(t){t.data=t.data.data}function qo(t){var n=0;do{t.height=n}while((t=t.parent)&&t.height<++n)}function Uo(t){this.data=t,this.depth=this.height=0,this.parent=null}function Do(t){this._=t,this.next=null}function Oo(t,n){var e=n.x-t.x,r=n.y-t.y,i=t.r-n.r;return i*i+1e-6>e*e+r*r}function Fo(t,n){var e,r,i,o=null,u=t.head;switch(n.length){case 1:e=Io(n[0]);break;case 2:e=Yo(n[0],n[1]);break;case 3:e=Bo(n[0],n[1],n[2])}for(;u;)i=u._,r=u.next,e&&Oo(e,i)?o=u:(o?(t.tail=o,o.next=null):t.head=t.tail=null,n.push(i),e=Fo(t,n),n.pop(),t.head?(u.next=t.head,t.head=u):(u.next=null,t.head=t.tail=u),o=t.tail,o.next=r),u=r;return t.tail=o,e}function Io(t){return{x:t.x,y:t.y,r:t.r}}function Yo(t,n){var e=t.x,r=t.y,i=t.r,o=n.x,u=n.y,a=n.r,c=o-e,s=u-r,f=a-i,l=Math.sqrt(c*c+s*s);return{x:(e+o+c/l*f)/2,y:(r+u+s/l*f)/2,r:(l+i+a)/2}}function Bo(t,n,e){var r=t.x,i=t.y,o=t.r,u=n.x,a=n.y,c=n.r,s=e.x,f=e.y,l=e.r,h=2*(r-u),p=2*(i-a),d=2*(c-o),v=r*r+i*i-o*o-u*u-a*a+c*c,_=2*(r-s),y=2*(i-f),g=2*(l-o),m=r*r+i*i-o*o-s*s-f*f+l*l,x=_*p-h*y,b=(p*m-y*v)/x-r,w=(y*d-p*g)/x,M=(_*v-h*m)/x-i,T=(h*g-_*d)/x,k=w*w+T*T-1,N=2*(b*w+M*T+o),S=b*b+M*M-o*o,E=(-N-Math.sqrt(N*N-4*k*S))/(2*k);return{x:b+w*E+r,y:M+T*E+i,r:E}}function Ho(t,n,e){var r=t.x,i=t.y,o=n.r+e.r,u=t.r+e.r,a=n.x-r,c=n.y-i,s=a*a+c*c;if(s){var f=.5+((u*=u)-(o*=o))/(2*s),l=Math.sqrt(Math.max(0,2*o*(u+s)-(u-=s)*u-o*o))/(2*s);e.x=r+f*a+l*c,e.y=i+f*c-l*a}else e.x=r+u,e.y=i}function jo(t,n){var e=n.x-t.x,r=n.y-t.y,i=t.r+n.r;return i*i-1e-6>e*e+r*r}function Xo(t,n,e){var r=t._,i=t.next._,o=r.r+i.r,u=(r.x*i.r+i.x*r.r)/o-n,a=(r.y*i.r+i.y*r.r)/o-e;return u*u+a*a}function $o(t){this._=t,this.next=null,this.previous=null}function Vo(t){if(!(i=t.length))return 0;var n,e,r,i;if(n=t[0],n.x=0,n.y=0,!(i>1))return n.r;if(e=t[1],n.x=-e.r,e.x=n.r,e.y=0,!(i>2))return n.r+e.r;Ho(e,n,r=t[2]);var o,u,a,c,s,f,l,h=n.r*n.r,p=e.r*e.r,d=r.r*r.r,v=h+p+d,_=h*n.x+p*e.x+d*r.x,y=h*n.y+p*e.y+d*r.y;n=new $o(n),e=new $o(e),r=new $o(r),n.next=r.previous=e,e.next=n.previous=r,r.next=e.previous=n;t:for(a=3;a=0;)n=i[o],n.z+=e,n.m+=e,e+=n.s+(r+=n.c)}function cu(t,n,e){return t.a.parent===n.parent?t.a:e}function su(t,n){this._=t,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=n}function fu(t){for(var n,e,r,i,o,u=new su(t,0),a=[u];n=a.pop();)if(r=n._.children)for(n.children=new Array(o=r.length),i=o-1;i>=0;--i)a.push(e=n.children[i]=new su(r[i],i)),e.parent=n;return(u.parent=new su(null,0)).children=[u],u}function lu(t,n,e,r,i,o){for(var u,a,c,s,f,l,h,p,d,v,_,y=[],g=n.children,m=0,x=0,b=g.length,w=n.value;mh&&(h=a),_=f*f*v,(p=Math.max(h/_,_/l))>d){f-=a;break}d=p}y.push(u={value:f,dice:c1&&pm(t[e[r-2]],t[e[r-1]],t[i])<=0;)--r;e[r++]=i}return e.slice(0,r)}function du(t){this._size=t,this._call=this._error=null,this._tasks=[],this._data=[],this._waiting=this._active=this._ended=this._start=0}function vu(t){if(!t._start)try{_u(t)}catch(n){if(t._tasks[t._ended+t._active-1])gu(t,n);else if(!t._data)throw n}}function _u(t){for(;t._start=t._waiting&&t._active=0;)if((e=t._tasks[r])&&(t._tasks[r]=null,e.abort))try{e.abort()}catch(n){}t._active=NaN,mu(t)}function mu(t){if(!t._active&&t._call){var n=t._data;t._data=void 0,t._call(t._error,n)}}function xu(t){if(null==t)t=1/0;else if(!((t=+t)>=1))throw new Error("invalid concurrency");return new du(t)}function bu(t){return function(n,e){t(null==n?e:null)}}function wu(t){var n=t.responseType;return n&&"text"!==n?t.response:t.responseText}function Mu(t,n){return function(e){return t(e.responseText,n)}}function Tu(t){function n(n){var o=n+"",u=e.get(o);if(!u){if(i!==Om)return i;e.set(o,u=r.push(n))}return t[(u-1)%t.length]}var e=He(),r=[],i=Om;return t=null==t?[]:Dm.call(t),n.domain=function(t){if(!arguments.length)return r.slice();r=[],e=He();for(var i,o,u=-1,a=t.length;++u=e?1:r(t)}}}function Cu(t){return function(n,e){var r=t(n=+n,e=+e);return function(t){return t<=0?n:t>=1?e:r(t)}}}function zu(t,n,e,r){var i=t[0],o=t[1],u=n[0],a=n[1];return o2?Pu:zu,o=u=null,r}function r(n){return(o||(o=i(a,c,f?Au(t):t,s)))(+n)}var i,o,u,a=Ym,c=Ym,s=qh,f=!1;return r.invert=function(t){return(u||(u=i(c,a,Eu,f?Cu(n):n)))(+t)},r.domain=function(t){return arguments.length?(a=Um.call(t,Im),e()):a.slice()},r.range=function(t){return arguments.length?(c=Dm.call(t),e()):c.slice()},r.rangeRound=function(t){return c=Dm.call(t),s=Uh,e()},r.clamp=function(t){return arguments.length?(f=!!t,e()):f},r.interpolate=function(t){return arguments.length?(s=t,e()):s},e()}function qu(t){var n=t.domain;return t.ticks=function(t){var e=n();return hf(e[0],e[e.length-1],null==t?10:t)},t.tickFormat=function(t,e){return Bm(n(),t,e)},t.nice=function(e){null==e&&(e=10);var i,o=n(),u=0,a=o.length-1,c=o[u],s=o[a];return s0?(c=Math.floor(c/i)*i,s=Math.ceil(s/i)*i,i=r(c,s,e)):i<0&&(c=Math.ceil(c*i)/i,s=Math.floor(s*i)/i,i=r(c,s,e)),i>0?(o[u]=Math.floor(c/i)*i,o[a]=Math.ceil(s/i)*i,n(o)):i<0&&(o[u]=Math.ceil(c*i)/i,o[a]=Math.floor(s*i)/i,n(o)),t},t}function Uu(){var t=Ru(Eu,Ch);return t.copy=function(){return Lu(t,Uu())},qu(t)}function Du(){function t(t){return+t}var n=[0,1];return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=Um.call(e,Im),t):n.slice()},t.copy=function(){return Du().domain(n)},qu(t)}function Ou(t,n){return(n=Math.log(n/t))?function(e){return Math.log(e/t)/n}:Fm(n)}function Fu(t,n){return t<0?function(e){return-Math.pow(-n,e)*Math.pow(-t,1-e)}:function(e){return Math.pow(n,e)*Math.pow(t,1-e)}}function Iu(t){return isFinite(t)?+("1e"+t):t<0?0:t}function Yu(t){return 10===t?Iu:t===Math.E?Math.exp:function(n){return Math.pow(t,n)}}function Bu(t){return t===Math.E?Math.log:10===t&&Math.log10||2===t&&Math.log2||(t=Math.log(t),function(n){return Math.log(n)/t})}function Hu(t){return function(n){return-t(-n)}}function ju(){function n(){return o=Bu(i),u=Yu(i),r()[0]<0&&(o=Hu(o),u=Hu(u)),e}var e=Ru(Ou,Fu).domain([1,10]),r=e.domain,i=10,o=Bu(10),u=Yu(10);return e.base=function(t){return arguments.length?(i=+t,n()):i},e.domain=function(t){return arguments.length?(r(t),n()):r()},e.ticks=function(t){var n,e=r(),a=e[0],c=e[e.length-1];(n=c0){for(;hc)break;v.push(l)}}else for(;h=1;--f)if(!((l=s*f)c)break;v.push(l)}}else v=hf(h,p,Math.min(p-h,d)).map(u);return n?v.reverse():v},e.tickFormat=function(n,r){if(null==r&&(r=10===i?".0e":","),"function"!=typeof r&&(r=t.format(r)),n===1/0)return r;null==n&&(n=10);var a=Math.max(1,i*n/e.ticks().length);return function(t){var n=t/u(Math.round(o(t)));return n*i0?i[n-1]:e[0],n=i?[o[i-1],r]:[o[n-1],o[n]]},t.copy=function(){return Zu().domain([e,r]).range(u)},qu(t)}function Gu(){function t(t){if(t<=t)return e[Vs(n,t,0,r)]}var n=[.5],e=[0,1],r=1;return t.domain=function(i){return arguments.length?(n=Dm.call(i),r=Math.min(n.length,e.length-1),t):n.slice()},t.range=function(i){return arguments.length?(e=Dm.call(i),r=Math.min(n.length,e.length-1),t):e.slice()},t.invertExtent=function(t){var r=e.indexOf(t);return[n[r-1],n[r]]},t.copy=function(){return Gu().domain(n).range(e)},t}function Ju(t,n,e,r){function i(n){return t(n=new Date(+n)),n}return i.floor=i,i.ceil=function(e){return t(e=new Date(e-1)),n(e,1),t(e),e},i.round=function(t){var n=i(t),e=i.ceil(t);return t-n0))return u;do{u.push(new Date(+e))}while(n(e,o),t(e),e=n)for(;t(n),!e(n);)n.setTime(n-1)},function(t,r){if(t>=t)for(;--r>=0;)for(;n(t,1),!e(t););})},e&&(i.count=function(n,r){return jm.setTime(+n),Xm.setTime(+r),t(jm),t(Xm),Math.floor(e(jm,Xm))},i.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?function(n){return r(n)%t==0}:function(n){return i.count(0,n)%t==0}):i:null}),i}function Qu(t){return Ju(function(n){n.setDate(n.getDate()-(n.getDay()+7-t)%7),n.setHours(0,0,0,0)},function(t,n){t.setDate(t.getDate()+7*n)},function(t,n){return(n-t-(n.getTimezoneOffset()-t.getTimezoneOffset())*Wm)/Zm})}function Ku(t){return Ju(function(n){n.setUTCDate(n.getUTCDate()-(n.getUTCDay()+7-t)%7),n.setUTCHours(0,0,0,0)},function(t,n){t.setUTCDate(t.getUTCDate()+7*n)},function(t,n){return(n-t)/Zm})}function ta(t){if(0<=t.y&&t.y<100){var n=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return n.setFullYear(t.y),n}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function na(t){if(0<=t.y&&t.y<100){var n=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return n.setUTCFullYear(t.y),n}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function ea(t){return{y:t,m:0,d:1,H:0,M:0,S:0,L:0}}function ra(t){function n(t,n){return function(e){var r,i,o,u=[],a=-1,c=0,s=t.length;for(e instanceof Date||(e=new Date(+e));++a=c)return-1;if(37===(i=n.charCodeAt(u++))){if(i=n.charAt(u++),!(o=B[i in Vx?n.charAt(u++):i])||(r=o(t,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function i(t,n,e){var r=C.exec(n.slice(e));return r?(t.p=z[r[0].toLowerCase()],e+r[0].length):-1}function o(t,n,e){var r=R.exec(n.slice(e));return r?(t.w=q[r[0].toLowerCase()],e+r[0].length):-1}function u(t,n,e){var r=P.exec(n.slice(e));return r?(t.w=L[r[0].toLowerCase()],e+r[0].length):-1}function a(t,n,e){var r=O.exec(n.slice(e));return r?(t.m=F[r[0].toLowerCase()],e+r[0].length):-1}function c(t,n,e){var r=U.exec(n.slice(e));return r?(t.m=D[r[0].toLowerCase()],e+r[0].length):-1}function s(t,n,e){return r(t,w,n,e)}function f(t,n,e){return r(t,M,n,e)}function l(t,n,e){return r(t,T,n,e)}function h(t){return S[t.getDay()]}function p(t){return N[t.getDay()]}function d(t){return A[t.getMonth()]}function v(t){return E[t.getMonth()]}function _(t){return k[+(t.getHours()>=12)]}function y(t){return S[t.getUTCDay()]}function g(t){return N[t.getUTCDay()]}function m(t){return A[t.getUTCMonth()]}function x(t){return E[t.getUTCMonth()]}function b(t){return k[+(t.getUTCHours()>=12)]}var w=t.dateTime,M=t.date,T=t.time,k=t.periods,N=t.days,S=t.shortDays,E=t.months,A=t.shortMonths,C=ua(k),z=aa(k),P=ua(N),L=aa(N),R=ua(S),q=aa(S),U=ua(E),D=aa(E),O=ua(A),F=aa(A),I={a:h,A:p,b:d,B:v,c:null,d:wa,e:wa,H:Ma,I:Ta,j:ka,L:Na,m:Sa,M:Ea,p:_,S:Aa,U:Ca,w:za,W:Pa,x:null,X:null,y:La,Y:Ra,Z:qa,"%":Ga},Y={a:y,A:g,b:m,B:x,c:null,d:Ua,e:Ua,H:Da,I:Oa,j:Fa,L:Ia,m:Ya,M:Ba,p:b,S:Ha,U:ja,w:Xa,W:$a,x:null,X:null,y:Va,Y:Wa,Z:Za,"%":Ga},B={a:o,A:u,b:a,B:c,c:s,d:va,e:va,H:ya,I:ya,j:_a,L:xa,m:da,M:ga,p:i,S:ma,U:sa,w:ca,W:fa,x:f,X:l,y:ha,Y:la,Z:pa,"%":ba};return I.x=n(M,I),I.X=n(T,I),I.c=n(w,I),Y.x=n(M,Y),Y.X=n(T,Y),Y.c=n(w,Y),{format:function(t){var e=n(t+="",I);return e.toString=function(){return t},e},parse:function(t){var n=e(t+="",ta);return n.toString=function(){return t},n},utcFormat:function(t){var e=n(t+="",Y);return e.toString=function(){return t},e},utcParse:function(t){var n=e(t,na);return n.toString=function(){return t},n}}}function ia(t,n,e){var r=t<0?"-":"",i=(r?-t:t)+"",o=i.length;return r+(o68?1900:2e3),e+r[0].length):-1}function pa(t,n,e){var r=/^(Z)|([+-]\d\d)(?:\:?(\d\d))?/.exec(n.slice(e,e+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),e+r[0].length):-1}function da(t,n,e){var r=Wx.exec(n.slice(e,e+2));return r?(t.m=r[0]-1,e+r[0].length):-1}function va(t,n,e){var r=Wx.exec(n.slice(e,e+2));return r?(t.d=+r[0],e+r[0].length):-1}function _a(t,n,e){var r=Wx.exec(n.slice(e,e+3));return r?(t.m=0,t.d=+r[0],e+r[0].length):-1}function ya(t,n,e){var r=Wx.exec(n.slice(e,e+2));return r?(t.H=+r[0],e+r[0].length):-1}function ga(t,n,e){var r=Wx.exec(n.slice(e,e+2));return r?(t.M=+r[0],e+r[0].length):-1}function ma(t,n,e){var r=Wx.exec(n.slice(e,e+2));return r?(t.S=+r[0],e+r[0].length):-1}function xa(t,n,e){var r=Wx.exec(n.slice(e,e+3));return r?(t.L=+r[0],e+r[0].length):-1}function ba(t,n,e){var r=Zx.exec(n.slice(e,e+1));return r?e+r[0].length:-1}function wa(t,n){return ia(t.getDate(),n,2)}function Ma(t,n){return ia(t.getHours(),n,2)}function Ta(t,n){return ia(t.getHours()%12||12,n,2)}function ka(t,n){return ia(1+ex.count(xx(t),t),n,3)}function Na(t,n){return ia(t.getMilliseconds(),n,3)}function Sa(t,n){return ia(t.getMonth()+1,n,2)}function Ea(t,n){return ia(t.getMinutes(),n,2)}function Aa(t,n){return ia(t.getSeconds(),n,2)}function Ca(t,n){return ia(ix.count(xx(t),t),n,2)}function za(t){return t.getDay()}function Pa(t,n){return ia(ox.count(xx(t),t),n,2)}function La(t,n){return ia(t.getFullYear()%100,n,2)}function Ra(t,n){return ia(t.getFullYear()%1e4,n,4)}function qa(t){var n=t.getTimezoneOffset();return(n>0?"-":(n*=-1,"+"))+ia(n/60|0,"0",2)+ia(n%60,"0",2)}function Ua(t,n){return ia(t.getUTCDate(),n,2)}function Da(t,n){return ia(t.getUTCHours(),n,2)}function Oa(t,n){return ia(t.getUTCHours()%12||12,n,2)}function Fa(t,n){return ia(1+Nx.count(jx(t),t),n,3)}function Ia(t,n){return ia(t.getUTCMilliseconds(),n,3)}function Ya(t,n){return ia(t.getUTCMonth()+1,n,2)}function Ba(t,n){return ia(t.getUTCMinutes(),n,2)}function Ha(t,n){return ia(t.getUTCSeconds(),n,2)}function ja(t,n){return ia(Ex.count(jx(t),t),n,2)}function Xa(t){return t.getUTCDay()}function $a(t,n){return ia(Ax.count(jx(t),t),n,2)}function Va(t,n){return ia(t.getUTCFullYear()%100,n,2)}function Wa(t,n){return ia(t.getUTCFullYear()%1e4,n,4)}function Za(){return"+0000"}function Ga(){return"%"}function Ja(n){return Xx=ra(n),t.timeFormat=Xx.format,t.timeParse=Xx.parse,t.utcFormat=Xx.utcFormat,t.utcParse=Xx.utcParse,Xx}function Qa(t){return t.toISOString()}function Ka(t){var n=new Date(t);return isNaN(n)?null:n}function tc(t){return new Date(t)}function nc(t){return t instanceof Date?+t:+new Date(+t)}function ec(t,n,e,r,o,u,a,c,s){function f(i){return(a(i)1?0:t<-1?zb:Math.acos(t)}function uc(t){return t>=1?Pb:t<=-1?-Pb:Math.asin(t)}function ac(t){return t.innerRadius}function cc(t){return t.outerRadius}function sc(t){return t.startAngle}function fc(t){return t.endAngle}function lc(t){return t&&t.padAngle}function hc(t,n,e,r,i,o,u,a){var c=e-t,s=r-n,f=u-i,l=a-o,h=(f*(n-o)-l*(t-i))/(l*c-f*s);return[t+h*c,n+h*s]}function pc(t,n,e,r,i,o,u){var a=t-e,c=n-r,s=(u?o:-o)/Ab(a*a+c*c),f=s*c,l=-s*a,h=t+f,p=n+l,d=e+f,v=r+l,_=(h+d)/2,y=(p+v)/2,g=d-h,m=v-p,x=g*g+m*m,b=i-o,w=h*v-d*p,M=(m<0?-1:1)*Ab(Nb(0,b*b*x-w*w)),T=(w*m-g*M)/x,k=(-w*g-m*M)/x,N=(w*m+g*M)/x,S=(-w*g+m*M)/x,E=T-_,A=k-y,C=N-_,z=S-y;return E*E+A*A>C*C+z*z&&(T=N,k=S),{cx:T,cy:k,x01:-f,y01:-l,x11:T*(i/b-1),y11:k*(i/b-1)}}function dc(t){this._context=t}function vc(t){return t[0]}function _c(t){return t[1]}function yc(t){this._curve=t}function gc(t){function n(n){return new yc(t(n))}return n._curve=t,n}function mc(t){var n=t.curve;return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t.curve=function(t){return arguments.length?n(gc(t)):n()._curve},t}function xc(t){return t.source}function bc(t){return t.target}function wc(t){function n(){var n,a=jb.call(arguments),c=e.apply(this,a),s=r.apply(this,a);if(u||(u=n=Ue()),t(u,+i.apply(this,(a[0]=c,a)),+o.apply(this,a),+i.apply(this,(a[0]=s,a)),+o.apply(this,a)),n)return u=null,n+""||null}var e=xc,r=bc,i=vc,o=_c,u=null;return n.source=function(t){return arguments.length?(e=t,n):e},n.target=function(t){return arguments.length?(r=t,n):r},n.x=function(t){return arguments.length?(i="function"==typeof t?t:wb(+t),n):i},n.y=function(t){return arguments.length?(o="function"==typeof t?t:wb(+t),n):o},n.context=function(t){return arguments.length?(u=null==t?null:t,n):u},n}function Mc(t,n,e,r,i){t.moveTo(n,e),t.bezierCurveTo(n=(n+r)/2,e,n,i,r,i)}function Tc(t,n,e,r,i){t.moveTo(n,e),t.bezierCurveTo(n,e=(e+i)/2,r,e,r,i)}function kc(t,n,e,r,i){var o=Xb(n,e),u=Xb(n,e=(e+i)/2),a=Xb(r,e),c=Xb(r,i);t.moveTo(o[0],o[1]),t.bezierCurveTo(u[0],u[1],a[0],a[1],c[0],c[1])}function Nc(){return wc(Mc)}function Sc(){return wc(Tc)}function Ec(){var t=wc(kc);return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t}function Ac(t,n,e){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+n)/6,(t._y0+4*t._y1+e)/6)}function Cc(t){this._context=t}function zc(t){this._context=t}function Pc(t){this._context=t}function Lc(t,n){this._basis=new Cc(t),this._beta=n}function Rc(t,n,e){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-n),t._y2+t._k*(t._y1-e),t._x2,t._y2)}function qc(t,n){this._context=t,this._k=(1-n)/6}function Uc(t,n){this._context=t,this._k=(1-n)/6}function Dc(t,n){this._context=t,this._k=(1-n)/6}function Oc(t,n,e){var r=t._x1,i=t._y1,o=t._x2,u=t._y2;if(t._l01_a>Cb){var a=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,c=3*t._l01_a*(t._l01_a+t._l12_a);r=(r*a-t._x0*t._l12_2a+t._x2*t._l01_2a)/c,i=(i*a-t._y0*t._l12_2a+t._y2*t._l01_2a)/c}if(t._l23_a>Cb){var s=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,f=3*t._l23_a*(t._l23_a+t._l12_a);o=(o*s+t._x1*t._l23_2a-n*t._l12_2a)/f,u=(u*s+t._y1*t._l23_2a-e*t._l12_2a)/f}t._context.bezierCurveTo(r,i,o,u,t._x2,t._y2)}function Fc(t,n){this._context=t,this._alpha=n}function Ic(t,n){this._context=t,this._alpha=n}function Yc(t,n){this._context=t,this._alpha=n}function Bc(t){this._context=t}function Hc(t){return t<0?-1:1}function jc(t,n,e){var r=t._x1-t._x0,i=n-t._x1,o=(t._y1-t._y0)/(r||i<0&&-0),u=(e-t._y1)/(i||r<0&&-0),a=(o*i+u*r)/(r+i);return(Hc(o)+Hc(u))*Math.min(Math.abs(o),Math.abs(u),.5*Math.abs(a))||0}function Xc(t,n){var e=t._x1-t._x0;return e?(3*(t._y1-t._y0)/e-n)/2:n}function $c(t,n,e){var r=t._x0,i=t._y0,o=t._x1,u=t._y1,a=(o-r)/3;t._context.bezierCurveTo(r+a,i+a*n,o-a,u-a*e,o,u)}function Vc(t){this._context=t}function Wc(t){this._context=new Zc(t)}function Zc(t){this._context=t}function Gc(t){return new Vc(t)}function Jc(t){return new Wc(t)}function Qc(t){this._context=t}function Kc(t){var n,e,r=t.length-1,i=new Array(r),o=new Array(r),u=new Array(r);for(i[0]=0,o[0]=2,u[0]=t[0]+2*t[1],n=1;n=0;--n)i[n]=(u[n]-i[n+1])/o[n];for(o[r-1]=(t[r]+i[r-1])/2,n=0;n0)){if(o/=d,d<0){if(o0){if(o>p)return;o>h&&(h=o)}if(o=r-c,d||!(o<0)){if(o/=d,d<0){if(o>p)return;o>h&&(h=o)}else if(d>0){if(o0)){if(o/=v,v<0){if(o0){if(o>p)return;o>h&&(h=o)}if(o=i-s,v||!(o<0)){if(o/=v,v<0){if(o>p)return;o>h&&(h=o)}else if(v>0){if(o0||p<1)||(h>0&&(t[0]=[c+h*d,s+h*v]),p<1&&(t[1]=[c+p*d,s+p*v]),!0)}}}}}function _s(t,n,e,r,i){var o=t[1];if(o)return!0;var u,a,c=t[0],s=t.left,f=t.right,l=s[0],h=s[1],p=f[0],d=f[1],v=(l+p)/2,_=(h+d)/2;if(d===h){if(v=r)return;if(l>p){if(c){if(c[1]>=i)return}else c=[v,e];o=[v,i]}else{if(c){if(c[1]1)if(l>p){if(c){if(c[1]>=i)return}else c=[(e-a)/u,e];o=[(i-a)/u,i]}else{if(c){if(c[1]=r)return}else c=[n,u*n+a];o=[r,u*r+a]}else{if(c){if(c[0]jw||Math.abs(i[0][1]-i[1][1])>jw)||delete Yw[o]}function gs(t){return Fw[t.index]={site:t,halfedges:[]}}function ms(t,n){var e=t.site,r=n.left,i=n.right;return e===i&&(i=r,r=e),i?Math.atan2(i[1]-r[1],i[0]-r[0]):(e===r?(r=n[1],i=n[0]):(r=n[0],i=n[1]),Math.atan2(r[0]-i[0],i[1]-r[1]))}function xs(t,n){return n[+(n.left!==t.site)]}function bs(t,n){return n[+(n.left===t.site)]}function ws(){for(var t,n,e,r,i=0,o=Fw.length;ijw||Math.abs(v-h)>jw)&&(c.splice(a,0,Yw.push(ps(u,p,Math.abs(d-t)jw?[t,Math.abs(l-t)jw?[Math.abs(h-r)jw?[e,Math.abs(l-e)jw?[Math.abs(h-n)=-Xw)){var p=c*c+s*s,d=f*f+l*l,v=(l*p-s*d)/h,_=(c*d-f*p)/h,y=Bw.pop()||new Ts;y.arc=t,y.site=i,y.x=v+u,y.y=(y.cy=_+a)+Math.sqrt(v*v+_*_),t.circle=y;for(var g=null,m=Iw._;m;)if(y.yjw)a=a.L;else{if(!((i=o-Ls(a,u))>jw)){r>-jw?(n=a.P,e=a):i>-jw?(n=a,e=a.N):n=e=a;break}if(!a.R){n=a;break}a=a.R}gs(t);var c=Es(t);if(Ow.insert(n,c),n||e){if(n===e)return Ns(n),e=Es(n.site),Ow.insert(c,e),c.edge=e.edge=hs(n.site,c.site),ks(n),void ks(e);if(!e)return void(c.edge=hs(n.site,c.site));Ns(n),Ns(e);var s=n.site,f=s[0],l=s[1],h=t[0]-f,p=t[1]-l,d=e.site,v=d[0]-f,_=d[1]-l,y=2*(h*_-p*v),g=h*h+p*p,m=v*v+_*_,x=[(_*g-p*m)/y+f,(h*m-v*g)/y+l];ds(e.edge,s,d,x),c.edge=hs(s,t,null,x),e.edge=hs(t,d,null,x),ks(n),ks(e)}}function Ps(t,n){var e=t.site,r=e[0],i=e[1],o=i-n;if(!o)return r;var u=t.P;if(!u)return-1/0;e=u.site;var a=e[0],c=e[1],s=c-n;if(!s)return a;var f=a-r,l=1/o-1/s,h=f/s;return l?(-h+Math.sqrt(h*h-2*l*(f*f/(-2*s)-c+s/2+i-o/2)))/l+r:(r+a)/2}function Ls(t,n){var e=t.N;if(e)return Ps(e,n);var r=t.site;return r[1]===n?r[0]:1/0}function Rs(t,n,e){return(t[0]-e[0])*(n[1]-t[1])-(t[0]-n[0])*(e[1]-t[1])}function qs(t,n){return n[1]-t[1]||n[0]-t[0]}function Us(t,n){var e,r,i,o=t.sort(qs).pop();for(Yw=[],Fw=new Array(t.length),Ow=new as,Iw=new as;;)if(i=Dw,o&&(!i||o[1]n?1:t>=n?0:NaN},Xs=function(t){return 1===t.length&&(t=n(t)),{left:function(n,e,r,i){for(null==r&&(r=0),null==i&&(i=n.length);r>>1;t(n[o],e)<0?r=o+1:i=o}return r},right:function(n,e,r,i){for(null==r&&(r=0),null==i&&(i=n.length);r>>1;t(n[o],e)>0?i=o:r=o+1}return r}}},$s=Xs(js),Vs=$s.right,Ws=$s.left,Zs=function(t,n){null==n&&(n=e);for(var r=0,i=t.length-1,o=t[0],u=new Array(i<0?0:i);rt?1:n>=t?0:NaN},Qs=function(t){return null===t?NaN:+t},Ks=function(t,n){var e,r,i=t.length,o=0,u=-1,a=0,c=0;if(null==n)for(;++u1)return c/(o-1)},tf=function(t,n){var e=Ks(t,n);return e?Math.sqrt(e):e},nf=function(t,n){var e,r,i,o=t.length,u=-1;if(null==n){for(;++u=e)for(r=i=e;++ue&&(r=e),i=e)for(r=i=e;++ue&&(r=e),i0)for(t=Math.ceil(t/u),n=Math.floor(n/u),o=new Array(i=Math.ceil(n-t+1));++cl;)h.pop(),--p;var d,v=new Array(p+1);for(o=0;o<=p;++o)d=v[o]=[],d.x0=o>0?h[o-1]:f,d.x1=o=1)return+e(t[r-1],r-1,t);var r,i=(r-1)*n,o=Math.floor(i),u=+e(t[o],o,t);return u+(+e(t[o+1],o+1,t)-u)*(i-o)}},_f=function(t,n,e){return t=of.call(t,Qs).sort(js),Math.ceil((e-n)/(2*(vf(t,.75)-vf(t,.25))*Math.pow(t.length,-1/3)))},yf=function(t,n,e){return Math.ceil((e-n)/(3.5*tf(t)*Math.pow(t.length,-1/3)))},gf=function(t,n){var e,r,i=t.length,o=-1;if(null==n){for(;++o=e)for(r=e;++or&&(r=e)}else for(;++o=e)for(r=e;++or&&(r=e);return r},mf=function(t,n){var e,r=t.length,i=r,o=-1,u=0;if(null==n)for(;++o=0;)for(r=t[i],n=r.length;--n>=0;)e[--u]=r[n];return e},wf=function(t,n){var e,r,i=t.length,o=-1;if(null==n){for(;++o=e)for(r=e;++oe&&(r=e)}else for(;++o=e)for(r=e;++oe&&(r=e);return r},Mf=function(t,n){for(var e=n.length,r=new Array(e);e--;)r[e]=t[n[e]];return r},Tf=function(t,n){if(e=t.length){var e,r,i=0,o=0,u=t[o];for(null==n&&(n=js);++i0)for(var e,r,i=new Array(e),o=0;o=0&&"xmlns"!==(n=t.slice(0,e))&&(t=t.slice(e+1)),Of.hasOwnProperty(n)?{space:Of[n],local:t}:t},If=function(t){var n=Ff(t);return(n.local?b:x)(n)},Yf=0;M.prototype=w.prototype={constructor:M,get:function(t){for(var n=this._;!(n in t);)if(!(t=t.parentNode))return;return t[n]},set:function(t,n){return t[this._]=n},remove:function(t){return this._ in t&&delete t[this._]},toString:function(){return this._}};var Bf=function(t){return function(){return this.matches(t)}};if("undefined"!=typeof document){var Hf=document.documentElement;if(!Hf.matches){var jf=Hf.webkitMatchesSelector||Hf.msMatchesSelector||Hf.mozMatchesSelector||Hf.oMatchesSelector;Bf=function(t){return function(){return jf.call(this,t)}}}}var Xf=Bf,$f={};if(t.event=null,"undefined"!=typeof document){"onmouseenter"in document.documentElement||($f={mouseenter:"mouseover",mouseleave:"mouseout"})}var Vf=function(t,n,e){var r,i,o=N(t+""),u=o.length;{if(!(arguments.length<2)){for(a=n?E:S,null==e&&(e=!1),r=0;r=x&&(x=m+1);!(g=_[x])&&++x=0;)(r=i[o])&&(u&&u!==r.nextSibling&&u.parentNode.insertBefore(r,u),u=r);return this},fl=function(t){function n(n,e){return n&&e?t(n.__data__,e.__data__):!n-!e}t||(t=q);for(var e=this._groups,r=e.length,i=new Array(r),o=0;o1?this.each((null==n?B:"function"==typeof n?j:H)(t,n,null==e?"":e)):X(this.node(),t)},xl=function(t,n){return arguments.length>1?this.each((null==n?$:"function"==typeof n?W:V)(t,n)):this.node()[t]};J.prototype={add:function(t){this._names.indexOf(t)<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var n=this._names.indexOf(t);n>=0&&(this._names.splice(n,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var bl=function(t,n){var e=Z(t+"");if(arguments.length<2){for(var r=G(this.node()),i=-1,o=e.length;++ix}y.mouse("drag")}function i(){Pl(t.event.view).on("mousemove.drag mouseup.drag",null),mt(t.event.view,l),Ul(),y.mouse("end")}function o(){if(p.apply(this,arguments)){var n,e,r=t.event.changedTouches,i=d.apply(this,arguments),o=r.length;for(n=0;n=240?t-240:t+120,i,r),Ut(t,i,r),Ut(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1}}));var Kl=Math.PI/180,th=180/Math.PI,nh=.95047,eh=1,rh=1.08883,ih=4/29,oh=6/29,uh=3*oh*oh,ah=oh*oh*oh;Il(Ft,Ot,Tt(kt,{brighter:function(t){return new Ft(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker:function(t){return new Ft(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb:function(){var t=(this.l+16)/116,n=isNaN(this.a)?t:t+this.a/500,e=isNaN(this.b)?t:t-this.b/200;return t=eh*Yt(t),n=nh*Yt(n),e=rh*Yt(e),new zt(Bt(3.2404542*n-1.5371385*t-.4985314*e),Bt(-.969266*n+1.8760108*t+.041556*e),Bt(.0556434*n-.2040259*t+1.0572252*e),this.opacity)}})),Il($t,Xt,Tt(kt,{brighter:function(t){return new $t(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker:function(t){return new $t(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb:function(){return Dt(this).rgb()}}));var ch=-.14861,sh=1.78277,fh=-.29227,lh=-.90649,hh=1.97294,ph=hh*lh,dh=hh*sh,vh=sh*fh-lh*ch;Il(Zt,Wt,Tt(kt,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new Zt(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new Zt(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=isNaN(this.h)?0:(this.h+120)*Kl,n=+this.l,e=isNaN(this.s)?0:this.s*n*(1-n),r=Math.cos(t),i=Math.sin(t);return new zt(255*(n+e*(ch*r+sh*i)),255*(n+e*(fh*r+lh*i)),255*(n+e*(hh*r)),this.opacity)}}));var _h,yh,gh,mh,xh,bh,wh=function(t){var n=t.length-1;return function(e){var r=e<=0?e=0:e>=1?(e=1,n-1):Math.floor(e*n),i=t[r],o=t[r+1],u=r>0?t[r-1]:2*i-o,a=ro&&(i=n.slice(o,i),a[u]?a[u]+=i:a[++u]=i),(e=e[0])===(r=r[0])?a[u]?a[u]+=r:a[++u]=r:(a[++u]=null,c.push({i:u,x:Ch(e,r)})),o=Lh.lastIndex;return ohp&&e.statelp&&e.name===n)return new ne([[t]],ld,n,+r)}return null},pd=function(t){return function(){return t}},dd=function(t,n,e){this.target=t,this.type=n,this.selection=e},vd=function(){t.event.preventDefault(),t.event.stopImmediatePropagation()},_d={name:"drag"},yd={name:"space"},gd={name:"handle"},md={name:"center"},xd={name:"x",handles:["e","w"].map(ke),input:function(t,n){return t&&[[t[0],n[0][1]],[t[1],n[1][1]]]},output:function(t){return t&&[t[0][0],t[1][0]]}},bd={name:"y",handles:["n","s"].map(ke),input:function(t,n){return t&&[[n[0][0],t[0]],[n[1][0],t[1]]]},output:function(t){return t&&[t[0][1],t[1][1]]}},wd={name:"xy",handles:["n","e","s","w","nw","ne","se","sw"].map(ke),input:function(t){return t},output:function(t){return t}},Md={overlay:"crosshair",selection:"move",n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Td={e:"w",w:"e",nw:"ne",ne:"nw",se:"sw",sw:"se"},kd={n:"s",s:"n",nw:"sw",ne:"se",se:"ne",sw:"nw"},Nd={overlay:1,selection:1,n:null,e:1,s:null,w:-1,nw:-1,ne:1,se:1,sw:-1},Sd={overlay:1,selection:1,n:-1,e:null,s:1,w:null,nw:-1,ne:-1,se:1,sw:1},Ed=function(){return Le(wd)},Ad=Math.cos,Cd=Math.sin,zd=Math.PI,Pd=zd/2,Ld=2*zd,Rd=Math.max,qd=function(){function t(t){var o,u,a,c,s,f,l=t.length,h=[],p=cf(l),d=[],v=[],_=v.groups=new Array(l),y=new Array(l*l);for(o=0,s=-1;++s1e-6)if(Math.abs(f*a-c*s)>1e-6&&i){var h=e-o,p=r-u,d=a*a+c*c,v=h*h+p*p,_=Math.sqrt(d),y=Math.sqrt(l),g=i*Math.tan((Od-Math.acos((d+l-v)/(2*_*y)))/2),m=g/y,x=g/_;Math.abs(m-1)>1e-6&&(this._+="L"+(t+m*s)+","+(n+m*f)),this._+="A"+i+","+i+",0,0,"+ +(f*h>s*p)+","+(this._x1=t+x*a)+","+(this._y1=n+x*c)}else this._+="L"+(this._x1=t)+","+(this._y1=n);else;},arc:function(t,n,e,r,i,o){t=+t,n=+n,e=+e;var u=e*Math.cos(r),a=e*Math.sin(r),c=t+u,s=n+a,f=1^o,l=o?r-i:i-r;if(e<0)throw new Error("negative radius: "+e);null===this._x1?this._+="M"+c+","+s:(Math.abs(this._x1-c)>1e-6||Math.abs(this._y1-s)>1e-6)&&(this._+="L"+c+","+s),e&&(l<0&&(l=l%Fd+Fd),l>Id?this._+="A"+e+","+e+",0,1,"+f+","+(t-u)+","+(n-a)+"A"+e+","+e+",0,1,"+f+","+(this._x1=c)+","+(this._y1=s):l>1e-6&&(this._+="A"+e+","+e+",0,"+ +(l>=Od)+","+f+","+(this._x1=t+e*Math.cos(i))+","+(this._y1=n+e*Math.sin(i))))},rect:function(t,n,e,r){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+n)+"h"+ +e+"v"+ +r+"h"+-e+"Z"},toString:function(){return this._}};var Yd=function(){function t(){var t,a=Ud.call(arguments),c=n.apply(this,a),s=e.apply(this,a),f=+r.apply(this,(a[0]=c,a)),l=i.apply(this,a)-Pd,h=o.apply(this,a)-Pd,p=f*Ad(l),d=f*Cd(l),v=+r.apply(this,(a[0]=s,a)),_=i.apply(this,a)-Pd,y=o.apply(this,a)-Pd;if(u||(u=t=Ue()),u.moveTo(p,d),u.arc(0,0,f,l,h),l===_&&h===y||(u.quadraticCurveTo(0,0,v*Ad(_),v*Cd(_)),u.arc(0,0,v,_,y)),u.quadraticCurveTo(0,0,p,d),u.closePath(),t)return u=null,t+""||null}var n=De,e=Oe,r=Fe,i=Ie,o=Ye,u=null;return t.radius=function(n){return arguments.length?(r="function"==typeof n?n:Dd(+n),t):r},t.startAngle=function(n){return arguments.length?(i="function"==typeof n?n:Dd(+n),t):i},t.endAngle=function(n){return arguments.length?(o="function"==typeof n?n:Dd(+n),t):o},t.source=function(e){return arguments.length?(n=e,t):n},t.target=function(n){return arguments.length?(e=n,t):e},t.context=function(n){return arguments.length?(u=null==n?null:n,t):u},t};Be.prototype=He.prototype={constructor:Be,has:function(t){return"$"+t in this},get:function(t){return this["$"+t]},set:function(t,n){return this["$"+t]=n,this},remove:function(t){var n="$"+t;return n in this&&delete this[n]},clear:function(){for(var t in this)"$"===t[0]&&delete this[t]},keys:function(){var t=[];for(var n in this)"$"===n[0]&&t.push(n.slice(1));return t},values:function(){var t=[];for(var n in this)"$"===n[0]&&t.push(this[n]);return t},entries:function(){var t=[];for(var n in this)"$"===n[0]&&t.push({key:n.slice(1),value:this[n]});return t},size:function(){var t=0;for(var n in this)"$"===n[0]&&++t;return t},empty:function(){for(var t in this)if("$"===t[0])return!1;return!0},each:function(t){for(var n in this)"$"===n[0]&&t(this[n],n.slice(1),this)}};var Bd=function(){function t(n,i,u,a){if(i>=o.length)return null!=r?r(n):null!=e?n.sort(e):n;for(var c,s,f,l=-1,h=n.length,p=o[i++],d=He(),v=u();++lo.length)return t;var i,a=u[e-1];return null!=r&&e>=o.length?i=t.entries():(i=[],t.each(function(t,r){i.push({key:r,values:n(t,e)})})),null!=a?i.sort(function(t,n){return a(t.key,n.key)}):i}var e,r,i,o=[],u=[];return i={object:function(n){return t(n,0,je,Xe)},map:function(n){return t(n,0,$e,Ve)},entries:function(e){return n(t(e,0,$e,Ve),0)},key:function(t){return o.push(t),i},sortKeys:function(t){return u[o.length-1]=t,i},sortValues:function(t){return e=t,i},rollup:function(t){return r=t,i}}},Hd=He.prototype;We.prototype=Ze.prototype={constructor:We,has:Hd.has,add:function(t){return t+="",this["$"+t]=t,this},remove:Hd.remove,clear:Hd.clear,values:Hd.keys,size:Hd.size,empty:Hd.empty,each:Hd.each};var jd=function(t){var n=[];for(var e in t)n.push(e);return n},Xd=function(t){var n=[];for(var e in t)n.push(t[e]);return n},$d=function(t){var n=[];for(var e in t)n.push({key:e,value:t[e]});return n},Vd=function(t){function n(t,n){var r,i,o=e(t,function(t,e){if(r)return r(t,e-1);i=t,r=n?Je(t,n):Ge(t)});return o.columns=i,o}function e(t,n){function e(){if(f>=s)return u;if(i)return i=!1,o;var n,e=f;if(34===t.charCodeAt(e)){for(var r=e;r++t||t>i||r>n||n>o))return this;var u,a,c=i-e,s=this._root;switch(a=(n<(r+o)/2)<<1|t<(e+i)/2){case 0:do{u=new Array(4),u[a]=s,s=u}while(c*=2,i=e+c,o=r+c,t>i||n>o);break;case 1:do{u=new Array(4),u[a]=s,s=u}while(c*=2,e=i-c,o=r+c,e>t||n>o);break;case 2:do{u=new Array(4),u[a]=s,s=u}while(c*=2,i=e+c,r=o-c,t>i||r>n);break;case 3:do{u=new Array(4),u[a]=s,s=u}while(c*=2,e=i-c,r=o-c,e>t||r>n)}this._root&&this._root.length&&(this._root=s)}return this._x0=e,this._y0=r,this._x1=i,this._y1=o,this},sv=function(){var t=[];return this.visit(function(n){if(!n.length)do{t.push(n.data)}while(n=n.next)}),t},fv=function(t){return arguments.length?this.cover(+t[0][0],+t[0][1]).cover(+t[1][0],+t[1][1]):isNaN(this._x0)?void 0:[[this._x0,this._y0],[this._x1,this._y1]]},lv=function(t,n,e,r,i){this.node=t,this.x0=n,this.y0=e,this.x1=r,this.y1=i},hv=function(t,n,e){var r,i,o,u,a,c,s,f=this._x0,l=this._y0,h=this._x1,p=this._y1,d=[],v=this._root;for(v&&d.push(new lv(v,f,l,h,p)),null==e?e=1/0:(f=t-e,l=n-e,h=t+e,p=n+e,e*=e);c=d.pop();)if(!(!(v=c.node)||(i=c.x0)>h||(o=c.y0)>p||(u=c.x1)=y)<<1|t>=_)&&(c=d[d.length-1],d[d.length-1]=d[d.length-1-s],d[d.length-1-s]=c)}else{var g=t-+this._x.call(null,v.data),m=n-+this._y.call(null,v.data),x=g*g+m*m;if(x=(a=(d+_)/2))?d=a:_=a,(f=u>=(c=(v+y)/2))?v=c:y=c,n=p,!(p=p[l=f<<1|s]))return this;if(!p.length)break;(n[l+1&3]||n[l+2&3]||n[l+3&3])&&(e=n,h=l)}for(;p.data!==t;)if(r=p,!(p=p.next))return this;return(i=p.next)&&delete p.next,r?(i?r.next=i:delete r.next,this):n?(i?n[l]=i:delete n[l],(p=n[0]||n[1]||n[2]||n[3])&&p===(n[3]||n[2]||n[1]||n[0])&&!p.length&&(e?e[h]=p:this._root=p),this):(this._root=i,this)},dv=function(){return this._root},vv=function(){var t=0;return this.visit(function(n){if(!n.length)do{++t}while(n=n.next)}),t},_v=function(t){var n,e,r,i,o,u,a=[],c=this._root;for(c&&a.push(new lv(c,this._x0,this._y0,this._x1,this._y1));n=a.pop();)if(!t(c=n.node,r=n.x0,i=n.y0,o=n.x1,u=n.y1)&&c.length){var s=(r+o)/2,f=(i+u)/2;(e=c[3])&&a.push(new lv(e,s,f,o,u)),(e=c[2])&&a.push(new lv(e,r,f,s,u)),(e=c[1])&&a.push(new lv(e,s,i,o,f)),(e=c[0])&&a.push(new lv(e,r,i,s,f))}return this},yv=function(t){var n,e=[],r=[];for(this._root&&e.push(new lv(this._root,this._x0,this._y0,this._x1,this._y1));n=e.pop();){var i=n.node;if(i.length){var o,u=n.x0,a=n.y0,c=n.x1,s=n.y1,f=(u+c)/2,l=(a+s)/2;(o=i[0])&&e.push(new lv(o,u,a,f,l)),(o=i[1])&&e.push(new lv(o,f,a,c,l)),(o=i[2])&&e.push(new lv(o,u,l,f,s)),(o=i[3])&&e.push(new lv(o,f,l,c,s))}r.push(n)}for(;n=r.pop();)t(n.node,n.x0,n.y0,n.x1,n.y1);return this},gv=function(t){return arguments.length?(this._x=t,this):this._x},mv=function(t){return arguments.length?(this._y=t,this):this._y},xv=ir.prototype=or.prototype;xv.copy=function(){var t,n,e=new or(this._x,this._y,this._x0,this._y0,this._x1,this._y1),r=this._root;if(!r)return e;if(!r.length)return e._root=ur(r),e;for(t=[{source:r,target:e._root=new Array(4)}];r=t.pop();)for(var i=0;i<4;++i)(n=r.source[i])&&(n.length?t.push({source:n,target:r.target[i]=new Array(4)}):r.target[i]=ur(n));return e},xv.add=av,xv.addAll=tr,xv.cover=cv,xv.data=sv,xv.extent=fv,xv.find=hv,xv.remove=pv,xv.removeAll=nr,xv.root=dv,xv.size=vv,xv.visit=_v,xv.visitAfter=yv,xv.x=gv,xv.y=mv;var bv,wv=function(t){function n(){function t(t,n,e,r,i){var o=t.data,a=t.r,p=l+a;{if(!o)return n>s+p||rf+p||ic.index){var d=s-o.x-o.vx,v=f-o.y-o.vy,_=d*d+v*v;_t.r&&(t.r=t[n].r)}function r(){if(i){var n,e,r=i.length;for(o=new Array(r),n=0;n1?(null==n?l.remove(t):l.set(t,i(n)),o):l.get(t)},find:function(n,e,r){var i,o,u,a,c,s=0,f=t.length;for(null==r?r=1/0:r*=r,s=0;s1?(p.on(t,n),o):p.on(t)}}},Sv=function(){function t(t){var n,a=i.length,c=ir(i,lr,hr).visitAfter(e);for(u=t,n=0;n=f)){(t.data!==o||t.next)&&(0===i&&(i=uv(),p+=i*i),0===c&&(c=uv(),p+=c*c),p1?r[0]+r.slice(2):r,+t.slice(e+1)]},zv=function(t){return t=Cv(Math.abs(t)),t?t[1]:NaN},Pv=function(t,n){return function(e,r){for(var i=e.length,o=[],u=0,a=t[0],c=0;i>0&&a>0&&(c+a+1>r&&(a=Math.max(1,r-c)),o.push(e.substring(i-=a,i+a)),!((c+=a+1)>r));)a=t[u=(u+1)%t.length];return o.reverse().join(n)}},Lv=function(t){return function(n){return n.replace(/[0-9]/g,function(n){return t[+n]})}},Rv=function(t,n){t=t.toPrecision(n);t:for(var e,r=t.length,i=1,o=-1;i0&&(o=0)}return o>0?t.slice(0,o)+t.slice(e+1):t},qv=function(t,n){var e=Cv(t,n);if(!e)return t+"";var r=e[0],i=e[1],o=i-(bv=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,u=r.length;return o===u?r:o>u?r+new Array(o-u+1).join("0"):o>0?r.slice(0,o)+"."+r.slice(o):"0."+new Array(1-o).join("0")+Cv(t,Math.max(0,n+o-1))[0]},Uv=function(t,n){var e=Cv(t,n);if(!e)return t+"";var r=e[0],i=e[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")},Dv={"":Rv,"%":function(t,n){return(100*t).toFixed(n)},b:function(t){return Math.round(t).toString(2)},c:function(t){return t+""},d:function(t){return Math.round(t).toString(10)},e:function(t,n){return t.toExponential(n)},f:function(t,n){return t.toFixed(n)},g:function(t,n){return t.toPrecision(n)},o:function(t){return Math.round(t).toString(8)},p:function(t,n){return Uv(100*t,n)},r:Uv,s:qv,X:function(t){return Math.round(t).toString(16).toUpperCase()},x:function(t){return Math.round(t).toString(16)}},Ov=/^(?:(.)?([<>=^]))?([+\-\( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?([a-z%])?$/i;pr.prototype=dr.prototype,dr.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(null==this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(null==this.precision?"":"."+Math.max(0,0|this.precision))+this.type};var Fv,Iv=function(t){return t},Yv=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],Bv=function(t){function n(t){function n(t){var n,i,a,f=_,x=y;if("c"===v)x=g(t)+x,t="";else{t=+t;var b=t<0;if(t=g(Math.abs(t),d),b&&0==+t&&(b=!1),f=(b?"("===s?s:"-":"-"===s||"("===s?"":s)+f,x=x+("s"===v?Yv[8+bv/3]:"")+(b&&"("===s?")":""),m)for(n=-1,i=t.length;++n(a=t.charCodeAt(n))||a>57){x=(46===a?o+t.slice(n+1):t.slice(n))+x,t=t.slice(0,n);break}}p&&!l&&(t=r(t,1/0));var w=f.length+t.length+x.length,M=w>1)+f+t+x+M.slice(w);break;default:t=M+f+t+x}return u(t)}t=pr(t);var e=t.fill,c=t.align,s=t.sign,f=t.symbol,l=t.zero,h=t.width,p=t.comma,d=t.precision,v=t.type,_="$"===f?i[0]:"#"===f&&/[boxX]/.test(v)?"0"+v.toLowerCase():"",y="$"===f?i[1]:/[%p]/.test(v)?a:"",g=Dv[v],m=!v||/[defgprs%]/.test(v);return d=null==d?v?6:12:/[gprs]/.test(v)?Math.max(1,Math.min(21,d)):Math.max(0,Math.min(20,d)),n.toString=function(){return t+""},n}function e(t,e){var r=n((t=pr(t),t.type="f",t)),i=3*Math.max(-8,Math.min(8,Math.floor(zv(e)/3))),o=Math.pow(10,-i),u=Yv[8+i/3];return function(t){return r(o*t)+u}}var r=t.grouping&&t.thousands?Pv(t.grouping,t.thousands):Iv,i=t.currency,o=t.decimal,u=t.numerals?Lv(t.numerals):Iv,a=t.percent||"%";return{format:n,formatPrefix:e}};vr({decimal:".",thousands:",",grouping:[3],currency:["$",""]});var Hv=function(t){return Math.max(0,-zv(Math.abs(t)))},jv=function(t,n){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(zv(n)/3)))-zv(Math.abs(t)))},Xv=function(t,n){return t=Math.abs(t),n=Math.abs(n)-t,Math.max(0,zv(n)-zv(t))+1},$v=function(){return new _r};_r.prototype={constructor:_r,reset:function(){this.s=this.t=0},add:function(t){yr(T_,t,this.t),yr(this,T_.s,this.s),this.s?this.t+=T_.t:this.s=T_.t},valueOf:function(){return this.s}};var Vv,Wv,Zv,Gv,Jv,Qv,Kv,t_,n_,e_,r_,i_,o_,u_,a_,c_,s_,f_,l_,h_,p_,d_,v_,__,y_,g_,m_,x_,b_,w_,M_,T_=new _r,k_=1e-6,N_=Math.PI,S_=N_/2,E_=N_/4,A_=2*N_,C_=180/N_,z_=N_/180,P_=Math.abs,L_=Math.atan,R_=Math.atan2,q_=Math.cos,U_=Math.ceil,D_=Math.exp,O_=Math.log,F_=Math.pow,I_=Math.sin,Y_=Math.sign||function(t){return t>0?1:t<0?-1:0},B_=Math.sqrt,H_=Math.tan,j_={Feature:function(t,n){wr(t.geometry,n)},FeatureCollection:function(t,n){for(var e=t.features,r=-1,i=e.length;++rk_?n_=90:J_<-k_&&(Kv=-90),a_[0]=Qv,a_[1]=t_}},K_=function(t){var n,e,r,i,o,u,a;if(n_=t_=-(Qv=Kv=1/0),u_=[],$_(t,Q_),e=u_.length){for(u_.sort(jr),n=1,r=u_[0],o=[r];nHr(r[0],r[1])&&(r[1]=i[1]),Hr(i[0],r[1])>Hr(r[0],r[1])&&(r[0]=i[0])):o.push(r=i);for(u=-1/0,e=o.length-1,n=0,r=o[e];n<=e;r=i,++n)i=o[n],(a=Hr(r[1],i[0]))>u&&(u=a,Qv=i[0],t_=r[1])}return u_=a_=null,Qv===1/0||Kv===1/0?[[NaN,NaN],[NaN,NaN]]:[[Qv,Kv],[t_,n_]]},ty={sphere:br,point:$r,lineStart:Wr,lineEnd:Jr,polygonStart:function(){ty.lineStart=Qr,ty.lineEnd=Kr},polygonEnd:function(){ty.lineStart=Wr,ty.lineEnd=Jr}},ny=function(t){c_=s_=f_=l_=h_=p_=d_=v_=__=y_=g_=0,$_(t,ty);var n=__,e=y_,r=g_,i=n*n+e*e+r*r;return i<1e-12&&(n=p_,e=d_,r=v_,s_2?t[2]*z_:0),n.invert=function(n){return n=t.invert(n[0]*z_,n[1]*z_),n[0]*=C_,n[1]*=C_,n},n},_y=function(){function t(t,n){e.push(t=r(t,n)),t[0]*=C_,t[1]*=C_}function n(){var t=i.apply(this,arguments),n=o.apply(this,arguments)*z_,c=u.apply(this,arguments)*z_;return e=[],r=ri(-t[0]*z_,-t[1]*z_,0).invert,ai(a,n,c,1),t={type:"Polygon",coordinates:[e]},e=r=null,t}var e,r,i=ey([0,0]),o=ey(90),u=ey(6),a={point:t};return n.center=function(t){return arguments.length?(i="function"==typeof t?t:ey([+t[0],+t[1]]),n):i},n.radius=function(t){return arguments.length?(o="function"==typeof t?t:ey(+t),n):o},n.precision=function(t){return arguments.length?(u="function"==typeof t?t:ey(+t),n):u},n},yy=function(){var t,n=[];return{point:function(n,e){t.push([n,e])},lineStart:function(){n.push(t=[])},lineEnd:br,rejoin:function(){n.length>1&&n.push(n.pop().concat(n.shift()))},result:function(){var e=n;return n=[],t=null,e}}},gy=function(t,n,e,r,i,o){var u,a=t[0],c=t[1],s=n[0],f=n[1],l=0,h=1,p=s-a,d=f-c;if(u=e-a,p||!(u>0)){if(u/=p,p<0){if(u0){if(u>h)return;u>l&&(l=u)}if(u=i-a,p||!(u<0)){if(u/=p,p<0){if(u>h)return;u>l&&(l=u)}else if(p>0){if(u0)){if(u/=d,d<0){if(u0){if(u>h)return;u>l&&(l=u)}if(u=o-c,d||!(u<0)){if(u/=d,d<0){if(u>h)return;u>l&&(l=u)}else if(d>0){if(u0&&(t[0]=a+l*p,t[1]=c+l*d),h<1&&(n[0]=a+h*p,n[1]=c+h*d),!0}}}}},my=function(t,n){return P_(t[0]-n[0])=0;--o)i.point((f=s[o])[0],f[1]);else r(h.x,h.p.x,-1,i);h=h.p}h=h.o,s=h.z,p=!p}while(!h.v);i.lineEnd()}}},by=1e9,wy=-by,My=function(){var t,n,e,r=0,i=0,o=960,u=500;return e={stream:function(e){return t&&n===e?t:t=li(r,i,o,u)(n=e)},extent:function(a){return arguments.length?(r=+a[0][0],i=+a[0][1],o=+a[1][0],u=+a[1][1],t=n=null,e):[[r,i],[o,u]]}}},Ty=$v(),ky=function(t,n){var e=n[0],r=n[1],i=[I_(e),-q_(e),0],o=0,u=0;Ty.reset();for(var a=0,c=t.length;a=0?1:-1,T=M*w,k=T>N_,N=d*x;if(Ty.add(R_(N*M*I_(T),v*b+N*q_(T))),o+=k?w+M*A_:w,k^h>=e^g>=e){var S=Pr(Cr(l),Cr(y));qr(S);var E=Pr(i,S);qr(E);var A=(k^w>=0?-1:1)*mr(E[2]);(r>A||r===A&&(S[0]||S[1]))&&(u+=k^w>=0?1:-1)}}return(o<-k_||o0){for(x||(o.polygonStart(),x=!0),o.lineStart(),t=0;t1&&2&i&&u.push(u.pop().concat(u.shift())),d.push(u.filter(Xi))}var p,d,v,_=n(o),y=i.invert(r[0],r[1]),g=yy(),m=n(g),x=!1,b={point:u,lineStart:c,lineEnd:s,polygonStart:function(){b.point=f,b.lineStart=l,b.lineEnd=h,d=[],p=[]},polygonEnd:function(){b.point=u,b.lineStart=c,b.lineEnd=s,d=bf(d);var t=ky(p,y);d.length?(x||(o.polygonStart(),x=!0),xy(d,$i,t,e,o)):t&&(x||(o.polygonStart(),x=!0),o.lineStart(),e(null,null,1,o),o.lineEnd()),x&&(o.polygonEnd(),x=!1),d=p=null},sphere:function(){o.polygonStart(),o.lineStart(),e(null,null,1,o),o.lineEnd(),o.polygonEnd()}};return b}},fg=sg(function(){return!0},Vi,Zi,[-N_,-S_]),lg=function(t,n){function e(e,r,i,o){ai(o,t,n,i,e,r)}function r(t,n){return q_(t)*q_(n)>a}function i(t){var n,e,i,a,f;return{lineStart:function(){a=i=!1,f=1},point:function(l,h){var p,d=[l,h],v=r(l,h),_=c?v?0:u(l,h):v?u(l+(l<0?N_:-N_),h):0;if(!n&&(a=i=v)&&t.lineStart(),v!==i&&(!(p=o(n,d))||my(n,p)||my(d,p))&&(d[0]+=k_,d[1]+=k_,v=r(d[0],d[1])),v!==i)f=0,v?(t.lineStart(),p=o(d,n),t.point(p[0],p[1])):(p=o(n,d),t.point(p[0],p[1]),t.lineEnd()),n=p;else if(s&&n&&c^v){var y;_&e||!(y=o(d,n,!0))||(f=0,c?(t.lineStart(),t.point(y[0][0],y[0][1]),t.point(y[1][0],y[1][1]),t.lineEnd()):(t.point(y[1][0],y[1][1]),t.lineEnd(),t.lineStart(),t.point(y[0][0],y[0][1])))}!v||n&&my(n,d)||t.point(d[0],d[1]),n=d,i=v,e=_},lineEnd:function(){i&&t.lineEnd(),n=null},clean:function(){return f|(a&&i)<<1}}}function o(t,n,e){var r=Cr(t),i=Cr(n),o=[1,0,0],u=Pr(r,i),c=zr(u,u),s=u[0],f=c-s*s;if(!f)return!e&&t;var l=a*c/f,h=-a*s/f,p=Pr(o,u),d=Rr(o,l);Lr(d,Rr(u,h));var v=p,_=zr(d,v),y=zr(v,v),g=_*_-y*(zr(d,d)-1);if(!(g<0)){var m=B_(g),x=Rr(v,(-_-m)/y);if(Lr(x,d),x=Ar(x),!e)return x;var b,w=t[0],M=n[0],T=t[1],k=n[1];M0^x[1]<(P_(x[0]-w)N_^(w<=x[0]&&x[0]<=M)){var A=Rr(v,(-_+m)/y);return Lr(A,d),[x,Ar(A)]}}}function u(n,e){var r=c?t:N_-t,i=0;return n<-r?i|=1:n>r&&(i|=2),e<-r?i|=4:e>r&&(i|=8),i}var a=q_(t),c=a>0,s=P_(a)>k_;return sg(r,i,e,c?[0,-t]:[-N_,t-N_])},hg=function(t){return{stream:Gi(t)}};Ji.prototype={constructor:Ji,point:function(t,n){this.stream.point(t,n)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}};var pg=16,dg=q_(30*z_),vg=function(t,n){return+n?no(t,n):to(t)},_g=Gi({point:function(t,n){this.stream.point(t*z_,n*z_)}}),yg=function(){return io(uo).scale(155.424).center([0,33.6442])},gg=function(){return yg().parallels([29.5,45.5]).scale(1070).translate([480,250]).rotate([96,0]).center([-.6,38.7])},mg=function(){function t(t){var n=t[0],e=t[1];return a=null,i.point(n,e),a||(o.point(n,e),a)||(u.point(n,e),a)}function n(){return e=r=null,t}var e,r,i,o,u,a,c=gg(),s=yg().rotate([154,0]).center([-2,58.5]).parallels([55,65]),f=yg().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(t,n){a=[t,n]}};return t.invert=function(t){var n=c.scale(),e=c.translate(),r=(t[0]-e[0])/n,i=(t[1]-e[1])/n;return(i>=.12&&i<.234&&r>=-.425&&r<-.214?s:i>=.166&&i<.234&&r>=-.214&&r<-.115?f:c).invert(t)},t.stream=function(t){return e&&r===t?e:e=ao([c.stream(r=t),s.stream(t),f.stream(t)])},t.precision=function(t){return arguments.length?(c.precision(t),s.precision(t),f.precision(t),n()):c.precision()},t.scale=function(n){return arguments.length?(c.scale(n),s.scale(.35*n),f.scale(n),t.translate(c.translate())):c.scale()},t.translate=function(t){if(!arguments.length)return c.translate();var e=c.scale(),r=+t[0],a=+t[1];return i=c.translate(t).clipExtent([[r-.455*e,a-.238*e],[r+.455*e,a+.238*e]]).stream(l),o=s.translate([r-.307*e,a+.201*e]).clipExtent([[r-.425*e+k_,a+.12*e+k_],[r-.214*e-k_,a+.234*e-k_]]).stream(l),u=f.translate([r-.205*e,a+.212*e]).clipExtent([[r-.214*e+k_,a+.166*e+k_],[r-.115*e-k_,a+.234*e-k_]]).stream(l),n()},t.fitExtent=function(n,e){return Qi(t,n,e)},t.fitSize=function(n,e){return Ki(t,n,e)},t.scale(1070)},xg=co(function(t){return B_(2/(1+t))});xg.invert=so(function(t){return 2*mr(t/2)});var bg=function(){return eo(xg).scale(124.75).clipAngle(179.999)},wg=co(function(t){return(t=gr(t))&&t/I_(t)});wg.invert=so(function(t){return t});var Mg=function(){return eo(wg).scale(79.4188).clipAngle(179.999)};fo.invert=function(t,n){return[t,2*L_(D_(n))-S_]};var Tg=function(){return lo(fo).scale(961/A_)},kg=function(){return io(po).scale(109.5).parallels([30,30])};vo.invert=vo;var Ng=function(){return eo(vo).scale(152.63)},Sg=function(){return io(_o).scale(131.154).center([0,13.9389])};yo.invert=so(L_);var Eg=function(){return eo(yo).scale(144.049).clipAngle(60)},Ag=function(){function t(){return i=o=null,u}var n,e,r,i,o,u,a=1,c=0,s=0,f=1,l=1,h=Uy,p=null,d=Uy;return u={stream:function(t){return i&&o===t?i:i=h(d(o=t))},clipExtent:function(i){return arguments.length?(d=null==i?(p=n=e=r=null,Uy):li(p=+i[0][0],n=+i[0][1],e=+i[1][0],r=+i[1][1]),t()):null==p?null:[[p,n],[e,r]]},scale:function(n){return arguments.length?(h=go((a=+n)*f,a*l,c,s),t()):a},translate:function(n){return arguments.length?(h=go(a*f,a*l,c=+n[0],s=+n[1]),t()):[c,s]},reflectX:function(n){return arguments.length?(h=go(a*(f=n?-1:1),a*l,c,s),t()):f<0},reflectY:function(n){return arguments.length?(h=go(a*f,a*(l=n?-1:1),c,s),t()):l<0},fitExtent:function(t,n){return Qi(u,t,n)},fitSize:function(t,n){return Ki(u,t,n)}}};mo.invert=so(mr);var Cg=function(){return eo(mo).scale(249.5).clipAngle(90+k_)};xo.invert=so(function(t){return 2*L_(t)});var zg=function(){return eo(xo).scale(250).clipAngle(142)};bo.invert=function(t,n){return[-n,2*L_(D_(t))-S_]};var Pg=function(){var t=lo(bo),n=t.center,e=t.rotate;return t.center=function(t){return arguments.length?n([-t[1],t[0]]):(t=n(),[t[1],-t[0]])},t.rotate=function(t){return arguments.length?e([t[0],t[1],t.length>2?t[2]+90:90]):(t=e(),[t[0],t[1],t[2]-90])},e([0,0,90]).scale(159.155)},Lg=function(){function t(t){var o,u=0;t.eachAfter(function(t){var e=t.children;e?(t.x=Mo(e),t.y=ko(e)):(t.x=o?u+=n(t,o):0,t.y=0,o=t)});var a=So(t),c=Eo(t),s=a.x-n(a,c)/2,f=c.x+n(c,a)/2;return t.eachAfter(i?function(n){n.x=(n.x-t.x)*e,n.y=(t.y-n.y)*r}:function(n){n.x=(n.x-s)/(f-s)*e,n.y=(1-(t.y?n.y/t.y:1))*r})}var n=wo,e=1,r=1,i=!1;return t.separation=function(e){return arguments.length?(n=e,t):n},t.size=function(n){return arguments.length?(i=!1,e=+n[0],r=+n[1],t):i?null:[e,r]},t.nodeSize=function(n){return arguments.length?(i=!0,e=+n[0],r=+n[1],t):i?[e,r]:null},t},Rg=function(){return this.eachAfter(Ao)},qg=function(t){var n,e,r,i,o=this,u=[o];do{for(n=u.reverse(),u=[];o=n.pop();)if(t(o),e=o.children)for(r=0,i=e.length;r=0;--e)i.push(n[e]);return this},Dg=function(t){for(var n,e,r,i=this,o=[i],u=[];i=o.pop();)if(u.push(i),n=i.children)for(e=0,r=n.length;e=0;)e+=r[i].value;n.value=e})},Fg=function(t){return this.eachBefore(function(n){n.children&&n.children.sort(t)})},Ig=function(t){for(var n=this,e=Co(n,t),r=[n];n!==e;)n=n.parent,r.push(n);for(var i=r.length;t!==e;)r.splice(i,0,t),t=t.parent;return r},Yg=function(){for(var t=this,n=[t];t=t.parent;)n.push(t);return n},Bg=function(){var t=[];return this.each(function(n){t.push(n)}),t},Hg=function(){var t=[];return this.eachBefore(function(n){n.children||t.push(n)}),t},jg=function(){var t=this,n=[];return t.each(function(e){e!==t&&n.push({source:e.parent,target:e})}),n};Uo.prototype=zo.prototype={constructor:Uo,count:Rg,each:qg,eachAfter:Dg,eachBefore:Ug,sum:Og,sort:Fg,path:Ig,ancestors:Yg,descendants:Bg,leaves:Hg,links:jg,copy:Po};var Xg=function(t){for(var n=(t=t.slice()).length,e=null,r=e;n;){var i=new Do(t[n-1]);r=r?r.next=i:e=i,t[void 0]=t[--n]}return{head:e,tail:r}},$g=function(t){return Fo(Xg(t),[])},Vg=function(t){return Vo(t),t},Wg=function(t){return function(){return t}},Zg=function(){function t(t){return t.x=e/2,t.y=r/2,n?t.eachBefore(Qo(n)).eachAfter(Ko(i,.5)).eachBefore(tu(1)):t.eachBefore(Qo(Jo)).eachAfter(Ko(Go,1)).eachAfter(Ko(i,t.r/Math.min(e,r))).eachBefore(tu(Math.min(e,r)/(2*t.r))),t}var n=null,e=1,r=1,i=Go;return t.radius=function(e){return arguments.length?(n=Wo(e),t):n},t.size=function(n){return arguments.length?(e=+n[0],r=+n[1],t):[e,r]},t.padding=function(n){return arguments.length?(i="function"==typeof n?n:Wg(+n),t):i},t},Gg=function(t){t.x0=Math.round(t.x0),t.y0=Math.round(t.y0),t.x1=Math.round(t.x1),t.y1=Math.round(t.y1)},Jg=function(t,n,e,r,i){for(var o,u=t.children,a=-1,c=u.length,s=t.value&&(r-n)/t.value;++a0)throw new Error("cycle");return o}var n=nu,e=eu;return t.id=function(e){return arguments.length?(n=Zo(e),t):n},t.parentId=function(n){return arguments.length?(e=Zo(n),t):e},t};su.prototype=Object.create(Uo.prototype);var rm=function(){function t(t){var r=fu(t);if(r.eachAfter(n),r.parent.m=-r.z,r.eachBefore(e),c)t.eachBefore(i);else{var s=t,f=t,l=t;t.eachBefore(function(t){t.xf.x&&(f=t),t.depth>l.depth&&(l=t)});var h=s===f?1:o(s,f)/2,p=h-s.x,d=u/(f.x+h+p),v=a/(l.depth||1);t.eachBefore(function(t){t.x=(t.x+p)*d,t.y=t.depth*v})}return t}function n(t){var n=t.children,e=t.parent.children,i=t.i?e[t.i-1]:null;if(n){au(t);var u=(n[0].z+n[n.length-1].z)/2;i?(t.z=i.z+o(t._,i._),t.m=t.z-u):t.z=u}else i&&(t.z=i.z+o(t._,i._));t.parent.A=r(t,i,t.parent.A||e[0])}function e(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function r(t,n,e){if(n){for(var r,i=t,u=t,a=n,c=i.parent.children[0],s=i.m,f=u.m,l=a.m,h=c.m;a=ou(a),i=iu(i),a&&i;)c=iu(c),u=ou(u),u.a=t,r=a.z+l-i.z-s+o(a._,i._),r>0&&(uu(cu(a,t,e),t,r),s+=r,f+=r),l+=a.m,s+=i.m,h+=c.m,f+=u.m;a&&!ou(u)&&(u.t=a,u.m+=l-f),i&&!iu(c)&&(c.t=i,c.m+=s-h,e=t)}return e}function i(t){t.x*=u,t.y=t.depth*a}var o=ru,u=1,a=1,c=null;return t.separation=function(n){return arguments.length?(o=n,t):o},t.size=function(n){return arguments.length?(c=!1,u=+n[0],a=+n[1],t):c?null:[u,a]},t.nodeSize=function(n){return arguments.length?(c=!0,u=+n[0],a=+n[1],t):c?[u,a]:null},t},im=function(t,n,e,r,i){for(var o,u=t.children,a=-1,c=u.length,s=t.value&&(i-e)/t.value;++a1?n:1)},e}(om),am=function(){function t(t){return t.x0=t.y0=0,t.x1=i,t.y1=o,t.eachBefore(n),u=[0],r&&t.eachBefore(Gg),t}function n(t){var n=u[t.depth],r=t.x0+n,i=t.y0+n,o=t.x1-n,h=t.y1-n;o=n-1){var s=c[t];return s.x0=r,s.y0=i,s.x1=u,s.y1=a,void 0}for(var l=f[t],h=e/2+l,p=t+1,d=n-1;p>>1;f[v]a-i){var g=(r*y+u*_)/e;o(t,p,_,r,i,g,a),o(p,n,y,g,i,u,a)}else{var m=(i*y+a*_)/e;o(t,p,_,r,i,u,m),o(p,n,y,r,m,u,a)}}var u,a,c=t.children,s=c.length,f=new Array(s+1);for(f[0]=a=u=0;u1?n:1)},e}(om),lm=function(t){for(var n,e=-1,r=t.length,i=t[r-1],o=0;++e=0;--n)s.push(t[r[o[n]][2]]);for(n=+a;na!=s>a&&u<(c-e)*(a-r)/(s-r)+e&&(f=!f),c=e,s=r;return f},_m=function(t){for(var n,e,r=-1,i=t.length,o=t[i-1],u=o[0],a=o[1],c=0;++r1);return t+e*o*Math.sqrt(-2*Math.log(i)/i)}}return e.source=t,e}(mm),wm=function t(n){function e(){var t=bm.source(n).apply(this,arguments);return function(){return Math.exp(t())}}return e.source=t,e}(mm),Mm=function t(n){function e(t){return function(){for(var e=0,r=0;r=200&&e<300||304===e){if(o)try{n=o.call(r,s)}catch(t){return void a.call("error",r,t)}else n=s;a.call("load",r,n)}else a.call("error",r,t)}var r,i,o,u,a=v("beforesend","progress","load","error"),c=He(),s=new XMLHttpRequest,f=null,l=null,h=0;if("undefined"==typeof XDomainRequest||"withCredentials"in s||!/^(http(s)?:)?\/\//.test(t)||(s=new XDomainRequest),"onload"in s?s.onload=s.onerror=s.ontimeout=e:s.onreadystatechange=function(t){s.readyState>3&&e(t)},s.onprogress=function(t){a.call("progress",r,t)},r={header:function(t,n){return t=(t+"").toLowerCase(),arguments.length<2?c.get(t):(null==n?c.remove(t):c.set(t,n+""),r)},mimeType:function(t){return arguments.length?(i=null==t?null:t+"",r):i},responseType:function(t){return arguments.length?(u=t,r):u},timeout:function(t){return arguments.length?(h=+t,r):h},user:function(t){return arguments.length<1?f:(f=null==t?null:t+"",r)},password:function(t){return arguments.length<1?l:(l=null==t?null:t+"",r)},response:function(t){return o=t,r},get:function(t,n){return r.send("GET",t,n)},post:function(t,n){return r.send("POST",t,n)},send:function(n,e,o){return s.open(n,t,!0,f,l),null==i||c.has("accept")||c.set("accept",i+",*/*"),s.setRequestHeader&&c.each(function(t,n){s.setRequestHeader(n,t)}),null!=i&&s.overrideMimeType&&s.overrideMimeType(i),null!=u&&(s.responseType=u),h>0&&(s.timeout=h),null==o&&"function"==typeof e&&(o=e,e=null),null!=o&&1===o.length&&(o=bu(o)),null!=o&&r.on("error",o).on("load",function(t){o(null,t)}),a.call("beforesend",r,s),s.send(null==e?null:e),r},abort:function(){return s.abort(),r},on:function(){var t=a.on.apply(a,arguments);return t===a?r:t}},null!=n){if("function"!=typeof n)throw new Error("invalid callback: "+n);return r.get(n)}return r},Sm=function(t,n){return function(e,r){var i=Nm(e).mimeType(t).response(n);if(null!=r){if("function"!=typeof r)throw new Error("invalid callback: "+r);return i.get(r)}return i}},Em=Sm("text/html",function(t){return document.createRange().createContextualFragment(t.responseText)}),Am=Sm("application/json",function(t){return JSON.parse(t.responseText)}),Cm=Sm("text/plain",function(t){return t.responseText}),zm=Sm("application/xml",function(t){var n=t.responseXML;if(!n)throw new Error("parse error");return n}),Pm=function(t,n){return function(e,r,i){arguments.length<3&&(i=r,r=null);var o=Nm(e).mimeType(t);return o.row=function(t){return arguments.length?o.response(Mu(n,r=t)):r},o.row(r),i?o.get(i):o}},Lm=Pm("text/csv",Zd),Rm=Pm("text/tab-separated-values",tv),qm=Array.prototype,Um=qm.map,Dm=qm.slice,Om={name:"implicit"},Fm=function(t){return function(){return t}},Im=function(t){return+t},Ym=[0,1],Bm=function(n,e,r){var o,u=n[0],a=n[n.length-1],c=i(u,a,null==e?10:e);switch(r=pr(null==r?",f":r),r.type){case"s":var s=Math.max(Math.abs(u),Math.abs(a));return null!=r.precision||isNaN(o=jv(c,s))||(r.precision=o),t.formatPrefix(r,s);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(o=Xv(c,Math.max(Math.abs(u),Math.abs(a))))||(r.precision=o-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(o=Hv(c))||(r.precision=o-2*("%"===r.type))}return t.format(r)},Hm=function(t,n){t=t.slice();var e,r=0,i=t.length-1,o=t[r],u=t[i];return u0?t>1?Ju(function(n){n.setTime(Math.floor(n/t)*t)},function(n,e){n.setTime(+n+e*t)},function(n,e){return(e-n)/t}):$m:null};var Vm=$m.range,Wm=6e4,Zm=6048e5,Gm=Ju(function(t){t.setTime(1e3*Math.floor(t/1e3))},function(t,n){t.setTime(+t+1e3*n)},function(t,n){return(n-t)/1e3},function(t){return t.getUTCSeconds()}),Jm=Gm.range,Qm=Ju(function(t){t.setTime(Math.floor(t/Wm)*Wm)},function(t,n){t.setTime(+t+n*Wm)},function(t,n){return(n-t)/Wm},function(t){return t.getMinutes()}),Km=Qm.range,tx=Ju(function(t){var n=t.getTimezoneOffset()*Wm%36e5;n<0&&(n+=36e5),t.setTime(36e5*Math.floor((+t-n)/36e5)+n)},function(t,n){t.setTime(+t+36e5*n)},function(t,n){return(n-t)/36e5},function(t){return t.getHours()}),nx=tx.range,ex=Ju(function(t){t.setHours(0,0,0,0)},function(t,n){t.setDate(t.getDate()+n)},function(t,n){return(n-t-(n.getTimezoneOffset()-t.getTimezoneOffset())*Wm)/864e5},function(t){return t.getDate()-1}),rx=ex.range,ix=Qu(0),ox=Qu(1),ux=Qu(2),ax=Qu(3),cx=Qu(4),sx=Qu(5),fx=Qu(6),lx=ix.range,hx=ox.range,px=ux.range,dx=ax.range,vx=cx.range,_x=sx.range,yx=fx.range,gx=Ju(function(t){t.setDate(1),t.setHours(0,0,0,0)},function(t,n){t.setMonth(t.getMonth()+n)},function(t,n){return n.getMonth()-t.getMonth()+12*(n.getFullYear()-t.getFullYear())},function(t){return t.getMonth()}),mx=gx.range,xx=Ju(function(t){t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,n){t.setFullYear(t.getFullYear()+n)},function(t,n){return n.getFullYear()-t.getFullYear()},function(t){return t.getFullYear()});xx.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Ju(function(n){n.setFullYear(Math.floor(n.getFullYear()/t)*t),n.setMonth(0,1),n.setHours(0,0,0,0)},function(n,e){n.setFullYear(n.getFullYear()+e*t)}):null};var bx=xx.range,wx=Ju(function(t){t.setUTCSeconds(0,0)},function(t,n){t.setTime(+t+n*Wm)},function(t,n){return(n-t)/Wm},function(t){return t.getUTCMinutes()}),Mx=wx.range,Tx=Ju(function(t){t.setUTCMinutes(0,0,0)},function(t,n){t.setTime(+t+36e5*n)},function(t,n){return(n-t)/36e5},function(t){return t.getUTCHours()}),kx=Tx.range,Nx=Ju(function(t){t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCDate(t.getUTCDate()+n)},function(t,n){return(n-t)/864e5},function(t){return t.getUTCDate()-1}),Sx=Nx.range,Ex=Ku(0),Ax=Ku(1),Cx=Ku(2),zx=Ku(3),Px=Ku(4),Lx=Ku(5),Rx=Ku(6),qx=Ex.range,Ux=Ax.range,Dx=Cx.range,Ox=zx.range,Fx=Px.range,Ix=Lx.range,Yx=Rx.range,Bx=Ju(function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCMonth(t.getUTCMonth()+n)},function(t,n){return n.getUTCMonth()-t.getUTCMonth()+12*(n.getUTCFullYear()-t.getUTCFullYear())},function(t){return t.getUTCMonth()}),Hx=Bx.range,jx=Ju(function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCFullYear(t.getUTCFullYear()+n)},function(t,n){return n.getUTCFullYear()-t.getUTCFullYear()},function(t){return t.getUTCFullYear()});jx.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Ju(function(n){n.setUTCFullYear(Math.floor(n.getUTCFullYear()/t)*t),n.setUTCMonth(0,1),n.setUTCHours(0,0,0,0)},function(n,e){n.setUTCFullYear(n.getUTCFullYear()+e*t)}):null};var Xx,$x=jx.range,Vx={"-":"",_:" ",0:"0"},Wx=/^\s*\d+/,Zx=/^%/,Gx=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;Ja({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});var Jx=Date.prototype.toISOString?Qa:t.utcFormat("%Y-%m-%dT%H:%M:%S.%LZ"),Qx=+new Date("2000-01-01T00:00:00.000Z")?Ka:t.utcParse("%Y-%m-%dT%H:%M:%S.%LZ"),Kx=1e3,tb=60*Kx,nb=60*tb,eb=24*nb,rb=7*eb,ib=30*eb,ob=365*eb,ub=function(){return ec(xx,gx,ix,ex,tx,Qm,Gm,$m,t.timeFormat).domain([new Date(2e3,0,1),new Date(2e3,0,2)])},ab=function(){return ec(jx,Bx,Ex,Nx,Tx,wx,Gm,$m,t.utcFormat).domain([Date.UTC(2e3,0,1),Date.UTC(2e3,0,2)])},cb=function(t){return t.match(/.{6}/g).map(function(t){return"#"+t})},sb=cb("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf"),fb=cb("393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6"),lb=cb("3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9"),hb=cb("1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5"),pb=Zh(Wt(300,.5,0),Wt(-240,.5,1)),db=Zh(Wt(-100,.75,.35),Wt(80,1.5,.8)),vb=Zh(Wt(260,.75,.35),Wt(80,1.5,.8)),_b=Wt(),yb=function(t){(t<0||t>1)&&(t-=Math.floor(t));var n=Math.abs(t-.5);return _b.h=360*t-100,_b.s=1.5-1.5*n,_b.l=.8-.9*n,_b+""},gb=rc(cb("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),mb=rc(cb("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),xb=rc(cb("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),bb=rc(cb("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),wb=function(t){return function(){return t}},Mb=Math.abs,Tb=Math.atan2,kb=Math.cos,Nb=Math.max,Sb=Math.min,Eb=Math.sin,Ab=Math.sqrt,Cb=1e-12,zb=Math.PI,Pb=zb/2,Lb=2*zb,Rb=function(){function t(){var t,s,f=+n.apply(this,arguments),l=+e.apply(this,arguments),h=o.apply(this,arguments)-Pb,p=u.apply(this,arguments)-Pb,d=Mb(p-h),v=p>h;if(c||(c=t=Ue()),lCb)if(d>Lb-Cb)c.moveTo(l*kb(h),l*Eb(h)),c.arc(0,0,l,h,p,!v),f>Cb&&(c.moveTo(f*kb(p),f*Eb(p)),c.arc(0,0,f,p,h,v));else{var _,y,g=h,m=p,x=h,b=p,w=d,M=d,T=a.apply(this,arguments)/2,k=T>Cb&&(i?+i.apply(this,arguments):Ab(f*f+l*l)),N=Sb(Mb(l-f)/2,+r.apply(this,arguments)),S=N,E=N;if(k>Cb){var A=uc(k/f*Eb(T)),C=uc(k/l*Eb(T));(w-=2*A)>Cb?(A*=v?1:-1,x+=A,b-=A):(w=0,x=b=(h+p)/2),(M-=2*C)>Cb?(C*=v?1:-1,g+=C,m-=C):(M=0,g=m=(h+p)/2)}var z=l*kb(g),P=l*Eb(g),L=f*kb(b),R=f*Eb(b);if(N>Cb){var q=l*kb(m),U=l*Eb(m),D=f*kb(x),O=f*Eb(x);if(dCb?hc(z,P,D,O,q,U,L,R):[L,R],I=z-F[0],Y=P-F[1],B=q-F[0],H=U-F[1],j=1/Eb(oc((I*B+Y*H)/(Ab(I*I+Y*Y)*Ab(B*B+H*H)))/2),X=Ab(F[0]*F[0]+F[1]*F[1]);S=Sb(N,(f-X)/(j-1)),E=Sb(N,(l-X)/(j+1))}}M>Cb?E>Cb?(_=pc(D,O,z,P,l,E,v),y=pc(q,U,L,R,l,E,v),c.moveTo(_.cx+_.x01,_.cy+_.y01),ECb&&w>Cb?S>Cb?(_=pc(L,R,q,U,f,-S,v),y=pc(z,P,D,O,f,-S,v),c.lineTo(_.cx+_.x01,_.cy+_.y01),S=f;--l)s.point(_[l],y[l]);s.lineEnd(),s.areaEnd()}v&&(_[n]=+e(h,n,t),y[n]=+i(h,n,t),s.point(r?+r(h,n,t):_[n],o?+o(h,n,t):y[n]))}if(p)return s=null,p+""||null}function n(){return Ub().defined(u).curve(c).context(a)}var e=vc,r=null,i=wb(0),o=_c,u=wb(!0),a=null,c=qb,s=null;return t.x=function(n){return arguments.length?(e="function"==typeof n?n:wb(+n),r=null,t):e},t.x0=function(n){return arguments.length?(e="function"==typeof n?n:wb(+n),t):e},t.x1=function(n){return arguments.length?(r=null==n?null:"function"==typeof n?n:wb(+n),t):r},t.y=function(n){return arguments.length?(i="function"==typeof n?n:wb(+n),o=null,t):i},t.y0=function(n){return arguments.length?(i="function"==typeof n?n:wb(+n),t):i},t.y1=function(n){return arguments.length?(o=null==n?null:"function"==typeof n?n:wb(+n),t):o},t.lineX0=t.lineY0=function(){return n().x(e).y(i)},t.lineY1=function(){return n().x(e).y(o)},t.lineX1=function(){return n().x(r).y(i)},t.defined=function(n){return arguments.length?(u="function"==typeof n?n:wb(!!n),t):u},t.curve=function(n){return arguments.length?(c=n,null!=a&&(s=c(a)),t):c},t.context=function(n){return arguments.length?(null==n?a=s=null:s=c(a=n),t):a},t},Ob=function(t,n){return nt?1:n>=t?0:NaN},Fb=function(t){return t},Ib=function(){function t(t){var a,c,s,f,l,h=t.length,p=0,d=new Array(h),v=new Array(h),_=+i.apply(this,arguments),y=Math.min(Lb,Math.max(-Lb,o.apply(this,arguments)-_)),g=Math.min(Math.abs(y)/h,u.apply(this,arguments)),m=g*(y<0?-1:1);for(a=0;a0&&(p+=l);for(null!=e?d.sort(function(t,n){return e(v[t],v[n])}):null!=r&&d.sort(function(n,e){return r(t[n],t[e])}),a=0,s=p?(y-h*m)/p:0;a0?l*s:0)+m,v[c]={data:t[c],index:a,value:l,startAngle:_,endAngle:f,padAngle:g};return v}var n=Fb,e=Ob,r=null,i=wb(0),o=wb(Lb),u=wb(0);return t.value=function(e){return arguments.length?(n="function"==typeof e?e:wb(+e),t):n},t.sortValues=function(n){return arguments.length?(e=n,r=null,t):e},t.sort=function(n){return arguments.length?(r=n,e=null,t):r},t.startAngle=function(n){return arguments.length?(i="function"==typeof n?n:wb(+n),t):i},t.endAngle=function(n){return arguments.length?(o="function"==typeof n?n:wb(+n),t):o},t.padAngle=function(n){return arguments.length?(u="function"==typeof n?n:wb(+n),t):u},t},Yb=gc(qb);yc.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(t,n){this._curve.point(n*Math.sin(t),n*-Math.cos(t))}};var Bb=function(){return mc(Ub().curve(Yb))},Hb=function(){var t=Db().curve(Yb),n=t.curve,e=t.lineX0,r=t.lineX1,i=t.lineY0,o=t.lineY1;return t.angle=t.x,delete t.x,t.startAngle=t.x0,delete t.x0,t.endAngle=t.x1,delete t.x1,t.radius=t.y,delete t.y,t.innerRadius=t.y0,delete t.y0,t.outerRadius=t.y1,delete t.y1,t.lineStartAngle=function(){return mc(e())},delete t.lineX0,t.lineEndAngle=function(){return mc(r())},delete t.lineX1,t.lineInnerRadius=function(){return mc(i())},delete t.lineY0,t.lineOuterRadius=function(){return mc(o())},delete t.lineY1,t.curve=function(t){return arguments.length?n(gc(t)):n()._curve},t},jb=Array.prototype.slice,Xb=function(t,n){return[(n=+n)*Math.cos(t-=Math.PI/2),n*Math.sin(t)]},$b={draw:function(t,n){var e=Math.sqrt(n/zb);t.moveTo(e,0),t.arc(0,0,e,0,Lb)}},Vb={draw:function(t,n){var e=Math.sqrt(n/5)/2;t.moveTo(-3*e,-e),t.lineTo(-e,-e),t.lineTo(-e,-3*e),t.lineTo(e,-3*e),t.lineTo(e,-e),t.lineTo(3*e,-e),t.lineTo(3*e,e),t.lineTo(e,e),t.lineTo(e,3*e),t.lineTo(-e,3*e),t.lineTo(-e,e),t.lineTo(-3*e,e),t.closePath()}},Wb=Math.sqrt(1/3),Zb=2*Wb,Gb={draw:function(t,n){var e=Math.sqrt(n/Zb),r=e*Wb;t.moveTo(0,-e),t.lineTo(r,0),t.lineTo(0,e),t.lineTo(-r,0),t.closePath()}},Jb=Math.sin(zb/10)/Math.sin(7*zb/10),Qb=Math.sin(Lb/10)*Jb,Kb=-Math.cos(Lb/10)*Jb,tw={draw:function(t,n){var e=Math.sqrt(.8908130915292852*n),r=Qb*e,i=Kb*e;t.moveTo(0,-e),t.lineTo(r,i);for(var o=1;o<5;++o){var u=Lb*o/5,a=Math.cos(u),c=Math.sin(u);t.lineTo(c*e,-a*e),t.lineTo(a*r-c*i,c*r+a*i)}t.closePath()}},nw={draw:function(t,n){var e=Math.sqrt(n),r=-e/2;t.rect(r,r,e,e)}},ew=Math.sqrt(3),rw={draw:function(t,n){var e=-Math.sqrt(n/(3*ew));t.moveTo(0,2*e),t.lineTo(-ew*e,-e),t.lineTo(ew*e,-e),t.closePath()}},iw=-.5,ow=Math.sqrt(3)/2,uw=1/Math.sqrt(12),aw=3*(uw/2+1),cw={draw:function(t,n){var e=Math.sqrt(n/aw),r=e/2,i=e*uw,o=r,u=e*uw+e,a=-o,c=u;t.moveTo(r,i),t.lineTo(o,u),t.lineTo(a,c),t.lineTo(iw*r-ow*i,ow*r+iw*i),t.lineTo(iw*o-ow*u,ow*o+iw*u),t.lineTo(iw*a-ow*c,ow*a+iw*c),t.lineTo(iw*r+ow*i,iw*i-ow*r),t.lineTo(iw*o+ow*u,iw*u-ow*o),t.lineTo(iw*a+ow*c,iw*c-ow*a),t.closePath()}},sw=[$b,Vb,Gb,nw,tw,rw,cw],fw=function(){function t(){var t;if(r||(r=t=Ue()),n.apply(this,arguments).draw(r,+e.apply(this,arguments)),t)return r=null,t+""||null}var n=wb($b),e=wb(64),r=null;return t.type=function(e){return arguments.length?(n="function"==typeof e?e:wb(e),t):n},t.size=function(n){return arguments.length?(e="function"==typeof n?n:wb(+n),t):e},t.context=function(n){return arguments.length?(r=null==n?null:n,t):r},t},lw=function(){};Cc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Ac(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Ac(this,t,n)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n}};var hw=function(t){return new Cc(t)};zc.prototype={areaStart:lw,areaEnd:lw,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._x2=t,this._y2=n;break;case 1:this._point=2,this._x3=t,this._y3=n;break;case 2:this._point=3,this._x4=t,this._y4=n,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+n)/6);break;default:Ac(this,t,n)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n}};var pw=function(t){return new zc(t)};Pc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var e=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+n)/6;this._line?this._context.lineTo(e,r):this._context.moveTo(e,r);break;case 3:this._point=4;default:Ac(this,t,n)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n}};var dw=function(t){return new Pc(t)};Lc.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,n=this._y,e=t.length-1;if(e>0)for(var r,i=t[0],o=n[0],u=t[e]-i,a=n[e]-o,c=-1;++c<=e;)r=c/e,this._basis.point(this._beta*t[c]+(1-this._beta)*(i+r*u),this._beta*n[c]+(1-this._beta)*(o+r*a));this._x=this._y=null,this._basis.lineEnd()},point:function(t,n){this._x.push(+t),this._y.push(+n)}};var vw=function t(n){function e(t){return 1===n?new Cc(t):new Lc(t,n)}return e.beta=function(n){return t(+n)},e}(.85);qc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:Rc(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2,this._x1=t,this._y1=n;break;case 2:this._point=3;default:Rc(this,t,n)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1, +this._y1=this._y2,this._y2=n}};var _w=function t(n){function e(t){return new qc(t,n)}return e.tension=function(n){return t(+n)},e}(0);Uc.prototype={areaStart:lw,areaEnd:lw,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._x3=t,this._y3=n;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=n);break;case 2:this._point=3,this._x5=t,this._y5=n;break;default:Rc(this,t,n)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var yw=function t(n){function e(t){return new Uc(t,n)}return e.tension=function(n){return t(+n)},e}(0);Dc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Rc(this,t,n)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var gw=function t(n){function e(t){return new Dc(t,n)}return e.tension=function(n){return t(+n)},e}(0);Fc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){if(t=+t,n=+n,this._point){var e=this._x2-t,r=this._y2-n;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(e*e+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;break;case 2:this._point=3;default:Oc(this,t,n)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var mw=function t(n){function e(t){return n?new Fc(t,n):new qc(t,0)}return e.alpha=function(n){return t(+n)},e}(.5);Ic.prototype={areaStart:lw,areaEnd:lw,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,n){if(t=+t,n=+n,this._point){var e=this._x2-t,r=this._y2-n;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(e*e+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=n;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=n);break;case 2:this._point=3,this._x5=t,this._y5=n;break;default:Oc(this,t,n)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var xw=function t(n){function e(t){return n?new Ic(t,n):new Uc(t,0)}return e.alpha=function(n){return t(+n)},e}(.5);Yc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){if(t=+t,n=+n,this._point){var e=this._x2-t,r=this._y2-n;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(e*e+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Oc(this,t,n)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var bw=function t(n){function e(t){return n?new Yc(t,n):new Dc(t,0)}return e.alpha=function(n){return t(+n)},e}(.5);Bc.prototype={areaStart:lw,areaEnd:lw,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,n){t=+t,n=+n,this._point?this._context.lineTo(t,n):(this._point=1,this._context.moveTo(t,n))}};var ww=function(t){return new Bc(t)};Vc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:$c(this,this._t0,Xc(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){var e=NaN;if(t=+t,n=+n,t!==this._x1||n!==this._y1){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;break;case 2:this._point=3,$c(this,Xc(this,e=jc(this,t,n)),e);break;default:$c(this,this._t0,e=jc(this,t,n))}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n,this._t0=e}}},(Wc.prototype=Object.create(Vc.prototype)).point=function(t,n){Vc.prototype.point.call(this,n,t)},Zc.prototype={moveTo:function(t,n){this._context.moveTo(n,t)},closePath:function(){this._context.closePath()},lineTo:function(t,n){this._context.lineTo(n,t)},bezierCurveTo:function(t,n,e,r,i,o){this._context.bezierCurveTo(n,t,r,e,o,i)}},Qc.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,n=this._y,e=t.length;if(e)if(this._line?this._context.lineTo(t[0],n[0]):this._context.moveTo(t[0],n[0]),2===e)this._context.lineTo(t[1],n[1]);else for(var r=Kc(t),i=Kc(n),o=0,u=1;u=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,n),this._context.lineTo(t,n);else{var e=this._x*(1-this._t)+t*this._t;this._context.lineTo(e,this._y),this._context.lineTo(e,n)}}this._x=t,this._y=n}};var Tw=function(t){return new ts(t,.5)},kw=function(t,n){if((i=t.length)>1)for(var e,r,i,o=1,u=t[n[0]],a=u.length;o=0;)e[n]=n;return e},Sw=function(){function t(t){var o,u,a=n.apply(this,arguments),c=t.length,s=a.length,f=new Array(s);for(o=0;o0){for(var e,r,i,o=0,u=t[0].length;o1)for(var e,r,i,o,u,a,c=0,s=t[n[0]].length;c=0?(r[0]=o,r[1]=o+=i):i<0?(r[1]=u,r[0]=u+=i):r[0]=o},Cw=function(t,n){if((e=t.length)>0){for(var e,r=0,i=t[n[0]],o=i.length;r0&&(r=(e=t[n[0]]).length)>0){for(var e,r,i,o=0,u=1;u=a)return null;var c=t-i.site[0],s=n-i.site[1],f=c*c+s*s;do{i=o.cells[r=u],u=null,i.halfedges.forEach(function(e){var r=o.edges[e],a=r.left;if(a!==i.site&&a||(a=r.right)){var c=t-a[0],s=n-a[1],l=c*c+s*s;le?(e+r)/2:Math.min(0,e)||Math.max(0,r),o>i?(i+o)/2:Math.min(0,i)||Math.max(0,o))}function o(t){return[(+t[0][0]+ +t[1][0])/2,(+t[0][1]+ +t[1][1])/2]}function u(t,n,e){t.on("start.zoom",function(){a(this,arguments).start()}).on("interrupt.zoom end.zoom",function(){a(this,arguments).end()}).tween("zoom",function(){var t=this,r=arguments,i=a(t,r),u=m.apply(t,r),c=e||o(u),s=Math.max(u[1][0]-u[0][0],u[1][1]-u[0][1]),f=t.__zoom,l="function"==typeof n?n.apply(t,r):n,h=S(f.invert(c).concat(s/f.k),l.invert(c).concat(s/l.k));return function(t){if(1===t)t=l;else{var n=h(t),e=s/n[2];t=new Os(e,c[0]-n[0]*e,c[1]-n[1]*e)}i.zoom(null,t)}})}function a(t,n){for(var e,r=0,i=E.length;rL}o.zoom("mouse",i(r(o.that.__zoom,o.mouse[0]=Gf(o.that),o.mouse[1]),o.extent))}function e(){u.on("mousemove.zoom mouseup.zoom",null),mt(t.event.view,o.moved),Zw(),o.end()}if(!y&&g.apply(this,arguments)){var o=a(this,arguments),u=Pl(t.event.view).on("mousemove.zoom",n,!0).on("mouseup.zoom",e,!0),c=Gf(this),s=t.event.clientX,f=t.event.clientY;Dl(t.event.view),Is(),o.mouse=[c,this.__zoom.invert(c)],gp(this),o.start()}}function l(){if(g.apply(this,arguments)){var o=this.__zoom,a=Gf(this),c=o.invert(a),s=o.k*(t.event.shiftKey?.5:2),f=i(r(e(o,s),a,c),m.apply(this,arguments));Zw(),N>0?Pl(this).transition().duration(N).call(u,f,a):Pl(this).call(n.transform,f)}}function h(){if(g.apply(this,arguments)){var n,e,r,i,o=a(this,arguments),u=t.event.changedTouches,c=u.length;for(Is(),e=0;e= 0; n--) { + link = depthFirstCycleSearch(nodes[n], []); + if (link) { + return link; + } + } + + // Depth-first search to find a link that is part of a cycle. + function depthFirstCycleSearch(cursorNode, path) { + var target, link; + for (var n = cursorNode.sourceLinks.length - 1; n >= 0; n--) { + link = cursorNode.sourceLinks[n]; + if (link.cycleBreaker) { + // Skip already known cycle breakers. + continue; + } + + // Check if target of link makes a cycle in current path. + target = link.target; + for (var l = 0; l < path.length; l++) { + if (path[l].source == target) { + // We found a cycle. Search for weakest link in cycle + var weakest = link; + for (; l < path.length; l++) { + if (path[l].value < weakest.value) { + weakest = path[l]; + } + } + // Mark weakest link as (known) cycle breaker and abort search. + weakest.cycleBreaker = true; + return weakest; + } + } + + // Recurse deeper. + path.push(link); + link = depthFirstCycleSearch(target, path); + path.pop(); + // Stop further search if we found a cycle breaker. + if (link) { + return link; + } + } + } + } + + + function moveSourcesRight() { + nodes.forEach(function(node) { + if (!node.targetLinks.length) { + node.x = d3.min(node.sourceLinks, function(d) { return d.target.x; }) - 1; + } + }); + } + + function moveSinksRight(x) { + nodes.forEach(function(node) { + if (!node.sourceLinks.length) { + node.x = x - 1; + } else { + //move node to second from right + var nodes_to_right = 0; + node.sourceLinks.forEach(function(n) { + nodes_to_right = Math.max(nodes_to_right,n.target.sourceLinks.length) + //console.log(node.name,n) + }) + //console.log(node.name,nodes_to_right) + if (nodes_to_right==0)node.x = x - 2; + } + + }); + } + + function scaleNodeBreadths(kx) { + nodes.forEach(function(node) { + node.x *= kx; + }); + } + + // Compute the depth (y-position) for each node. + function computeNodeDepths(iterations) { + // Group nodes by breath. + var nodesByBreadth = d3.nest() + .key(function(d) { return d.x; }) + .sortKeys(d3.ascending) + .entries(nodes) + .map(function(d) { return d.values; }); + + // + initializeNodeDepth(); + resolveCollisions(); + computeLinkDepths(); + for (var alpha = 1; iterations > 0; --iterations) { + relaxRightToLeft(alpha *= .99); + resolveCollisions(); + computeLinkDepths(); + relaxLeftToRight(alpha); + resolveCollisions(); + computeLinkDepths(); + } + + function initializeNodeDepth() { + // Calculate vertical scaling factor. + var ky = d3.min(nodesByBreadth, function(nodes) { + return (size[1] - (nodes.length - 1) * nodePadding) / d3.sum(nodes, value); + }); + + nodesByBreadth.forEach(function(nodes) { + nodes.forEach(function(node, i) { + node.y = i; + node.dy = node.value * ky; + }); + }); + + links.forEach(function(link) { + link.dy = link.value * ky; + }); + } + + function relaxLeftToRight(alpha) { + nodesByBreadth.forEach(function(nodes, breadth) { + nodes.forEach(function(node) { + if (node.targetLinks.length) { + // Value-weighted average of the y-position of source node centers linked to this node. + var y = d3.sum(node.targetLinks, weightedSource) / d3.sum(node.targetLinks, value); + node.y += (y - center(node)) * alpha; + } + }); + }); + + function weightedSource(link) { + return (link.source.y + link.sy + link.dy / 2) * link.value; + } + } + + function relaxRightToLeft(alpha) { + nodesByBreadth.slice().reverse().forEach(function(nodes) { + nodes.forEach(function(node) { + if (node.sourceLinks.length) { + // Value-weighted average of the y-positions of target nodes linked to this node. + var y = d3.sum(node.sourceLinks, weightedTarget) / d3.sum(node.sourceLinks, value); + node.y += (y - center(node)) * alpha; + } + }); + }); + + function weightedTarget(link) { + return (link.target.y + link.ty + link.dy / 2) * link.value; + } + } + + function resolveCollisions() { + nodesByBreadth.forEach(function(nodes) { + var node, + dy, + y0 = 0, + n = nodes.length, + i; + + // Push any overlapping nodes down. + nodes.sort(ascendingDepth); + for (i = 0; i < n; ++i) { + node = nodes[i]; + dy = y0 - node.y; + if (dy > 0) node.y += dy; + y0 = node.y + node.dy + nodePadding; + } + + // If the bottommost node goes outside the bounds, push it back up. + dy = y0 - nodePadding - size[1]; + if (dy > 0) { + y0 = node.y -= dy; + + // Push any overlapping nodes back up. + for (i = n - 2; i >= 0; --i) { + node = nodes[i]; + dy = node.y + node.dy + nodePadding - y0; + if (dy > 0) node.y -= dy; + y0 = node.y; + } + } + }); + } + + function ascendingDepth(a, b) { + return a.y - b.y; + } + } + + // Compute y-offset of the source endpoint (sy) and target endpoints (ty) of links, + // relative to the source/target node's y-position. + function computeLinkDepths() { + nodes.forEach(function(node) { + node.sourceLinks.sort(ascendingTargetDepth); + node.targetLinks.sort(ascendingSourceDepth); + }); + nodes.forEach(function(node) { + var sy = 0, ty = 0; + node.sourceLinks.forEach(function(link) { + link.sy = sy; + sy += link.dy; + }); + node.targetLinks.forEach(function(link) { + link.ty = ty; + ty += link.dy; + }); + }); + + function ascendingSourceDepth(a, b) { + return a.source.y - b.source.y; + } + + function ascendingTargetDepth(a, b) { + return a.target.y - b.target.y; + } + } + + // Y-position of the middle of a node. + function center(node) { + return node.y + node.dy / 2; + } + + // Value property accessor. + function value(x) { + return x.value; + } + + return sankey; +}; \ No newline at end of file diff --git a/docs/reference/libs/sankeyNetwork-binding-0.4.1/sankeyNetwork.js b/docs/reference/libs/sankeyNetwork-binding-0.4.1/sankeyNetwork.js new file mode 100644 index 0000000..8fded80 --- /dev/null +++ b/docs/reference/libs/sankeyNetwork-binding-0.4.1/sankeyNetwork.js @@ -0,0 +1,250 @@ +HTMLWidgets.widget({ + + name: "sankeyNetwork", + + type: "output", + + initialize: function(el, width, height) { + + d3.select(el).append("svg") + .style("width", "100%") + .style("height", "100%"); + + return { + sankey: d3.sankey(), + x: null + }; + }, + + resize: function(el, width, height, instance) { + /* handle resizing now through the viewBox + d3.select(el).select("svg") + .attr("width", width) + .attr("height", height + height * 0.05); + + this.renderValue(el, instance.x, instance); + */ + + // with flexdashboard and slides + // sankey might be hidden so height and width 0 + // in this instance re-render on resize + if( d3.min(instance.sankey.size()) <= 0 ) { + this.renderValue(el, instance.x, instance); + } + }, + + renderValue: function(el, x, instance) { + + // save the x in our instance (for calling back from resize) + instance.x = x; + + // alias sankey and options + var sankey = instance.sankey; + var options = x.options; + + // convert links and nodes data frames to d3 friendly format + var links = HTMLWidgets.dataframeToD3(x.links); + var nodes = HTMLWidgets.dataframeToD3(x.nodes); + + + // margin handling + // set our default margin to be 20 + // will override with x.options.margin if provided + var margin = {top: 20, right: 20, bottom: 20, left: 20}; + // go through each key of x.options.margin + // use this value if provided from the R side + Object.keys(x.options.margin).map(function(ky){ + if(x.options.margin[ky] !== null) { + margin[ky] = x.options.margin[ky]; + } + // set the margin on the svg with css style + // commenting this out since not correct + // s.style(["margin",ky].join("-"), margin[ky]); + }); + + // get the width and height + var width = el.getBoundingClientRect().width - margin.right - margin.left; + var height = el.getBoundingClientRect().height - margin.top - margin.bottom; + + var color = eval(options.colourScale); + + var color_node = function color_node(d){ + if (d.group){ + return color(d.group.replace(/ .*/, "")); + } else { + return "#cccccc"; + } + } + + var color_link = function color_link(d){ + if (d.group){ + return color(d.group.replace(/ .*/, "")); + } else { + return "#000000"; + } + } + + var opacity_link = function opacity_link(d){ + if (d.group){ + return 0.7; + } else { + return 0.2; + } + } + + + var formatNumber = d3.format(",.0f"), + format = function(d) { + if (typeof d === "string") return d; + return formatNumber(d); + } + + // create d3 sankey layout + sankey + .nodes(nodes) + .links(links) + .size([width, height]) + .nodeWidth(options.nodeWidth) + .nodePadding(options.nodePadding) + .sinksRight(options.sinksRight) + .layout(options.iterations); + + // select the svg element and remove existing children + d3.select(el).select("svg").selectAll("*").remove(); + // remove any previously set viewBox attribute + d3.select(el).select("svg").attr("viewBox", null); + // append g for our container to transform by margin + var svg = d3.select(el).select("svg").append("g") + .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); + + // draw path + var path = sankey.link(); + + // draw links + var link = svg.selectAll(".link") + .data(links) + .enter().append("path") + .attr("class", "link") + .attr("d", path) + .style("stroke-width", function(d) { return Math.max(1, d.dy); }) + .style("fill", "none") + .style("stroke", color_link) + .style("stroke-opacity", opacity_link) + .sort(function(a, b) { return b.dy - a.dy; }) + .on("mouseover", function(d) { + d3.select(this) + .style("stroke-opacity", function(d){return opacity_link(d) + 0.3}); + }) + .on("mouseout", function(d) { + d3.select(this) + .style("stroke-opacity", opacity_link); + }); + + // add backwards class to cycles + link.classed('backwards', function (d) { return d.target.x < d.source.x; }); + + svg.selectAll(".link.backwards") + .style("stroke-dasharray","9,1") + .style("stroke","#402") + + // draw nodes + var node = svg.selectAll(".node") + .data(nodes) + .enter().append("g") + .attr("class", "node") + .attr("transform", function(d) { return "translate(" + + d.x + "," + d.y + ")"; }) + .call(d3.drag() + .subject(function(d) { return d; }) + .on("start", function() { this.parentNode.appendChild(this); }) + .on("drag", dragmove)) + .on("mouseover", function(d) { + link.filter(function(d1, i) { return d.targetLinks.includes(d1) | d.sourceLinks.includes(d1); }) + .style("stroke-opacity", function(d){return opacity_link(d) + 0.3}); + }) + .on("mouseout", function(d) { + link.filter(function(d1, i) { return d.targetLinks.includes(d1) | d.sourceLinks.includes(d1); }) + .style("stroke-opacity", opacity_link); + }); + // note: u2192 is right-arrow + link.append("title") + .append("foreignObject") + .append("xhtml:body") + .html(function(d) { return "
" + d.source.name + " \u2192 " + d.target.name +
+                "\n" + format(d.value) + " " + options.units + "
"; }); + + node.append("rect") + .attr("height", function(d) { return d.dy; }) + .attr("width", sankey.nodeWidth()) + .style("fill", function(d) { + return d.color = color_node(d); }) + .style("stroke", function(d) { return d3.rgb(d.color).darker(2); }) + .style("opacity", 0.9) + .style("cursor", "move") + .append("title") + .append("foreignObject") + .append("xhtml:body") + .html(function(d) { return "
" + d.name + "
" + format(d.value) + + " " + options.units + "
"; }); + + node.append("text") + .attr("x", -6) + .attr("y", function(d) { return d.dy / 2; }) + .attr("dy", ".35em") + .attr("text-anchor", "end") + .attr("transform", null) + .text(function(d) { return d.name; }) + .style("font-size", options.fontSize + "px") + .style("font-family", options.fontFamily ? options.fontFamily : "inherit") + .filter(function(d) { return d.x < width / 2 || !options.sinksRight; }) + .attr("x", 6 + sankey.nodeWidth()) + .attr("text-anchor", "start"); + + + // adjust viewBox to fit the bounds of our tree + var s = d3.select(svg.node().parentNode); + s.attr( + "viewBox", + [ + d3.min( + s.selectAll('g').nodes().map(function(d){ + return d.getBoundingClientRect().left + }) + ) - s.node().getBoundingClientRect().left - margin.right, + d3.min( + s.selectAll('g').nodes().map(function(d){ + return d.getBoundingClientRect().top + }) + ) - s.node().getBoundingClientRect().top - margin.top, + d3.max( + s.selectAll('g').nodes().map(function(d){ + return d.getBoundingClientRect().right + }) + ) - + d3.min( + s.selectAll('g').nodes().map(function(d){ + return d.getBoundingClientRect().left + }) + ) + margin.left + margin.right, + d3.max( + s.selectAll('g').nodes().map(function(d){ + return d.getBoundingClientRect().bottom + }) + ) - + d3.min( + s.selectAll('g').nodes().map(function(d){ + return d.getBoundingClientRect().top + }) + ) + margin.top + margin.bottom + ].join(",") + ); + + + function dragmove(d) { + d3.select(this).attr("transform", "translate(" + d.x + "," + + (d.y = Math.max(0, Math.min(height - d.dy, d3.event.y))) + ")"); + sankey.relayout(); + link.attr("d", path); + } + }, +}); diff --git a/docs/reference/linear_model.html b/docs/reference/linear_model.html index 06f398a..0f21c14 100644 --- a/docs/reference/linear_model.html +++ b/docs/reference/linear_model.html @@ -1,67 +1,12 @@ - - - - - - - -Linear model for trend analysis — linear_model • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Linear model for trend analysis — linear_model • er.helpers - + - - -
-
- - -
-
+
@@ -120,69 +65,73 @@

Linear model for trend analysis

Performs a linear model for

-
linear_model(x, y = NULL, conf_level = 0.95)
- -

Arguments

- - - - - - - - - - - - - - -
x

numeric vector

y

optional time variable, converted to numeric. If its not provided it +

+
linear_model(x, y = NULL, conf_level = 0.95)
+
+ +
+

Arguments

+ + +
x
+

numeric vector

+ + +
y
+

optional time variable, converted to numeric. If its not provided it will be assumed that all values in X are sequential, regularly measured, -and there are no gaps in the measurements.

conf_level

numeric. Level of confidence to be used to calculate the -confidence intervals

+and there are no gaps in the measurements.

-

Value

+
conf_level
+

numeric. Level of confidence to be used to calculate the +confidence intervals

+ +
+
+

Value

a tidy data frame with the model results

+
-

Examples

-
x <- runif(100) * 1:100 -linear_model(x)
#> # A tibble: 1 × 11 -#> p_value slope conf_low conf_high conf_level intercept r_squared sigma method -#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> -#> 1 2.09e-14 0.550 0.430 0.670 0.95 -0.242 0.451 17.7 Linear… -#> # … with 2 more variables: n <int>, note <chr>
# If measurements were for example taken daily -linear_model(x, y = Sys.Date() + (1:100))
#> # A tibble: 1 × 11 -#> p_value slope conf_low conf_high conf_level intercept r_squared sigma method -#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> -#> 1 2.09e-14 0.550 0.430 0.670 0.95 -10472. 0.451 17.7 Linear… -#> # … with 2 more variables: n <int>, note <chr>
+
+

Examples

+
x <- runif(100) * 1:100
+linear_model(x)
+#> # A tibble: 1 × 11
+#>    p_value slope conf_low conf_high conf_level intercept r_squared sigma method 
+#>      <dbl> <dbl>    <dbl>     <dbl>      <dbl>     <dbl>     <dbl> <dbl> <chr>  
+#> 1 1.21e-13 0.496    0.383     0.609       0.95      1.46     0.431  16.6 Linear…
+#> # ℹ 2 more variables: n <int>, note <chr>
+# If measurements were for example taken daily
+linear_model(x, y = Sys.Date() + (1:100))
+#> # A tibble: 1 × 11
+#>    p_value slope conf_low conf_high conf_level intercept r_squared sigma method 
+#>      <dbl> <dbl>    <dbl>     <dbl>      <dbl>     <dbl>     <dbl> <dbl> <chr>  
+#> 1 1.21e-13 0.496    0.383     0.609       0.95   -10206.     0.431  16.6 Linear…
+#> # ℹ 2 more variables: n <int>, note <chr>
+
+
+
-
- +
+ + - - - + diff --git a/docs/reference/mann_kendall.html b/docs/reference/mann_kendall.html index 154060d..1fab900 100644 --- a/docs/reference/mann_kendall.html +++ b/docs/reference/mann_kendall.html @@ -1,69 +1,14 @@ - - - - - - - -Mann-Kendall Trend Test — mann_kendall • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Mann-Kendall Trend Test — mann_kendall • er.helpers - - - - - - - - - - + - - -
-
- - -
-
+

Performs the Mann-Kendall trend test. This function is a wrapper around -mk.test. See documentation there for more details about +mk.test. See documentation there for more details about the calculation

-
mann_kendall(
-  x,
-  alternative = c("greater", "two.sided", "less"),
-  continuity = TRUE
-)
- -

Arguments

- - - - - - - - - - - - - - -
x

a vector of class "numeric" or a time series object of class "ts"

alternative

the alternative hypothesis, defaults to two.sided

continuity

logical, indicates whether a continuity correction -should be applied, defaults to TRUE.

- -

Value

+
+
mann_kendall(
+  x,
+  alternative = c("greater", "two.sided", "less"),
+  continuity = TRUE
+)
+
+ +
+

Arguments

+ +
x
+

a vector of class "numeric" or a time series object of class "ts"

+ + +
alternative
+

the alternative hypothesis, defaults to two.sided

+ + +
continuity
+

logical, indicates whether a continuity correction +should be applied, defaults to TRUE.

+ +
+
+

Value

a tidy data frame with the test results

+
-

Examples

-
x <- runif(100) * 1:100 -mann_kendall(x, alternative = "two.sided")
#> # A tibble: 1 × 9 -#> p_value s var_s tau z method n alternative note -#> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <int> <chr> <chr> -#> 1 2.76e-14 2556 112750 0.516 7.61 Mann-Kendall 100 two.sided NA
+
+

Examples

+
x <- runif(100) * 1:100
+mann_kendall(x, alternative = "two.sided")
+#> # A tibble: 1 × 9
+#>    p_value     s  var_s   tau     z method           n alternative note 
+#>      <dbl> <dbl>  <dbl> <dbl> <dbl> <chr>        <int> <chr>       <chr>
+#> 1 1.14e-14  2594 112750 0.524  7.72 Mann-Kendall   100 two.sided   NA   
+
+
+
-
- +
+ + - - - + diff --git a/docs/reference/metadata_to_table.html b/docs/reference/metadata_to_table.html new file mode 100644 index 0000000..97dada3 --- /dev/null +++ b/docs/reference/metadata_to_table.html @@ -0,0 +1,112 @@ + +Metadata to table — metadata_to_table • er.helpers + + +
+
+ + + +
+
+ + +
+

Metadata to table

+
+ +
+
metadata_to_table(df, remove_names = c("row.names"))
+
+ +
+

Arguments

+ + +
df
+

- df object with attributes

+ + +
remove_names
+

- Remove names e.g. row.names or groups

+ +
+
+

Value

+

tibble with name and values of attributes extracted from df

+
+ +
+ +
+ + +
+ +
+

Site built with pkgdown 2.2.0.

+
+ +
+ + + + + + + + diff --git a/docs/reference/mfe_datalake_bucket.html b/docs/reference/mfe_datalake_bucket.html index 4da5ef7..c9f896a 100644 --- a/docs/reference/mfe_datalake_bucket.html +++ b/docs/reference/mfe_datalake_bucket.html @@ -1,67 +1,12 @@ - - - - - - - -MfE Default bucket — mfe_datalake_bucket • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -MfE Default bucket — mfe_datalake_bucket • er.helpers - + - - -
-
- - -
-
+
@@ -120,38 +65,36 @@

MfE Default bucket

MfE Default bucket

-
mfe_datalake_bucket
- - -

Format

+
+
mfe_datalake_bucket
+
+
+

Format

An object of class character of length 1.

+
+
-
- +
+ + - - - + diff --git a/docs/reference/nz.html b/docs/reference/nz.html index 1a678a8..7ca401c 100644 --- a/docs/reference/nz.html +++ b/docs/reference/nz.html @@ -1,67 +1,12 @@ - - - - - - - -New Zealand coastline. — nz • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -New Zealand coastline. — nz • er.helpers - + - - -
-
- - -
-
+
@@ -120,38 +65,36 @@

New Zealand coastline.

Simplified New Zealand coastline boundary, excluding the Chatham Islands.

-
nz
- - -

Format

+
+
nz
+
+
+

Format

An sf object.

+
+
-
- +
+ + - - - + diff --git a/docs/reference/nz_grid_hex_346.html b/docs/reference/nz_grid_hex_346.html index beb0efe..9e25e11 100644 --- a/docs/reference/nz_grid_hex_346.html +++ b/docs/reference/nz_grid_hex_346.html @@ -1,68 +1,13 @@ - - - - - - - -Hexagonal grid sf object with hexagons of 346km2. — nz_grid_hex_346 • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Hexagonal grid sf object with hexagons of 346km2. — nz_grid_hex_346 • er.helpers - - + - -
-
- - -
-
+
@@ -122,41 +67,39 @@

Hexagonal grid sf object with hexagons of 346km2.

Hexagonal grid sf object with hexagons of 346km2.

-
nz_grid_hex_346
-
-nz_grid_hex_346
- - -

Format

+
+
nz_grid_hex_346
+
+nz_grid_hex_346
+
+
+

Format

An sf object.

An sf object.

+
+
-
- +
+ + - - - + diff --git a/docs/reference/nz_region.html b/docs/reference/nz_region.html index 6555db5..841036b 100644 --- a/docs/reference/nz_region.html +++ b/docs/reference/nz_region.html @@ -1,67 +1,12 @@ - - - - - - - -New Zealand coastline intersected with regional bourndaries. — nz_region • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -New Zealand coastline intersected with regional bourndaries. — nz_region • er.helpers - + - - -
-
- - -
-
+
@@ -120,43 +65,42 @@

New Zealand coastline intersected with regional bourndaries.

An sf object of New Zealand coastline intersected with regional bourndaries.

-
nz_region
- +
+
nz_region
+
-

Format

+
+

Format

+

An sf object with 3 columns and 16 rows:

region_code
+

The code for each region

-

An sf object with 3 columns and 16 rows:

-
region_code

The code for each region

-
region

The name of each region

+
region
+

The name of each region

-
+
+
-
- +
+ + - - - + diff --git a/docs/reference/order_likelihood_levels.html b/docs/reference/order_likelihood_levels.html index 7649897..66669ac 100644 --- a/docs/reference/order_likelihood_levels.html +++ b/docs/reference/order_likelihood_levels.html @@ -1,67 +1,12 @@ - - - - - - - -Orders the levels of a likelihood category factor — order_likelihood_levels • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Orders the levels of a likelihood category factor — order_likelihood_levels • er.helpers - - + - -
-
- - -
-
+
@@ -120,69 +65,71 @@

Orders the levels of a likelihood category factor

Orders the levels of a likelihood category factor

-
order_likelihood_levels(x)
+
+
order_likelihood_levels(x)
+
+ +
+

Arguments

-

Arguments

- - - - - - -
x

the unordered factor. Levels must be one of those found in -er.helpers:::likelihood_terms

-

Value

+
x
+

the unordered factor. Levels must be one of those found in +er.helpers:::likelihood_terms

+
+
+

Value

a factor with ordered levels

-

See also

- -

Other likelihood functions: -get_likelihood_category(), -simplify_likelihood_levels()

- -

Examples

-
if (FALSE) { -library(ggplot2) -library(tibble) -trends <- tribble( - ~ trend, ~n, - "Indeterminate", 2, - "Very likely worsening", 3, - "Likely improving", 2) -# unordered plot -qplot(trend, n, fill = trend, data = trends, geom = "col") - -ordered_trends <- dplyr::mutate(trends, - trend = order_likelihood_levels(trend)) -# nice ordered plot -qplot(trend, n, fill = trend, data = ordered_trends, geom = "col") -}
+
+
+

See also

+ +
+ +
+

Examples

+
if (FALSE) { # \dontrun{
+library(ggplot2)
+library(tibble)
+trends <- tribble(
+  ~ trend, ~n,
+  "Indeterminate", 2,
+  "Very likely worsening", 3,
+  "Likely improving", 2)
+# unordered plot
+qplot(trend, n, fill = trend, data = trends, geom = "col")
+
+ordered_trends <- dplyr::mutate(trends,
+                                trend = order_likelihood_levels(trend))
+# nice ordered plot
+qplot(trend, n, fill = trend,  data = ordered_trends, geom = "col")
+} # }
+
+
+
-
- +
+ + - - - + diff --git a/docs/reference/order_season_levels-1.png b/docs/reference/order_season_levels-1.png index 0786fe6..0f328e0 100644 Binary files a/docs/reference/order_season_levels-1.png and b/docs/reference/order_season_levels-1.png differ diff --git a/docs/reference/order_season_levels-2.png b/docs/reference/order_season_levels-2.png index 1ac8a27..08cd0ee 100644 Binary files a/docs/reference/order_season_levels-2.png and b/docs/reference/order_season_levels-2.png differ diff --git a/docs/reference/order_season_levels.html b/docs/reference/order_season_levels.html index 528c648..aee4edb 100644 --- a/docs/reference/order_season_levels.html +++ b/docs/reference/order_season_levels.html @@ -1,69 +1,14 @@ - - - - - - - -Order season levels — order_season_levels • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Order season levels — order_season_levels • er.helpers - + - - -
-
- - -
-
+
@@ -124,62 +69,72 @@

Order season levels

converted to sentence case

-
order_season_levels(x)
+
+
order_season_levels(x)
+
+ +
+

Arguments

-

Arguments

- - - - - - -
x

character vector. If a factor will be coerced to character first

-

Value

+
x
+

character vector. If a factor will be coerced to character first

+
+
+

Value

a factor with ordered levels for season

+
-

Examples

-
library(ggplot2) -library(tibble) -seasons <- tribble( - ~ season, ~n, - "autum", 1, - "summer", 2, - "winter", 3, - "spring", 1, - "annual", 2) -# unordered ugly plot -qplot(season, n, fill = season, data = seasons, geom = "col")
-ordered_seasons <- dplyr::mutate(seasons, - season = order_season_levels(season))
#> Warning: Autum not recognised as valid season name(s)
# nice ordered plot -qplot(season, n, fill = season, data = ordered_seasons, geom = "col")
-
+
+

Examples

+
library(ggplot2)
+library(tibble)
+seasons <- tribble(
+  ~ season, ~n,
+  "autum", 1,
+  "summer", 2,
+  "winter", 3,
+  "spring", 1,
+  "annual", 2)
+# unordered ugly plot
+qplot(season, n, fill = season, data = seasons, geom = "col")
+#> Warning: `qplot()` was deprecated in ggplot2 3.4.0.
+
+
+ordered_seasons <- dplyr::mutate(seasons,
+                                season = order_season_levels(season))
+#> Warning: There was 1 warning in `dplyr::mutate()`.
+#>  In argument: `season = order_season_levels(season)`.
+#> Caused by warning in `order_season_levels()`:
+#> ! Autum not recognised as valid season name(s)
+# nice ordered plot
+qplot(season, n, fill = season, data = ordered_seasons, geom = "col")
+
+
+
+
+
-
- +
+ + - - - + diff --git a/docs/reference/pal_ea19-1.png b/docs/reference/pal_ea19-1.png index 6daebf4..bf75ba4 100644 Binary files a/docs/reference/pal_ea19-1.png and b/docs/reference/pal_ea19-1.png differ diff --git a/docs/reference/pal_ea19.html b/docs/reference/pal_ea19.html index e361f66..2cd3d0a 100644 --- a/docs/reference/pal_ea19.html +++ b/docs/reference/pal_ea19.html @@ -1,67 +1,12 @@ - - - - - - - -Colour palette for a graph with a nominal categorical variable. — pal_ea19 • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Colour palette for a graph with a nominal categorical variable. — pal_ea19 • er.helpers + - - - -
-
- - -
-
+
@@ -120,43 +65,46 @@

Colour palette for a graph with a nominal categorical variable.

Colour palette for a graph with a nominal categorical variable.

-
pal_ea19
- - -

Format

+
+
pal_ea19
+
+
+

Format

An object of class character of length 9.

-

Value

- +
+
+

Value

A vector of hex codes.

+
-

Examples

-
scales::show_col(pal_ea19)
+
+

Examples

+
scales::show_col(pal_ea19)
+
+
+
+
-
- +
+ + - - - + diff --git a/docs/reference/pal_ea19_alpha2-1.png b/docs/reference/pal_ea19_alpha2-1.png index 053e2ff..6176c11 100644 Binary files a/docs/reference/pal_ea19_alpha2-1.png and b/docs/reference/pal_ea19_alpha2-1.png differ diff --git a/docs/reference/pal_ea19_alpha2.html b/docs/reference/pal_ea19_alpha2.html index 92436a1..93d81b4 100644 --- a/docs/reference/pal_ea19_alpha2.html +++ b/docs/reference/pal_ea19_alpha2.html @@ -1,67 +1,12 @@ - - - - - - - -Colour palette for a graph that compares a current year to 1 past year. — pal_ea19_alpha2 • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Colour palette for a graph that compares a current year to 1 past year. — pal_ea19_alpha2 • er.helpers + - - - -
-
- - -
-
+
@@ -120,43 +65,46 @@

Colour palette for a graph that compares a current year to 1 past year.

Colour palette for a graph that compares a current year to 1 past year.

-
pal_ea19_alpha2
- - -

Format

+
+
pal_ea19_alpha2
+
+
+

Format

An object of class character of length 2.

-

Value

- +
+
+

Value

A vector of hex codes. Uses the first colour and a 40

+
-

Examples

-
scales::show_col(pal_ea19_alpha2)
+
+

Examples

+
scales::show_col(pal_ea19_alpha2)
+
+
+
+
-
- +
+ + - - - + diff --git a/docs/reference/pal_ea19_nztcs_c-1.png b/docs/reference/pal_ea19_nztcs_c-1.png index be4049d..6dd8813 100644 Binary files a/docs/reference/pal_ea19_nztcs_c-1.png and b/docs/reference/pal_ea19_nztcs_c-1.png differ diff --git a/docs/reference/pal_ea19_nztcs_c.html b/docs/reference/pal_ea19_nztcs_c.html index c36bd8c..2b062dd 100644 --- a/docs/reference/pal_ea19_nztcs_c.html +++ b/docs/reference/pal_ea19_nztcs_c.html @@ -1,67 +1,12 @@ - - - - - - - -Colour palette for a NZTCS category graph. — pal_ea19_nztcs_c • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Colour palette for a NZTCS category graph. — pal_ea19_nztcs_c • er.helpers + - - - -
-
- - -
-
+
@@ -120,43 +65,46 @@

Colour palette for a NZTCS category graph.

A colour palette used for depicting categories in the NZ conservation threat status.

-
pal_ea19_nztcs_c
- - -

Format

+
+
pal_ea19_nztcs_c
+
+
+

Format

An object of class character of length 4.

-

Value

- +
+
+

Value

A vector of hex codes.

+
-

Examples

-
scales::show_col(pal_ea19_nztcs_c)
+
+

Examples

+
scales::show_col(pal_ea19_nztcs_c)
+
+
+
+
-
- +
+ + - - - + diff --git a/docs/reference/pal_ea19_trend2-1.png b/docs/reference/pal_ea19_trend2-1.png index 2417af8..a062d53 100644 Binary files a/docs/reference/pal_ea19_trend2-1.png and b/docs/reference/pal_ea19_trend2-1.png differ diff --git a/docs/reference/pal_ea19_trend2.html b/docs/reference/pal_ea19_trend2.html index 04f6034..d15f891 100644 --- a/docs/reference/pal_ea19_trend2.html +++ b/docs/reference/pal_ea19_trend2.html @@ -1,67 +1,12 @@ - - - - - - - -Colour palette for a graph of a ordinal categorical trend variable with 2 values. — pal_ea19_trend2 • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Colour palette for a graph of a ordinal categorical trend variable with 2 values. — pal_ea19_trend2 • er.helpers + - - - -
-
- - -
-
+
@@ -120,43 +65,46 @@

Colour palette for a graph of a ordinal categorical trend variable with 2 va

Colour palette for a graph of a ordinal categorical trend variable with 2 values.

-
pal_ea19_trend2
- - -

Format

+
+
pal_ea19_trend2
+
+
+

Format

An object of class character of length 2.

-

Value

- +
+
+

Value

A vector of hex codes.

+
-

Examples

-
scales::show_col(pal_ea19_trend2)
+
+

Examples

+
scales::show_col(pal_ea19_trend2)
+
+
+
+
-
- +
+ + - - - + diff --git a/docs/reference/pal_ea19_trend3-1.png b/docs/reference/pal_ea19_trend3-1.png index 58b1cf1..d6be8fa 100644 Binary files a/docs/reference/pal_ea19_trend3-1.png and b/docs/reference/pal_ea19_trend3-1.png differ diff --git a/docs/reference/pal_ea19_trend3.html b/docs/reference/pal_ea19_trend3.html index 8387260..7f7c4e1 100644 --- a/docs/reference/pal_ea19_trend3.html +++ b/docs/reference/pal_ea19_trend3.html @@ -1,67 +1,12 @@ - - - - - - - -Colour palette for a graph of a ordinal categorical trend variable with 3 values. — pal_ea19_trend3 • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Colour palette for a graph of a ordinal categorical trend variable with 3 values. — pal_ea19_trend3 • er.helpers + - - - -
-
- - -
-
+
@@ -120,43 +65,46 @@

Colour palette for a graph of a ordinal categorical trend variable with 3 va

Colour palette for a graph of a ordinal categorical trend variable with 3 values.

-
pal_ea19_trend3
- - -

Format

+
+
pal_ea19_trend3
+
+
+

Format

An object of class character of length 3.

-

Value

- +
+
+

Value

A vector of hex codes.

+
-

Examples

-
scales::show_col(pal_ea19_trend3)
+
+

Examples

+
scales::show_col(pal_ea19_trend3)
+
+
+
+
-
- +
+ + - - - + diff --git a/docs/reference/pal_ea19_trend5-1.png b/docs/reference/pal_ea19_trend5-1.png index c83d600..e6e2e2d 100644 Binary files a/docs/reference/pal_ea19_trend5-1.png and b/docs/reference/pal_ea19_trend5-1.png differ diff --git a/docs/reference/pal_ea19_trend5.html b/docs/reference/pal_ea19_trend5.html index 2099824..a73db1a 100644 --- a/docs/reference/pal_ea19_trend5.html +++ b/docs/reference/pal_ea19_trend5.html @@ -1,67 +1,12 @@ - - - - - - - -Colour palette for a graph of a ordinal categorical trend variable with 5 values. — pal_ea19_trend5 • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Colour palette for a graph of a ordinal categorical trend variable with 5 values. — pal_ea19_trend5 • er.helpers + - - - -
-
- - -
-
+
@@ -120,43 +65,46 @@

Colour palette for a graph of a ordinal categorical trend variable with 5 va

Colour palette for a graph of a ordinal categorical trend variable with 5 values.

-
pal_ea19_trend5
- - -

Format

+
+
pal_ea19_trend5
+
+
+

Format

An object of class character of length 5.

-

Value

- +
+
+

Value

A vector of hex codes.

+
-

Examples

-
scales::show_col(pal_ea19_trend5)
+
+

Examples

+
scales::show_col(pal_ea19_trend5)
+
+
+
+
-
- +
+ + - - - + diff --git a/docs/reference/pal_point_set1-1.png b/docs/reference/pal_point_set1-1.png index 3dc00c7..668092b 100644 Binary files a/docs/reference/pal_point_set1-1.png and b/docs/reference/pal_point_set1-1.png differ diff --git a/docs/reference/pal_point_set1.html b/docs/reference/pal_point_set1.html index 477d6b8..2153df7 100644 --- a/docs/reference/pal_point_set1.html +++ b/docs/reference/pal_point_set1.html @@ -1,67 +1,12 @@ - - - - - - - -Colour palette for categorical variables for points on a map etc. — pal_point_set1 • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Colour palette for categorical variables for points on a map etc. — pal_point_set1 • er.helpers + - - - -
-
- - -
-
+
@@ -120,43 +65,46 @@

Colour palette for categorical variables for points on a map etc.

Colour palette for categorical variables.

-
pal_point_set1
- - -

Format

+
+
pal_point_set1
+
+
+

Format

An object of class character of length 9.

-

Value

- +
+
+

Value

A vector of hex codes.

+
-

Examples

-
scales::show_col(pal_point_set1)
+
+

Examples

+
scales::show_col(pal_point_set1)
+
+
+
+
-
- +
+ + - - - + diff --git a/docs/reference/pal_point_trend2-1.png b/docs/reference/pal_point_trend2-1.png index 58bc0c6..c9bbd02 100644 Binary files a/docs/reference/pal_point_trend2-1.png and b/docs/reference/pal_point_trend2-1.png differ diff --git a/docs/reference/pal_point_trend2.html b/docs/reference/pal_point_trend2.html index 7525807..b3b77bd 100644 --- a/docs/reference/pal_point_trend2.html +++ b/docs/reference/pal_point_trend2.html @@ -1,67 +1,12 @@ - - - - - - - -Colour palette for a map of a ordinal categorical trend variable with 2 values. — pal_point_trend2 • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Colour palette for a map of a ordinal categorical trend variable with 2 values. — pal_point_trend2 • er.helpers + - - - -
-
- - -
-
+
@@ -120,43 +65,46 @@

Colour palette for a map of a ordinal categorical trend variable with 2 valu

Colour palette for a map of a ordinal categorical trend variable with 2 values.

-
pal_point_trend2
- - -

Format

+
+
pal_point_trend2
+
+
+

Format

An object of class character of length 2.

-

Value

- +
+
+

Value

A vector of hex codes.

+
-

Examples

-
scales::show_col(pal_point_trend2)
+
+

Examples

+
scales::show_col(pal_point_trend2)
+
+
+
+
-
- +
+ + - - - + diff --git a/docs/reference/pal_point_trend3-1.png b/docs/reference/pal_point_trend3-1.png index c870028..4fbf443 100644 Binary files a/docs/reference/pal_point_trend3-1.png and b/docs/reference/pal_point_trend3-1.png differ diff --git a/docs/reference/pal_point_trend3.html b/docs/reference/pal_point_trend3.html index 8f50de3..b384365 100644 --- a/docs/reference/pal_point_trend3.html +++ b/docs/reference/pal_point_trend3.html @@ -1,67 +1,12 @@ - - - - - - - -Colour palette for a map of a ordinal categorical trend variable with 3 values. — pal_point_trend3 • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Colour palette for a map of a ordinal categorical trend variable with 3 values. — pal_point_trend3 • er.helpers + - - - -
-
- - -
-
+
@@ -120,43 +65,46 @@

Colour palette for a map of a ordinal categorical trend variable with 3 valu

Colour palette for a map of a ordinal categorical trend variable with 3 values.

-
pal_point_trend3
- - -

Format

+
+
pal_point_trend3
+
+
+

Format

An object of class character of length 3.

-

Value

- +
+
+

Value

A vector of hex codes.

+
-

Examples

-
scales::show_col(pal_point_trend3)
+
+

Examples

+
scales::show_col(pal_point_trend3)
+
+
+
+
-
- +
+ + - - - + diff --git a/docs/reference/pal_point_trend5-1.png b/docs/reference/pal_point_trend5-1.png index f0d91e3..329a583 100644 Binary files a/docs/reference/pal_point_trend5-1.png and b/docs/reference/pal_point_trend5-1.png differ diff --git a/docs/reference/pal_point_trend5.html b/docs/reference/pal_point_trend5.html index 0c9b4fd..3eca8e6 100644 --- a/docs/reference/pal_point_trend5.html +++ b/docs/reference/pal_point_trend5.html @@ -1,67 +1,12 @@ - - - - - - - -Colour palette for a map of a ordinal categorical trend variable with 5 values. — pal_point_trend5 • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Colour palette for a map of a ordinal categorical trend variable with 5 values. — pal_point_trend5 • er.helpers + - - - -
-
- - -
-
+
@@ -120,43 +65,46 @@

Colour palette for a map of a ordinal categorical trend variable with 5 valu

Colour palette for a map of a ordinal categorical trend variable with 5 values.

-
pal_point_trend5
- - -

Format

+
+
pal_point_trend5
+
+
+

Format

An object of class character of length 5.

-

Value

- +
+
+

Value

A vector of hex codes.

+
-

Examples

-
scales::show_col(pal_point_trend5)
+
+

Examples

+
scales::show_col(pal_point_trend5)
+
+
+
+
-
- +
+ + - - - + diff --git a/docs/reference/pal_snz-1.png b/docs/reference/pal_snz-1.png index b29a863..2d7bf5f 100644 Binary files a/docs/reference/pal_snz-1.png and b/docs/reference/pal_snz-1.png differ diff --git a/docs/reference/pal_snz.html b/docs/reference/pal_snz.html index 1706452..65f9e12 100644 --- a/docs/reference/pal_snz.html +++ b/docs/reference/pal_snz.html @@ -1,67 +1,12 @@ - - - - - - - -Colour palette for a graph with a nominal categorical variable. — pal_snz • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Colour palette for a graph with a nominal categorical variable. — pal_snz • er.helpers + - - - -
-
- - -
-
+
@@ -120,43 +65,46 @@

Colour palette for a graph with a nominal categorical variable.

Colour palette for a graph with a nominal categorical variable.

-
pal_snz
- - -

Format

+
+
pal_snz
+
+
+

Format

An object of class character of length 9.

-

Value

- +
+
+

Value

A vector of hex codes.

+
-

Examples

-
scales::show_col(pal_snz)
+
+

Examples

+
scales::show_col(pal_snz)
+
+
+
+
-
- +
+ + - - - + diff --git a/docs/reference/pal_snz_alpha2-1.png b/docs/reference/pal_snz_alpha2-1.png index ac58b55..58c71d7 100644 Binary files a/docs/reference/pal_snz_alpha2-1.png and b/docs/reference/pal_snz_alpha2-1.png differ diff --git a/docs/reference/pal_snz_alpha2.html b/docs/reference/pal_snz_alpha2.html index bd7909c..a9c94fe 100644 --- a/docs/reference/pal_snz_alpha2.html +++ b/docs/reference/pal_snz_alpha2.html @@ -1,67 +1,12 @@ - - - - - - - -Colour palette for a graph that compares a current year to 1 past year. — pal_snz_alpha2 • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Colour palette for a graph that compares a current year to 1 past year. — pal_snz_alpha2 • er.helpers + - - - -
-
- - -
-
+
@@ -120,43 +65,46 @@

Colour palette for a graph that compares a current year to 1 past year.

Colour palette for a graph that compares a current year to 1 past year.

-
pal_snz_alpha2
- - -

Format

+
+
pal_snz_alpha2
+
+
+

Format

An object of class character of length 2.

-

Value

- +
+
+

Value

A vector of hex codes. Uses the first colour and a 30

+
-

Examples

-
scales::show_col(pal_snz_alpha2)
+
+

Examples

+
scales::show_col(pal_snz_alpha2)
+
+
+
+
-
- +
+ + - - - + diff --git a/docs/reference/pal_snz_nztcs_c-1.png b/docs/reference/pal_snz_nztcs_c-1.png index de2a0d8..a878eeb 100644 Binary files a/docs/reference/pal_snz_nztcs_c-1.png and b/docs/reference/pal_snz_nztcs_c-1.png differ diff --git a/docs/reference/pal_snz_nztcs_c.html b/docs/reference/pal_snz_nztcs_c.html index d79db7f..dca397a 100644 --- a/docs/reference/pal_snz_nztcs_c.html +++ b/docs/reference/pal_snz_nztcs_c.html @@ -1,67 +1,12 @@ - - - - - - - -Colour palette for a NZTCS category graph. — pal_snz_nztcs_c • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Colour palette for a NZTCS category graph. — pal_snz_nztcs_c • er.helpers + - - - -
-
- - -
-
+
@@ -120,43 +65,46 @@

Colour palette for a NZTCS category graph.

Colour palette for a NZTCS category graph.

-
pal_snz_nztcs_c
- - -

Format

+
+
pal_snz_nztcs_c
+
+
+

Format

An object of class character of length 4.

-

Value

- +
+
+

Value

A vector of hex codes.

+
-

Examples

-
scales::show_col(pal_snz_nztcs_c)
+
+

Examples

+
scales::show_col(pal_snz_nztcs_c)
+
+
+
+
-
- +
+ + - - - + diff --git a/docs/reference/pal_snz_nztcs_s-1.png b/docs/reference/pal_snz_nztcs_s-1.png index 48733dc..cb42586 100644 Binary files a/docs/reference/pal_snz_nztcs_s-1.png and b/docs/reference/pal_snz_nztcs_s-1.png differ diff --git a/docs/reference/pal_snz_nztcs_s.html b/docs/reference/pal_snz_nztcs_s.html index 0ac68fc..8f43122 100644 --- a/docs/reference/pal_snz_nztcs_s.html +++ b/docs/reference/pal_snz_nztcs_s.html @@ -1,67 +1,12 @@ - - - - - - - -Colour palette for a NZTCS subcategory graph. — pal_snz_nztcs_s • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Colour palette for a NZTCS subcategory graph. — pal_snz_nztcs_s • er.helpers + - - - -
-
- - -
-
+
@@ -120,43 +65,46 @@

Colour palette for a NZTCS subcategory graph.

A colour palette used for depicting subcategories in the NZ conservation threat status.

-
pal_snz_nztcs_s
- - -

Format

+
+
pal_snz_nztcs_s
+
+
+

Format

An object of class character of length 9.

-

Value

- +
+
+

Value

A vector of hex codes.

+
-

Examples

-
scales::show_col(pal_snz_nztcs_s)
+
+

Examples

+
scales::show_col(pal_snz_nztcs_s)
+
+
+
+
-
- +
+ + - - - + diff --git a/docs/reference/pal_snz_trend2-1.png b/docs/reference/pal_snz_trend2-1.png index 752b8b8..840ad35 100644 Binary files a/docs/reference/pal_snz_trend2-1.png and b/docs/reference/pal_snz_trend2-1.png differ diff --git a/docs/reference/pal_snz_trend2.html b/docs/reference/pal_snz_trend2.html index 64d18cd..562c9bd 100644 --- a/docs/reference/pal_snz_trend2.html +++ b/docs/reference/pal_snz_trend2.html @@ -1,67 +1,12 @@ - - - - - - - -Colour palette for a graph of a ordinal categorical trend variable with 2 values. — pal_snz_trend2 • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Colour palette for a graph of a ordinal categorical trend variable with 2 values. — pal_snz_trend2 • er.helpers + - - - -
-
- - -
-
+
@@ -120,43 +65,46 @@

Colour palette for a graph of a ordinal categorical trend variable with 2 va

Colour palette for a graph of a ordinal categorical trend variable with 2 values.

-
pal_snz_trend2
- - -

Format

+
+
pal_snz_trend2
+
+
+

Format

An object of class character of length 2.

-

Value

- +
+
+

Value

A vector of hex codes.

+
-

Examples

-
scales::show_col(pal_snz_trend2)
+
+

Examples

+
scales::show_col(pal_snz_trend2)
+
+
+
+
-
- +
+ + - - - + diff --git a/docs/reference/pal_snz_trend3-1.png b/docs/reference/pal_snz_trend3-1.png index 3b76c5c..57fe035 100644 Binary files a/docs/reference/pal_snz_trend3-1.png and b/docs/reference/pal_snz_trend3-1.png differ diff --git a/docs/reference/pal_snz_trend3.html b/docs/reference/pal_snz_trend3.html index 95ea30e..a792d38 100644 --- a/docs/reference/pal_snz_trend3.html +++ b/docs/reference/pal_snz_trend3.html @@ -1,67 +1,12 @@ - - - - - - - -Colour palette for a graph of a ordinal categorical trend variable with 3 values. — pal_snz_trend3 • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Colour palette for a graph of a ordinal categorical trend variable with 3 values. — pal_snz_trend3 • er.helpers + - - - -
-
- - -
-
+
@@ -120,43 +65,46 @@

Colour palette for a graph of a ordinal categorical trend variable with 3 va

Colour palette for a graph of a ordinal categorical trend variable with 3 values.

-
pal_snz_trend3
- - -

Format

+
+
pal_snz_trend3
+
+
+

Format

An object of class character of length 3.

-

Value

- +
+
+

Value

A vector of hex codes.

+
-

Examples

-
scales::show_col(pal_snz_trend3)
+
+

Examples

+
scales::show_col(pal_snz_trend3)
+
+
+
+
-
- +
+ + - - - + diff --git a/docs/reference/pal_snz_trend5-1.png b/docs/reference/pal_snz_trend5-1.png index ff1dc48..012a36e 100644 Binary files a/docs/reference/pal_snz_trend5-1.png and b/docs/reference/pal_snz_trend5-1.png differ diff --git a/docs/reference/pal_snz_trend5.html b/docs/reference/pal_snz_trend5.html index 65aab0c..cf2c9e9 100644 --- a/docs/reference/pal_snz_trend5.html +++ b/docs/reference/pal_snz_trend5.html @@ -1,67 +1,12 @@ - - - - - - - -Colour palette for a graph of a ordinal categorical trend variable with 5 values. — pal_snz_trend5 • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Colour palette for a graph of a ordinal categorical trend variable with 5 values. — pal_snz_trend5 • er.helpers + - - - -
-
- - -
-
+
@@ -120,43 +65,46 @@

Colour palette for a graph of a ordinal categorical trend variable with 5 va

Colour palette for a graph of a ordinal categorical trend variable with 5 values.

-
pal_snz_trend5
- - -

Format

+
+
pal_snz_trend5
+
+
+

Format

An object of class character of length 5.

-

Value

- +
+
+

Value

A vector of hex codes.

+
-

Examples

-
scales::show_col(pal_snz_trend5)
+
+

Examples

+
scales::show_col(pal_snz_trend5)
+
+
+
+
-
- +
+ + - - - + diff --git a/docs/reference/pipe.html b/docs/reference/pipe.html index 91db7d9..c121d27 100644 --- a/docs/reference/pipe.html +++ b/docs/reference/pipe.html @@ -1,67 +1,12 @@ - - - - - - - -Pipe operator — %>% • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Pipe operator — %>% • er.helpers - + - - -
-
- - -
-
+
@@ -120,35 +65,32 @@

Pipe operator

See magrittr::%>% for details.

-
lhs %>% rhs
- +
+
lhs %>% rhs
+
+
-
- +
+ + - - - + diff --git a/docs/reference/precipitation_above_reference.html b/docs/reference/precipitation_above_reference.html index 5077d0e..10eb2c0 100644 --- a/docs/reference/precipitation_above_reference.html +++ b/docs/reference/precipitation_above_reference.html @@ -1,72 +1,17 @@ - - - - - - - -Get proportion of rainfall above reference — precipitation_above_reference • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Get proportion of rainfall above reference — precipitation_above_reference • er.helpers - - - - - - - - - - - + - -
-
- - -
-
+
@@ -130,93 +75,96 @@

Get proportion of rainfall above reference

intense rainfall events for total annual rainfall.

-
precipitation_above_reference(
-  precipitation,
-  reference_precipitation,
-  wet_day_threshold = 1
-)
- -

Arguments

- - - - - - - - - - - - - - -
precipitation

vector with rainfall values

reference_precipitation

reference value of precipitation

wet_day_threshold

Numeric. Amount of precipitation at which the day is -considered a wet day. Defaults to 1.

- -

Value

+
+
precipitation_above_reference(
+  precipitation,
+  reference_precipitation,
+  wet_day_threshold = 1
+)
+
+ +
+

Arguments

+ + +
precipitation
+

vector with rainfall values

+ +
reference_precipitation
+

reference value of precipitation

+ + +
wet_day_threshold
+

Numeric. Amount of precipitation at which the day is +considered a wet day. Defaults to 1.

+ +
+
+

Value

a value between 0 and 1

-

See also

- -

Other rainfall functions: -get_reference_precipitation()

- -

Examples

-
library(dplyr) -# Simulate one measurement of rain per day for 10 years -rainfall <- rlnorm(10*365) -years <- rep(2001:2010, each = 365) -rain_data <- tibble(rainfall = rainfall, year = years) -# We chose a climate normal -climate_normal <- c(2001, 2005) - -rain_data %>% -# calculate reference rainfall - mutate(ref = get_reference_precipitation(rainfall, - year, - climate_normal, - percentile = 95L)) %>% -# calculate prorportion of rainfall above reference - group_by(year) %>% - summarise(prop_above = precipitation_above_reference(rainfall, ref))
#> # A tibble: 10 × 2 -#> year prop_above -#> <int> <dbl> -#> 1 2001 0.253 -#> 2 2002 0.196 -#> 3 2003 0.187 -#> 4 2004 0.156 -#> 5 2005 0.157 -#> 6 2006 0.171 -#> 7 2007 0.333 -#> 8 2008 0.183 -#> 9 2009 0.246 -#> 10 2010 0.0986
+
+
+

See also

+

Other rainfall functions: +get_reference_precipitation()

+
+ +
+

Examples

+
library(dplyr)
+# Simulate one measurement of rain per day for 10 years
+rainfall <- rlnorm(10*365)
+years <- rep(2001:2010, each = 365)
+rain_data <- tibble(rainfall = rainfall, year = years)
+# We chose a climate normal
+climate_normal <- c(2001, 2005)
+
+rain_data %>%
+# calculate reference rainfall
+  mutate(ref = get_reference_precipitation(rainfall,
+                                            year,
+                                            climate_normal,
+                                            percentile = 95L)) %>%
+# calculate prorportion of rainfall above reference
+  group_by(year) %>%
+  summarise(prop_above = precipitation_above_reference(rainfall, ref))
+#> # A tibble: 10 × 2
+#>     year prop_above
+#>    <int>      <dbl>
+#>  1  2001     0.261 
+#>  2  2002     0.226 
+#>  3  2003     0.162 
+#>  4  2004     0.152 
+#>  5  2005     0.150 
+#>  6  2006     0.178 
+#>  7  2007     0.353 
+#>  8  2008     0.160 
+#>  9  2009     0.217 
+#> 10  2010     0.0961
+
+
+
-
- +
+ + - - - + diff --git a/docs/reference/prepare_pattern.html b/docs/reference/prepare_pattern.html new file mode 100644 index 0000000..5c7b2eb --- /dev/null +++ b/docs/reference/prepare_pattern.html @@ -0,0 +1,108 @@ + +Prepare a pattern for look in the data lake and use with str_detect — prepare_pattern • er.helpers + + +
+
+ + + +
+
+ + +
+

Prepare a pattern for look in the data lake and use with str_detect

+
+ +
+
prepare_pattern(pattern)
+
+ +
+

Arguments

+ + +
pattern
+

- list of patterns from search datalake

+ +
+
+

Value

+

list of patterns using standard unicode collation rules

+
+ +
+ +
+ + +
+ +
+

Site built with pkgdown 2.2.0.

+
+ +
+ + + + + + + + diff --git a/docs/reference/prettify_range.html b/docs/reference/prettify_range.html index dcd8c22..e80f1b6 100644 --- a/docs/reference/prettify_range.html +++ b/docs/reference/prettify_range.html @@ -1,68 +1,13 @@ - - - - - - - -Makes it easy to get the period for printing or visualisation — prettify_range • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Makes it easy to get the period for printing or visualisation — prettify_range • er.helpers - - + - -
-
- - -
-
+
@@ -122,80 +67,90 @@

Makes it easy to get the period for printing or visualisation

This function prints a nice range of dates or numbers easily

-
prettify_range(x, y = NULL, sep = "–")
+
+
prettify_range(x, y = NULL, sep = "–")
+
+ +
+

Arguments

+ -

Arguments

- - - - - - - - - - -
x, y

column with the number/dates/years/etc. If y is NULL the range is +

x, y
+

column with the number/dates/years/etc. If y is NULL the range is determined by the minimum and maximum value in x. If y is not NULL the beginning of the range is determined by the minimum of x and the end of the -range by the maximum of y

sep

separator between the range

+range by the maximum of y

-

Value

+
sep
+

separator between the range

+ +
+
+

Value

a character with the range

+
-

Examples

-
-# Range of a numeric vector -prettify_range(1:100)
#> [1] "1–100"
# Changing the default separator -prettify_range(1:100, sep = " to ")
#> [1] "1 to 100"
# Range using two numbers -prettify_range(1, 100)
#> [1] "1–100"
# When two vectors are provided the minimum of the first and the maximum of the -# second is returned -tibble::tibble(period_start = 2010:2020, - period_end = 2020:2030) %>% - dplyr::mutate(pretty_range = prettify_range(period_start, period_end))
#> # A tibble: 11 × 3 -#> period_start period_end pretty_range -#> <int> <int> <chr> -#> 1 2010 2020 2010–2030 -#> 2 2011 2021 2010–2030 -#> 3 2012 2022 2010–2030 -#> 4 2013 2023 2010–2030 -#> 5 2014 2024 2010–2030 -#> 6 2015 2025 2010–2030 -#> 7 2016 2026 2010–2030 -#> 8 2017 2027 2010–2030 -#> 9 2018 2028 2010–2030 -#> 10 2019 2029 2010–2030 -#> 11 2020 2030 2010–2030
# Also work with dates -seq(Sys.Date(), Sys.Date() + 100, length.out = 100) %>% - prettify_range(sep = " and ") %>% - paste("between", .)
#> [1] "between 2022-02-24 and 2022-06-04"
-
+
+

Examples

+

+# Range of a numeric vector
+prettify_range(1:100)
+#> [1] "1–100"
+# Changing the default separator
+prettify_range(1:100, sep = " to ")
+#> [1] "1 to 100"
+# Range using two numbers
+prettify_range(1, 100)
+#> [1] "1–100"
+# When two vectors are provided the minimum of the first and the maximum of the
+# second is returned
+tibble::tibble(period_start = 2010:2020,
+               period_end = 2020:2030) %>%
+  dplyr::mutate(pretty_range = prettify_range(period_start, period_end))
+#> # A tibble: 11 × 3
+#>    period_start period_end pretty_range
+#>           <int>      <int> <chr>       
+#>  1         2010       2020 2010–2030   
+#>  2         2011       2021 2010–2030   
+#>  3         2012       2022 2010–2030   
+#>  4         2013       2023 2010–2030   
+#>  5         2014       2024 2010–2030   
+#>  6         2015       2025 2010–2030   
+#>  7         2016       2026 2010–2030   
+#>  8         2017       2027 2010–2030   
+#>  9         2018       2028 2010–2030   
+#> 10         2019       2029 2010–2030   
+#> 11         2020       2030 2010–2030   
+# Also work with dates
+seq(Sys.Date(), Sys.Date() + 100, length.out = 100) %>%
+  prettify_range(sep = " and ") %>%
+  paste("between", .)
+#> [1] "between 2026-04-22 and 2026-07-31"
+
+
+
+
-
- +
+ + - - - + diff --git a/docs/reference/read_csv_datalake.html b/docs/reference/read_csv_datalake.html index 06c21f6..13824dd 100644 --- a/docs/reference/read_csv_datalake.html +++ b/docs/reference/read_csv_datalake.html @@ -1,70 +1,15 @@ - - - - - - - -Read a CSV file stored in an AWS S3 bucket. — read_csv_datalake • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Read a CSV file stored in an AWS S3 bucket. — read_csv_datalake • er.helpers - - - - - - - - - - + - - -
-
- - -
-
+

This function get the specified object from an AWS S3 bucket and reads it -using read_csv. It keeps the CSV in memory and, +using read_csv. It keeps the CSV in memory and, therefore, it avoids the unintended consequences of saving the file in the disk.

-
read_csv_datalake(
-  s3_path,
-  bucket_name = mfe_datalake_bucket,
-  version = NULL,
-  ...
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
s3_path

The filename of the desired CSV in the S3 bucket including the -full path

bucket_name

Name of the bucket to connect. By default, it uses the +

+
read_csv_datalake(
+  s3_path,
+  bucket_name = mfe_datalake_bucket,
+  version = NULL,
+  ...
+)
+
+ +
+

Arguments

+ + +
s3_path
+

The filename of the desired CSV in the S3 bucket including the +full path

+ + +
bucket_name
+

Name of the bucket to connect. By default, it uses the Ministry for the Environment data lake for environmental reporting -"mfedlkinput".

version

VersionId of the object key desired. Can be retrieved using -get_bucket_version_df

...

Other arguments passed to the reading_function

- -

Value

- -

A `tibble

- -

Examples

-
if (FALSE) { -setup_datalake_access() -csv_object_path <- "freshwater/2020/raw/urban_stream_water_quality_state.csv" -read_csv_datalake(csv_object_path) -}
+"mfedlkinput".

+ + +
version
+

VersionId of the object key desired. Can be retrieved using +get_bucket_version_df

+ + +
...
+

Other arguments passed to the reading_function

+ +
+
+

Value

+

A `tibble

+
+ +
+

Examples

+
if (FALSE) { # \dontrun{
+setup_datalake_access()
+csv_object_path <- "freshwater/2020/raw/urban_stream_water_quality_state.csv"
+read_csv_datalake(csv_object_path)
+} # }
+
+
+
-
- +
+ + - - - + diff --git a/docs/reference/read_excel_datalake.html b/docs/reference/read_excel_datalake.html index c782ca3..4d4c772 100644 --- a/docs/reference/read_excel_datalake.html +++ b/docs/reference/read_excel_datalake.html @@ -1,70 +1,15 @@ - - - - - - - -Read a excel file stored in an AWS S3 bucket. — read_excel_datalake • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Read a excel file stored in an AWS S3 bucket. — read_excel_datalake • er.helpers - - - - - - - - - - - + - -
-
- - -
-
+

This function get the specified object from an AWS S3 bucket and reads it -using read_excel. It keeps the excel in memory and, +using read_excel. It keeps the excel in memory and, therefore, it avoids the unintended consequences of saving the file in the disk.

-
read_excel_datalake(
-  s3_path,
-  bucket_name = mfe_datalake_bucket,
-  version = NULL,
-  all_sheets = T,
-  sheet = 1,
-  ...
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
s3_path

The filename of the desired excel in the S3 bucket including the -full path

bucket_name

Name of the bucket to connect. By default, it uses the +

+
read_excel_datalake(
+  s3_path,
+  bucket_name = mfe_datalake_bucket,
+  version = NULL,
+  all_sheets = T,
+  sheet = 1,
+  ...
+)
+
+ +
+

Arguments

+ + +
s3_path
+

The filename of the desired excel in the S3 bucket including the +full path

+ + +
bucket_name
+

Name of the bucket to connect. By default, it uses the Ministry for the Environment data lake for environmental reporting -"mfedlkinput".

version

VersionId of the object key desired. Can be retrieved using -get_bucket_version_df

all_sheets

If more than one sheet is present, T = read all sheets into a list, F = default to sheet specified

sheet

The sheet number to extract. Defaults to 1.

...

Other arguments passed to the reading_function

- -

Value

- -

A `tibble

- -

Examples

-
if (FALSE) { -setup_datalake_access() -files <- search_datalake(".x", "land", "2021")$Key -read_excel_datalake(files[2]) -read_excel_datalake(files[1], sheet = 2) -}
+"mfedlkinput".

+ + +
version
+

VersionId of the object key desired. Can be retrieved using +get_bucket_version_df

+ + +
all_sheets
+

If more than one sheet is present, T = read all sheets into a list, F = default to sheet specified

+ + +
sheet
+

The sheet number to extract. Defaults to 1.

+ + +
...
+

Other arguments passed to the reading_function

+ +
+
+

Value

+

A `tibble

+
+ +
+

Examples

+
if (FALSE) { # \dontrun{
+setup_datalake_access()
+files <- search_datalake(".x", "land", "2021")$Key
+read_excel_datalake(files[2])
+read_excel_datalake(files[1], sheet = 2)
+} # }
+
+
+
-
- +
+ + - - - + diff --git a/docs/reference/read_from_datalake.html b/docs/reference/read_from_datalake.html index a4527c9..95383ed 100644 --- a/docs/reference/read_from_datalake.html +++ b/docs/reference/read_from_datalake.html @@ -1,71 +1,16 @@ - - - - - - - -Read any type file stored in an AWS S3 bucket. — read_from_datalake • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Read any type file stored in an AWS S3 bucket. — read_from_datalake • er.helpers - - - - - - - - - - - + - -
-
- - -
-
+
@@ -128,57 +73,57 @@

Read any type file stored in an AWS S3 bucket.

This function also uses key search terms and will throw an error if there is more than one file with the search terms used.

-
read_from_datalake(..., all_sheets = T, version = NULL)
- -

Arguments

- - - - - - - - - - - - - - -
...

Key terms to search for in the AWS S3 bucket

all_sheets

If more than one sheet is present, T = read all sheets into a list, F = default to sheet specified

version

VersionId of the object key desired. Can be retrieved using -get_bucket_version_df

- - -

Examples

-
if (FALSE) { -setup_datalake_access() -read_from_datalake("landcover", "concordance", "lcdb4") -}
+
+
read_from_datalake(..., date = NULL, all_sheets = T, version = NULL)
+
+ +
+

Arguments

+ + +
...
+

Key terms to search for in the AWS S3 bucket

+ + +
all_sheets
+

If more than one sheet is present, T = read all sheets into a list, F = default to sheet specified

+ + +
version
+

VersionId of the object key desired. Can be retrieved using +get_bucket_version_df

+ +
+ +
+

Examples

+
if (FALSE) { # \dontrun{
+setup_datalake_access()
+read_from_datalake("landcover", "concordance", "lcdb4")
+} # }
+
+
+
-
- +
+ + - - - + diff --git a/docs/reference/rearrange_geometries.html b/docs/reference/rearrange_geometries.html new file mode 100644 index 0000000..7f31b89 --- /dev/null +++ b/docs/reference/rearrange_geometries.html @@ -0,0 +1,116 @@ + +rearrange_geometries — rearrange_geometries • er.helpers + + +
+
+ + + +
+
+ + +
+

Takes in geometries arranged with with all the lattitudes first and then all the longitudes +and returns a series of lattitude and longitude pairs.

+
+ +
+
rearrange_geometries(string)
+
+ +
+

Arguments

+ + +
string
+

This is the comma-separated string of lats and corresponding longs (character string expected)

+ +
+
+

Value

+

returns a comma-separated string of lat/long pairs

+
+ +
+

Examples

+
geometry <- "c(1,2,3,4,5,6)"
+rearrange_geometries(geometry)
+
+
+
+ +
+ + +
+ +
+

Site built with pkgdown 2.2.0.

+
+ +
+ + + + + + + + diff --git a/docs/reference/round.html b/docs/reference/round.html new file mode 100644 index 0000000..c1221fb --- /dev/null +++ b/docs/reference/round.html @@ -0,0 +1,114 @@ + +round — round • er.helpers + + +
+
+ + + +
+
+ + +
+

A function used to round numbers using the IEC 60559 standard. base::round doesn't always behave in this manner +(see help round for more information). This function is designed to mask base::round.

+
+ +
+
round(x, digits)
+
+ +
+

Arguments

+ + +
x
+

metric. A vector

+ + +
digits
+

an integer indicating the number of decimal places to be used.

+ +
+
+

Value

+

a vector rounded to the digits specified.

+
+ +
+ +
+ + +
+ +
+

Site built with pkgdown 2.2.0.

+
+ +
+ + + + + + + + diff --git a/docs/reference/round2.html b/docs/reference/round2.html index 1c718c7..f59c907 100644 --- a/docs/reference/round2.html +++ b/docs/reference/round2.html @@ -1,67 +1,12 @@ - - - - - - - -Round2 — round2 • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Round2 — round2 • er.helpers - - + - -
-
- - -
-
+
@@ -120,54 +65,50 @@

Round2

Round using conventional rounding, where .5 always gets rounded up.

-
round2(x, n)
+
+
round2(x, n)
+
+ +
+

Arguments

-

Arguments

- - - - - - - - - - -
x

vector

n

digits to round to

-

Value

+
x
+

vector

- +
n
+

digits to round to

+
-

Examples

-
round2(0.05, 1)
#> [1] 0.1
+
+

Examples

+
round2(0.05, 1)
+#> [1] 0.1
+
+
+
-
- +
+ + - - - + diff --git a/docs/reference/round_preserve_sum.html b/docs/reference/round_preserve_sum.html index 63dfaa9..ce6254c 100644 --- a/docs/reference/round_preserve_sum.html +++ b/docs/reference/round_preserve_sum.html @@ -1,68 +1,13 @@ - - - - - - - -Round preserving sum — round_preserve_sum • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Round preserving sum — round_preserve_sum • er.helpers - - + - -
-
- - -
-
+
@@ -122,56 +67,64 @@

Round preserving sum

their totals still add to 100

-
round_preserve_sum(x, digits = 0)
+
+
round_preserve_sum(x, digits = 0)
+
+ +
+

Arguments

+ -

Arguments

- - - - - - - - - - -
x

numeric vector to round

digits

integer indicating the number of decimal places to be used

+
x
+

numeric vector to round

-

Value

+
digits
+

integer indicating the number of decimal places to be used

+ +
+
+

Value

a numeric value

+
-

Examples

-
x <- c(10.3, 20.3, 69.4) -# These three values add to 100 -sum(x)
#> [1] 100
# But when rounded they do not add to 100 -sum(round(x))
#> [1] 99
# Using round_preserve_sum ensures the rounded values add to 100 -round_preserve_sum(x)
#> [1] 10 20 70
sum(round_preserve_sum(x))
#> [1] 100
+
+

Examples

+
x <- c(10.3, 20.3, 69.4)
+# These three values add to 100
+sum(x)
+#> [1] 100
+# But when rounded they do not add to 100
+sum(round(x))
+#> Error in round(x): argument "digits" is missing, with no default
+# Using round_preserve_sum ensures the rounded values add to 100
+round_preserve_sum(x)
+#> Error in round(sum(x)): argument "digits" is missing, with no default
+sum(round_preserve_sum(x))
+#> Error in round(sum(x)): argument "digits" is missing, with no default
+
+
+
-
- +
+ + - - - + diff --git a/docs/reference/sankey_build_data.html b/docs/reference/sankey_build_data.html index 4b23c37..c8c6ca6 100644 --- a/docs/reference/sankey_build_data.html +++ b/docs/reference/sankey_build_data.html @@ -1,67 +1,12 @@ - - - - - - - -Prepare data to be input into the networkD3 sankeyNetwork function. — sankey_build_data • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Prepare data to be input into the networkD3 sankeyNetwork function. — sankey_build_data • er.helpers - - + - -
-
- - -
-
+
@@ -120,78 +65,80 @@

Prepare data to be input into the networkD3 sankeyNetwork function.

Prepare data to be input into the networkD3 sankeyNetwork function.

-
sankey_build_data(data, colour_data)
+
+
sankey_build_data(data, colour_data)
+
+ +
+

Arguments

+ -

Arguments

- - - - - - - - - - -
data

A tibble or dataframe with all categorical columns apart from the final column, which is numeric. Required input.

colour_data

A tibble or dataframe with variable 1 called name containing relevant categorical values and variable 2 called colour and containing hex codes (or colour names). Required input.

+
data
+

A tibble or dataframe with all categorical columns apart from the final column, which is numeric. Required input.

-

Value

+
colour_data
+

A tibble or dataframe with variable 1 called name containing relevant categorical values and variable 2 called colour and containing hex codes (or colour names). Required input.

+ +
+
+

Value

A vector of labels.

+
-

Examples

-
library(dplyr) - -plot_data <- tibble::tribble( -~state1, ~state2, ~value, -"Trees", "Grass", 5, -"Trees", "Wetland", 1, -"Grass", "Trees", 7, -"Grass", "Wetland", 1, -"Wetland", "Trees", 1, -"Wetland", "Grass", 2) - -pal_data <- tibble::tribble( - ~name, ~colour, - "Trees", "purple", - "Grass", "green", - "Wetland", "brown") - -sankey_data <- sankey_build_data( - data = plot_data, - colour_data = pal_data) - -units <- "ha" - -networkD3::sankeyNetwork(Links = sankey_data$links, Nodes = sankey_data$nodes, - Source = "source_id", Target = "target_id", Value = "value", - NodeID = "name", colourScale = sankey_data$colour_scale, - fontSize = 14, fontFamily = "Arial", units = units)
+
+

Examples

+
library(dplyr)
+
+plot_data <- tibble::tribble(
+~state1, ~state2, ~value,
+"Trees", "Grass", 5,
+"Trees", "Wetland", 1,
+"Grass", "Trees", 7,
+"Grass", "Wetland", 1,
+"Wetland", "Trees", 1,
+"Wetland", "Grass", 2)
+
+pal_data <- tibble::tribble(
+  ~name, ~colour,
+  "Trees", "purple",
+  "Grass", "green",
+  "Wetland", "brown")
+
+sankey_data <- sankey_build_data(
+  data = plot_data,
+  colour_data = pal_data)
+
+units <- "ha"
+
+networkD3::sankeyNetwork(Links = sankey_data$links, Nodes = sankey_data$nodes,
+                         Source = "source_id", Target = "target_id", Value = "value",
+                         NodeID = "name", colourScale = sankey_data$colour_scale,
+                         fontSize = 14, fontFamily = "Arial", units = units)
+
+
+
+
-
- +
+ + - - - + diff --git a/docs/reference/search_datalake.html b/docs/reference/search_datalake.html index 6cbf048..fc25da0 100644 --- a/docs/reference/search_datalake.html +++ b/docs/reference/search_datalake.html @@ -1,72 +1,17 @@ - - - - - - - -Search for keys in the data lake — search_datalake • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Search for keys in the data lake — search_datalake • er.helpers - - - - - - - - - - + - - -
-
- - -
-
+
@@ -126,80 +71,85 @@

Search for keys in the data lake

`aws.s3::get_bucket_df` but filters out the desired Keys. If there are more than 1000 objects, it makes iterative calls to the AWS S3 API to retrieve the metadata for all versions. If the function is called from an interactive -session, it invokes a data viewer (View) with the search +session, it invokes a data viewer (View) with the search results.

-
search_datalake(
-  ...,
-  bucket_name = mfe_datalake_bucket,
-  object_versions = FALSE
-)
- -

Arguments

- - - - - - - - - - - - - - -
...

Patterns to look for. Each argument can be a character string or a +

+
search_datalake(
+  ...,
+  bucket_name = mfe_datalake_bucket,
+  object_versions = FALSE,
+  ncores = 1
+)
+
+ +
+

Arguments

+ + +
...
+

Patterns to look for. Each argument can be a character string or a regex pattern. If multiple arguments are passed only Keys that match all -patterns are returned. Strings are passed to coll +patterns are returned. Strings are passed to coll and it ignores whether it is lower or upper case. If you want to search -using regex construct the pattern using regex (see -examples).

bucket_name

Name of the bucket to connect. By default, it uses the +using regex construct the pattern using regex (see +examples).

+ + +
bucket_name
+

Name of the bucket to connect. By default, it uses the Ministry for the Environment data lake for environmental reporting -"mfedlkinput".

object_versions

Logical. Whether to include object version IDs in the search

+"mfedlkinput".

-

Value

+
object_versions
+

Logical. Whether to include object version IDs in the search

+ +
+
+

Value

a data frame with metadata for selected objects

+
-

Examples

-
if (FALSE) { -# return all objects -search_datalake() -# search for a word -search_datalake("temperature") -# search using regex -search_datalake(stringr::regex("^a")) -# search tidy datasets for atmosphere and climate 2020 -search_datalake("tidy", "climate", "2020") -}
+
+

Examples

+
 if (FALSE) { # \dontrun{
+# return all objects
+search_datalake()
+# search for a word
+search_datalake("temperature")
+# search using regex
+search_datalake(stringr::regex("^a"))
+# search tidy datasets for atmosphere and climate 2020
+search_datalake("tidy", "climate", "2020")
+# search tidy datasets with versions for atmosphere and climate 2020
+search_datalake("tidy", "climate", "2020", object_versions = TRUE, ncores = 4)
+
+} # }
+
+
+
-
- +
+ + - - - + diff --git a/docs/reference/sen_slope.html b/docs/reference/sen_slope.html index 016e848..b5b06fb 100644 --- a/docs/reference/sen_slope.html +++ b/docs/reference/sen_slope.html @@ -1,69 +1,14 @@ - - - - - - - -Sen's slope — sen_slope • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Sen's slope — sen_slope • er.helpers - - - - - - - - - - - + - -
-
- - -
-
+

#' Performs the Sen's slope trend test. This function is a wrapper around -sens.slope. See documentation there for more details about +sens.slope. See documentation there for more details about the calculation

-
sen_slope(x, conf_level = 0.95)
+
+
sen_slope(x, conf_level = 0.95)
+
+ +
+

Arguments

+ -

Arguments

- - - - - - - - - - -
x

numeric vector or a time series object of class "ts"

conf_level

confidence level of the test

+
x
+

numeric vector or a time series object of class "ts"

-

Value

+
conf_level
+

confidence level of the test

+ +
+
+

Value

a tidy data frame with the test results

+
-

Examples

-
x <- runif(100) * 1:100 -sen_slope(x)
#> # A tibble: 1 × 9 -#> p_value slope conf_low conf_high conf_level z method n note -#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <int> <chr> -#> 1 4.23e-10 0.464 0.330 0.594 0.95 6.25 Sen's slope 100 NA
+
+

Examples

+
x <- runif(100) * 1:100
+sen_slope(x)
+#> # A tibble: 1 × 9
+#>    p_value slope conf_low conf_high conf_level     z method          n note 
+#>      <dbl> <dbl>    <dbl>     <dbl>      <dbl> <dbl> <chr>       <int> <chr>
+#> 1 4.58e-12 0.430    0.308     0.589       0.95  6.92 Sen's slope   100 NA   
+
+
+
-
- +
+ + - - - + diff --git a/docs/reference/setup_datalake_access.html b/docs/reference/setup_datalake_access.html index 74d7ba5..4799954 100644 --- a/docs/reference/setup_datalake_access.html +++ b/docs/reference/setup_datalake_access.html @@ -1,69 +1,14 @@ - - - - - - - -Set up access to the data lake programatically. — setup_datalake_access • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Set up access to the data lake programatically. — setup_datalake_access • er.helpers - - - - - - - - - + - - - -
-
- - -
-
+
@@ -124,59 +69,59 @@

Set up access to the data lake programatically.

Lake.

-
setup_datalake_access(
-  cred_csv = "~/credentials.csv",
-  bucket_name = mfe_datalake_bucket
-)
- -

Arguments

- - - - - - - - - - -
cred_csv

A csv file with the credentials information. At a minimum it +

+
setup_datalake_access(
+  cred_csv = "~/credentials.csv",
+  bucket_name = mfe_datalake_bucket
+)
+
+ +
+

Arguments

+ + +
cred_csv
+

A csv file with the credentials information. At a minimum it should have two columns: "Access key ID" and "Secret access key". By default setup_datalake_access looks for this file in the user -directory "~/credentials.csv".

bucket_name

Name of the bucket to connect. By default, it uses the +directory "~/credentials.csv".

+ + +
bucket_name
+

Name of the bucket to connect. By default, it uses the Ministry for the Environment data lake for environmental reporting -"mfedlkinput".

+"mfedlkinput".

+
-

Examples

-
if (FALSE) { -setup_datalake_access(cred_csv = "~/credentials.csv", bucket_name = "mfedlkinput") -}
+
+

Examples

+
if (FALSE) { # \dontrun{
+setup_datalake_access(cred_csv = "~/credentials.csv", bucket_name = "mfedlkinput")
+} # }
+
+
+
-
- +
+ + - - - + diff --git a/docs/reference/shiny_template.html b/docs/reference/shiny_template.html index f977807..e78abf9 100644 --- a/docs/reference/shiny_template.html +++ b/docs/reference/shiny_template.html @@ -1,67 +1,12 @@ - - - - - - - -shiny_template — shiny_template • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -shiny_template — shiny_template • er.helpers - - + - -
-
- - -
-
+
@@ -120,47 +65,44 @@

shiny_template

Run a shiny template with option to download.

-
shiny_template(template = 1, ...)
+
+
shiny_template(template = 1, ...)
+
+ +
+

Arguments

+ + +
template
+

template name. Available templates are 1 with graph and table tabs, and 2 also with a map tab. Defaults to "template1".

-

Arguments

- - - - - - - - - - -
template

template name. Available templates are 1 with graph and table tabs, and 2 also with a map tab. Defaults to "template1".

...

passed to shiny::runApp

+
...
+

passed to shiny::runApp

+ +
+
-
- +
+ + - - - + diff --git a/docs/reference/signed_sqrt_trans.html b/docs/reference/signed_sqrt_trans.html index f300682..861dfc7 100644 --- a/docs/reference/signed_sqrt_trans.html +++ b/docs/reference/signed_sqrt_trans.html @@ -1,68 +1,13 @@ - - - - - - - -Signed square root ggplot scale transformation. — signed_sqrt_trans • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Signed square root ggplot scale transformation. — signed_sqrt_trans • er.helpers - - + - -
-
- - -
-
+
@@ -122,41 +67,39 @@

Signed square root ggplot scale transformation.

A signed square root ggplot scale transformation. This is useful for where there is negative values.

-
signed_sqrt_trans()
-
-signed_sqrt_trans()
- - -

Value

+
+
signed_sqrt_trans()
+
+signed_sqrt_trans()
+
+
+

Value

A ggplot scale transformation function.

A ggplot scale transformation.

+
+
-
- +
+ + - - - + diff --git a/docs/reference/simplify_likelihood_levels.html b/docs/reference/simplify_likelihood_levels.html index c134a6b..24dc297 100644 --- a/docs/reference/simplify_likelihood_levels.html +++ b/docs/reference/simplify_likelihood_levels.html @@ -1,69 +1,14 @@ - - - - - - - -Simplify likelihood levels — simplify_likelihood_levels • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Simplify likelihood levels — simplify_likelihood_levels • er.helpers - - + - -
-
- - -
-
+
@@ -124,65 +69,72 @@

Simplify likelihood levels

level "Likely or very likely improving".

-
simplify_likelihood_levels(x)
+
+
simplify_likelihood_levels(x)
+
+ +
+

Arguments

-

Arguments

- - - - - - -
x

The vector with the likelihoods. Must be a factor or a character -string

-

Value

+
x
+

The vector with the likelihoods. Must be a factor or a character +string

+
+
+

Value

A factor with simple categories

-

See also

- -

Other likelihood functions: -get_likelihood_category(), -order_likelihood_levels()

- -

Examples

-
p <- seq(0, 1, length.out = 11) - -get_likelihood_category(p) %>% - order_likelihood_levels() %>% - simplify_likelihood_levels()
#> [1] Likely or very likely improving Likely or very likely improving -#> [3] Likely or very likely improving Likely or very likely improving -#> [5] Indeterminate Indeterminate -#> [7] Indeterminate Likely or very likely worsening -#> [9] Likely or very likely worsening Likely or very likely worsening -#> [11] Likely or very likely worsening -#> 3 Levels: Likely or very likely improving ... Likely or very likely worsening
-
+
+
+

See also

+ +
+ +
+

Examples

+
p <- seq(0, 1, length.out = 11)
+
+get_likelihood_category(p) %>%
+  order_likelihood_levels() %>%
+  simplify_likelihood_levels()
+#> Warning: `lift()` was deprecated in purrr 1.0.0.
+#>  The deprecated feature was likely used in the er.helpers package.
+#>   Please report the issue at
+#>   <https://github.com/statisticsNZ/er.helpers/issues>.
+#>  [1] Likely or very likely improving Likely or very likely improving
+#>  [3] Likely or very likely improving Likely or very likely improving
+#>  [5] Indeterminate                   Indeterminate                  
+#>  [7] Indeterminate                   Likely or very likely worsening
+#>  [9] Likely or very likely worsening Likely or very likely worsening
+#> [11] Likely or very likely worsening
+#> 3 Levels: Likely or very likely improving ... Likely or very likely worsening
+
+
+
+
-
- +
+ + - - - + diff --git a/docs/reference/standardise_season.html b/docs/reference/standardise_season.html index 24a3334..581031b 100644 --- a/docs/reference/standardise_season.html +++ b/docs/reference/standardise_season.html @@ -1,67 +1,12 @@ - - - - - - - -Standarise season names — standardise_season • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Standarise season names — standardise_season • er.helpers - - + - -
-
- - -
-
+
@@ -120,43 +65,40 @@

Standarise season names

Standarise season names

-
standardise_season(x)
+
+
standardise_season(x)
+
+ +
+

Arguments

-

Arguments

- - - - - - -
x

non-standard season names

+
x
+

non-standard season names

+ +
+
-
- +
+ + - - - + diff --git a/docs/reference/statsnz_likelihood_scale.html b/docs/reference/statsnz_likelihood_scale.html index f881f9c..d2977a0 100644 --- a/docs/reference/statsnz_likelihood_scale.html +++ b/docs/reference/statsnz_likelihood_scale.html @@ -1,68 +1,13 @@ - - - - - - - -Stats NZ likelihood scale — statsnz_likelihood_scale • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Stats NZ likelihood scale — statsnz_likelihood_scale • er.helpers - - + - -
-
- - -
-
+
@@ -122,49 +67,55 @@

Stats NZ likelihood scale

This scale is a simplification of the IPCC likelihood scale

-
statsnz_likelihood_scale
+
+
statsnz_likelihood_scale
+
+ +
+

Format

+

A data frame with 9 rows and 5 variables:

term
+

likelihood term

+
left_break
+

lower probability limit for the term

-

Format

+
right_break
+

upper probability limit for the term

-

A data frame with 9 rows and 5 variables:

-
term

likelihood term

-
left_break

lower probability limit for the term

-
right_break

upper probability limit for the term

-
left_open

whether the lower limit is an open interval

-
right_open

whether the upper limit is an open interval

+
left_open
+

whether the lower limit is an open interval

-
+
right_open
+

whether the upper limit is an open interval

-

Source

+
+
+

Source

http://archive.stats.govt.nz/browse_for_stats/environment/environmental-reporting-series/environmental-indicators/Home/About/trend-assessment-technical-information.aspx

+
+
-
- +
+ + - - - + diff --git a/docs/reference/table_to_metadata.html b/docs/reference/table_to_metadata.html new file mode 100644 index 0000000..61557fe --- /dev/null +++ b/docs/reference/table_to_metadata.html @@ -0,0 +1,118 @@ + +Table to metadata Adds attributes to df object and returns and prints list of attributes — table_to_metadata • er.helpers + + +
+
+ + + +
+
+ + +
+

Table to metadata +Adds attributes to df object and returns and prints list of attributes

+
+ +
+
table_to_metadata(df, metadata)
+
+ +
+

Arguments

+ + +
df
+

dataframe object

+ + +
metadata
+

attribute names and values to be added to df object

+ + +
retain_row_names
+

Logical. defaults to FALSE (row.names attribute will be removed), set to TRUE if row.names attribute to be retained

+ +
+
+

Value

+

list of attribute names and values

+
+ +
+ +
+ + +
+ +
+

Site built with pkgdown 2.2.0.

+
+ +
+ + + + + + + + diff --git a/docs/reference/tidyeval.html b/docs/reference/tidyeval.html index dea3327..fa23ef6 100644 --- a/docs/reference/tidyeval.html +++ b/docs/reference/tidyeval.html @@ -1,46 +1,5 @@ - - - - - - - -Tidy eval helpers — tidyeval • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Tidy eval helpers — tidyeval • er.helpers - - - - - - - - - - - + - -
-
- - -
-
+
- -
    -
  • sym() creates a symbol from a string and -syms() creates a list of symbols from a + +

    • sym() creates a symbol from a string and +syms() creates a list of symbols from a character vector.

    • -
    • enquo() and -enquos() delay the execution of one or +

    • enquo() and +enquos() delay the execution of one or several function arguments. enquo() returns a single quoted expression, which is like a blueprint for the delayed computation. enquos() returns a list of such quoted expressions.

    • -
    • expr() quotes a new expression locally. It +

    • expr() quotes a new expression locally. It is mostly useful to build new expressions around arguments captured with enquo() or enquos(): expr(mean(!!enquo(arg), na.rm = TRUE)).

    • -
    • as_name() transforms a quoted variable name +

    • as_name() transforms a quoted variable name into a string. Supplying something else than a quoted variable name is an error.

      -

      That's unlike as_label() which also returns +

      That's unlike as_label() which also returns a single string but supports any kind of R object as input, including quoted function calls and vectors. Its purpose is to summarise that object into a single label. That label is often @@ -176,42 +120,35 @@

      Tidy eval helpers

      name, a call to a function, or an unquoted constant), then use as_label(). If you know you have quoted a simple variable name, or would like to enforce this, use as_name().

    • -
    - -

    To learn more about tidy eval and how to use these tools, visit -https://tidyeval.tidyverse.org and the -Metaprogramming -section of Advanced R.

    +

To learn more about tidy eval and how to use these tools, visit +https://tidyeval.tidyverse.org and the +Metaprogramming +section of Advanced R.

-
+
-
- +
+ + - - - + diff --git a/docs/reference/version_list_as_df.html b/docs/reference/version_list_as_df.html index 5564ff0..1096af0 100644 --- a/docs/reference/version_list_as_df.html +++ b/docs/reference/version_list_as_df.html @@ -1,67 +1,12 @@ - - - - - - - -Coverts list with object version metadata to a data frame — version_list_as_df • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Coverts list with object version metadata to a data frame — version_list_as_df • er.helpers - - + - -
-
- - -
-
+
@@ -120,46 +65,44 @@

Coverts list with object version metadata to a data frame

Coverts list with object version metadata to a data frame

-
version_list_as_df(versions)
+
+
version_list_as_df(versions)
+
+ +
+

Arguments

-

Arguments

- - - - - - -
versions

list item as returned by `get_versions_list`

-

Value

+
versions
+

list item as returned by `get_versions_list`

+
+
+

Value

A data frame

+
+
-
- +
+ + - - - + diff --git a/docs/reference/write_rds_datalake.html b/docs/reference/write_rds_datalake.html index 87da03f..77410d3 100644 --- a/docs/reference/write_rds_datalake.html +++ b/docs/reference/write_rds_datalake.html @@ -1,79 +1,16 @@ - - - - - - - -Write an RDS file to the lake. .RDS so the attributes can be saved as metadata. Basic attributes are applied below -But you can add your own using attr(). V -The function first writes the file to a temp directory -therefore, it avoids the unintended consequences of saving the file in the -disk. — write_rds_datalake • er.helpers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Write an RDS file to the lake. .RDS so the attributes can be saved as metadata. Basic attributes are applied below But you can add your own using attr(). V The function first writes the file to a temp directory therefore, it avoids the unintended consequences of saving the file in the disk. — write_rds_datalake • er.helpers - - - - - - - - - - - + - -
-
- - -
-
+
@@ -140,52 +73,52 @@

Write an RDS file to the lake. .RDS so the attributes can be saved as metada disk.

-
write_rds_datalake(data, s3_path)
- -

Arguments

- - - - - - - - - - -
data

an object to write to the lake

s3_path

the object path in the lake to save to (this should have the extension .RDS)

- - -

Examples

-
if (FALSE) { -setup_datalake_access() -read_from_datalake("landcover", "concordance", "lcdb4") -}
+
+
write_rds_datalake(data, s3_path)
+
+ +
+

Arguments

+ + +
data
+

an object to write to the lake

+ + +
s3_path
+

the object path in the lake to save to (this should have the extension .RDS)

+ +
+ +
+

Examples

+
if (FALSE) { # \dontrun{
+setup_datalake_access()
+read_from_datalake("landcover", "concordance", "lcdb4")
+} # }
+
+
+
-
- +
+ + - - - + diff --git a/docs/sitemap.xml b/docs/sitemap.xml new file mode 100644 index 0000000..e223715 --- /dev/null +++ b/docs/sitemap.xml @@ -0,0 +1,99 @@ + +/404.html +/CHANGELOG.html +/CODE_OF_CONDUCT.html +/CONTRIBUTING.html +/LICENSE-text.html +/SECURITY.html +/articles/anomaly-and-aggregation.html +/articles/index.html +/articles/palettes.html +/authors.html +/index.html +/news/index.html +/reference/a4_height_mm.html +/reference/a4_width_mm.html +/reference/add_unused_levels.html +/reference/aggregate_with_criteria.html +/reference/all_columns_to_snakecase.html +/reference/are_all_the_same.html +/reference/calc_annual_anomaly.html +/reference/check_aws_access.html +/reference/er.helpers-deprecated.html +/reference/get_bucket_version_df.html +/reference/get_likelihood_category.html +/reference/get_likelihood_terms.html +/reference/get_metadata.html +/reference/get_reference_precipitation.html +/reference/get_season.html +/reference/get_versions_list.html +/reference/ggplot_hbar_col_x_na_inf.html +/reference/ggplot_hbar_facet_x_na_inf.html +/reference/ggplot_hbar_x_na_inf.html +/reference/gridify_mb_data.html +/reference/in_interval.html +/reference/index.html +/reference/ipcc_likelihood_scale.html +/reference/launch_shiny_in_background.html +/reference/linear_model.html +/reference/mann_kendall.html +/reference/metadata_to_table.html +/reference/mfe_datalake_bucket.html +/reference/nz.html +/reference/nz_grid_hex_346.html +/reference/nz_region.html +/reference/order_likelihood_levels.html +/reference/order_season_levels.html +/reference/pal_ea19.html +/reference/pal_ea19_alpha2.html +/reference/pal_ea19_compare2.html +/reference/pal_ea19_nof4.html +/reference/pal_ea19_nof5.html +/reference/pal_ea19_nztcs_c.html +/reference/pal_ea19_trend2.html +/reference/pal_ea19_trend3.html +/reference/pal_ea19_trend5.html +/reference/pal_point_set1.html +/reference/pal_point_trend2.html +/reference/pal_point_trend3.html +/reference/pal_point_trend5.html +/reference/pal_snz.html +/reference/pal_snz_alpha2.html +/reference/pal_snz_compare2.html +/reference/pal_snz_nof4.html +/reference/pal_snz_nof5.html +/reference/pal_snz_nztcs_c.html +/reference/pal_snz_nztcs_s.html +/reference/pal_snz_trend2.html +/reference/pal_snz_trend3.html +/reference/pal_snz_trend5.html +/reference/pipe.html +/reference/precipitation_above_reference.html +/reference/prepare_pattern.html +/reference/prettify_range.html +/reference/read_csv_datalake.html +/reference/read_excel.html +/reference/read_excel_datalake.html +/reference/read_from_datalake.html +/reference/rearrange_geometries.html +/reference/round.html +/reference/round2.html +/reference/round_preserve_sum.html +/reference/sankey_build_data.html +/reference/search_datalake.html +/reference/sen_slope.html +/reference/setup_datalake_access.html +/reference/shiny_template.html +/reference/signed_sqrt_trans.html +/reference/simplify_likelihood_levels.html +/reference/standardise_season.html +/reference/statsnz_likelihood_scale.html +/reference/table_to_metadata.html +/reference/theme_hbar.html +/reference/tidyeval.html +/reference/version_list_as_df.html +/reference/write_csv_datalake.html +/reference/write_excel_datalake.html +/reference/write_rds_datalake.html + + diff --git a/man/a4_height_mm.Rd b/man/a4_height_mm.Rd index 820661d..fe27989 100644 --- a/man/a4_height_mm.Rd +++ b/man/a4_height_mm.Rd @@ -4,7 +4,9 @@ \name{a4_height_mm} \alias{a4_height_mm} \title{A4 useable height.} -\format{An object of class \code{numeric} of length 1.} +\format{ +An object of class \code{numeric} of length 1. +} \usage{ a4_height_mm } diff --git a/man/a4_width_mm.Rd b/man/a4_width_mm.Rd index 0d18e89..9c50907 100644 --- a/man/a4_width_mm.Rd +++ b/man/a4_width_mm.Rd @@ -4,7 +4,9 @@ \name{a4_width_mm} \alias{a4_width_mm} \title{A4 useable width.} -\format{An object of class \code{numeric} of length 1.} +\format{ +An object of class \code{numeric} of length 1. +} \usage{ a4_width_mm } diff --git a/man/aggregate_with_criteria.Rd b/man/aggregate_with_criteria.Rd index 7d2a361..230cc8b 100644 --- a/man/aggregate_with_criteria.Rd +++ b/man/aggregate_with_criteria.Rd @@ -8,8 +8,7 @@ \alias{sum_with_criteria} \title{Calculate an aggregated value taking into account certain exclusion cirteria} \usage{ -aggregate_with_criteria(x, max_missing = 0, max_consecutive = 0, - fun = mean) +aggregate_with_criteria(x, max_missing = 0, max_consecutive = 0, fun = mean) mean_with_criteria(x, max_missing = 0, max_consecutive = 0) @@ -44,12 +43,12 @@ monthly value by specifing these thresholds } \section{Functions}{ \itemize{ -\item \code{mean_with_criteria}: Mean with criteria +\item \code{mean_with_criteria()}: Mean with criteria -\item \code{min_with_criteria}: Minimum with criteria +\item \code{min_with_criteria()}: Minimum with criteria -\item \code{max_with_criteria}: Maximum with criteria +\item \code{max_with_criteria()}: Maximum with criteria -\item \code{sum_with_criteria}: Sum with criteria -}} +\item \code{sum_with_criteria()}: Sum with criteria +}} diff --git a/man/calc_annual_anomaly.Rd b/man/calc_annual_anomaly.Rd index a0dc696..e831c28 100644 --- a/man/calc_annual_anomaly.Rd +++ b/man/calc_annual_anomaly.Rd @@ -4,8 +4,13 @@ \alias{calc_annual_anomaly} \title{Calculate annual anomaly} \usage{ -calc_annual_anomaly(x, year, period = NULL, max_missing = 0.2, - max_consecutive = NULL) +calc_annual_anomaly( + x, + year, + period = NULL, + max_missing = 0.2, + max_consecutive = NULL +) } \arguments{ \item{x}{metric. A vector} diff --git a/man/get_likelihood_category.Rd b/man/get_likelihood_category.Rd index 6f7ef8f..d974348 100644 --- a/man/get_likelihood_category.Rd +++ b/man/get_likelihood_category.Rd @@ -4,10 +4,13 @@ \alias{get_likelihood_category} \title{Get likelihood category for a p-value} \usage{ -get_likelihood_category(p, scale = c("statsnz", "ipcc"), - term_type = c("worsening-improving", "improving-worsening", - "increasing-decreasing", "decreasing-increasing", "likely-unlikely"), - p_is = c("probability", "percentage")) +get_likelihood_category( + p, + scale = c("statsnz", "ipcc"), + term_type = c("worsening-improving", "improving-worsening", "increasing-decreasing", + "decreasing-increasing", "likely-unlikely"), + p_is = c("probability", "percentage") +) } \arguments{ \item{p}{the probability (or percentage) used to caclulate the category} @@ -64,7 +67,8 @@ get_likelihood_category(p, scale = "ipcc") \%>\% order_likelihood_levels() } \seealso{ -Other likelihood functions: \code{\link{order_likelihood_levels}}, - \code{\link{simplify_likelihood_levels}} +Other likelihood functions: +\code{\link{order_likelihood_levels}()}, +\code{\link{simplify_likelihood_levels}()} } \concept{likelihood functions} diff --git a/man/get_likelihood_terms.Rd b/man/get_likelihood_terms.Rd index 96aa3e6..7aae163 100644 --- a/man/get_likelihood_terms.Rd +++ b/man/get_likelihood_terms.Rd @@ -4,8 +4,11 @@ \alias{get_likelihood_terms} \title{Translate likely-unlikely to a specified term scale} \usage{ -get_likelihood_terms(terms, term_type = c("worsening-improving", - "improving-worsening", "increasing-decreasing", "likely-unlikely")) +get_likelihood_terms( + terms, + term_type = c("worsening-improving", "improving-worsening", "increasing-decreasing", + "likely-unlikely") +) } \arguments{ \item{terms}{terms to translate} diff --git a/man/get_reference_precipitation.Rd b/man/get_reference_precipitation.Rd index 5deef05..c6d9da6 100644 --- a/man/get_reference_precipitation.Rd +++ b/man/get_reference_precipitation.Rd @@ -4,8 +4,13 @@ \alias{get_reference_precipitation} \title{Calculate reference precipitation for a reference period/climate normal} \usage{ -get_reference_precipitation(precipitation, date = NULL, - reference_period = NULL, percentile = 95L, wet_day_threshold = 1) +get_reference_precipitation( + precipitation, + date = NULL, + reference_period = NULL, + percentile = 95L, + wet_day_threshold = 1 +) } \arguments{ \item{precipitation}{vector with rainfall values} @@ -52,6 +57,7 @@ rain_data \%>\% summarise(prop_above = precipitation_above_reference(rainfall, ref)) } \seealso{ -Other rainfall functions: \code{\link{precipitation_above_reference}} +Other rainfall functions: +\code{\link{precipitation_above_reference}()} } \concept{rainfall functions} diff --git a/man/get_season.Rd b/man/get_season.Rd index 7cfc38c..d118cca 100644 --- a/man/get_season.Rd +++ b/man/get_season.Rd @@ -7,9 +7,9 @@ get_season(x, with_year = TRUE) } \arguments{ -\item{x}{a date-time object of class POSIXct, POSIXlt, Date, chron, yearmon, -yearqtr, zoo, zooreg, timeDate, xts, its, ti, jul, timeSeries, fts or -anything else that can be converted with as.POSIXlt} +\item{x}{a date-time object of class POSIXct, POSIXlt, Date, chron, yearmon, yearqtr, +zoo, zooreg, timeDate, xts, its, ti, jul, timeSeries, fts or anything else that can +be converted with as.POSIXlt} \item{with_year}{logical indicating whether or not to include the season's year/} } diff --git a/man/ipcc_likelihood_scale.Rd b/man/ipcc_likelihood_scale.Rd index b2198b4..f5589e7 100644 --- a/man/ipcc_likelihood_scale.Rd +++ b/man/ipcc_likelihood_scale.Rd @@ -4,14 +4,16 @@ \name{ipcc_likelihood_scale} \alias{ipcc_likelihood_scale} \title{IPCC likelihood scale} -\format{A data frame with 9 rows and 5 variables: +\format{ +A data frame with 9 rows and 5 variables: \describe{ \item{term}{likelihood term} \item{left_break}{lower probability limit for the term} \item{right_break}{upper probability limit for the term} \item{left_open}{whether the lower limit is an open interval} \item{right_open}{whether the upper limit is an open interval} -}} +} +} \source{ Mastrandrea, M.D., C.B. Field, T.F. Stocker, O. Edenhofer, K.L. Ebi, D.J. Frame, H. Held, E. Kriegler, K.J. Mach, P.R. Matschoss, G.-K. diff --git a/man/mann_kendall.Rd b/man/mann_kendall.Rd index ee8517b..be1d224 100644 --- a/man/mann_kendall.Rd +++ b/man/mann_kendall.Rd @@ -4,8 +4,11 @@ \alias{mann_kendall} \title{Mann-Kendall Trend Test} \usage{ -mann_kendall(x, alternative = c("greater", "two.sided", "less"), - continuity = TRUE) +mann_kendall( + x, + alternative = c("greater", "two.sided", "less"), + continuity = TRUE +) } \arguments{ \item{x}{a vector of class "numeric" or a time series object of class "ts"} diff --git a/man/mfe_datalake_bucket.Rd b/man/mfe_datalake_bucket.Rd index f05da3a..1bb8497 100644 --- a/man/mfe_datalake_bucket.Rd +++ b/man/mfe_datalake_bucket.Rd @@ -4,7 +4,9 @@ \name{mfe_datalake_bucket} \alias{mfe_datalake_bucket} \title{MfE Default bucket} -\format{An object of class \code{character} of length 1.} +\format{ +An object of class \code{character} of length 1. +} \usage{ mfe_datalake_bucket } diff --git a/man/nz.Rd b/man/nz.Rd index 1d618c0..3c00496 100644 --- a/man/nz.Rd +++ b/man/nz.Rd @@ -4,7 +4,9 @@ \name{nz} \alias{nz} \title{New Zealand coastline.} -\format{An \code{sf} object.} +\format{ +An \code{sf} object. +} \usage{ nz } diff --git a/man/nz_grid_hex_346.Rd b/man/nz_grid_hex_346.Rd index 0b86e45..3c8b80f 100644 --- a/man/nz_grid_hex_346.Rd +++ b/man/nz_grid_hex_346.Rd @@ -4,7 +4,11 @@ \name{nz_grid_hex_346} \alias{nz_grid_hex_346} \title{Hexagonal grid sf object with hexagons of 346km2.} -\format{An \code{sf} object.} +\format{ +An \code{sf} object. + +An \code{sf} object. +} \usage{ nz_grid_hex_346 diff --git a/man/nz_region.Rd b/man/nz_region.Rd index fcc7949..21bfb53 100644 --- a/man/nz_region.Rd +++ b/man/nz_region.Rd @@ -4,11 +4,13 @@ \name{nz_region} \alias{nz_region} \title{New Zealand coastline intersected with regional bourndaries.} -\format{An sf object with 3 columns and 16 rows: +\format{ +An sf object with 3 columns and 16 rows: \describe{ \item{region_code}{The code for each region} \item{region}{The name of each region} -}} +} +} \usage{ nz_region } diff --git a/man/order_likelihood_levels.Rd b/man/order_likelihood_levels.Rd index 8bb558a..e15d5ee 100644 --- a/man/order_likelihood_levels.Rd +++ b/man/order_likelihood_levels.Rd @@ -35,7 +35,8 @@ qplot(trend, n, fill = trend, data = ordered_trends, geom = "col") } } \seealso{ -Other likelihood functions: \code{\link{get_likelihood_category}}, - \code{\link{simplify_likelihood_levels}} +Other likelihood functions: +\code{\link{get_likelihood_category}()}, +\code{\link{simplify_likelihood_levels}()} } \concept{likelihood functions} diff --git a/man/pal_ea19.Rd b/man/pal_ea19.Rd index 6a66c1a..c834081 100644 --- a/man/pal_ea19.Rd +++ b/man/pal_ea19.Rd @@ -4,7 +4,9 @@ \name{pal_ea19} \alias{pal_ea19} \title{Colour palette for a graph with a nominal categorical variable.} -\format{An object of class \code{character} of length 9.} +\format{ +An object of class \code{character} of length 9. +} \usage{ pal_ea19 } diff --git a/man/pal_ea19_alpha2.Rd b/man/pal_ea19_alpha2.Rd index 3cf9464..970c5ff 100644 --- a/man/pal_ea19_alpha2.Rd +++ b/man/pal_ea19_alpha2.Rd @@ -4,7 +4,9 @@ \name{pal_ea19_alpha2} \alias{pal_ea19_alpha2} \title{Colour palette for a graph that compares a current year to 1 past year.} -\format{An object of class \code{character} of length 2.} +\format{ +An object of class \code{character} of length 2. +} \usage{ pal_ea19_alpha2 } diff --git a/man/pal_ea19_nztcs_c.Rd b/man/pal_ea19_nztcs_c.Rd index d3e4f03..d8af454 100644 --- a/man/pal_ea19_nztcs_c.Rd +++ b/man/pal_ea19_nztcs_c.Rd @@ -4,7 +4,9 @@ \name{pal_ea19_nztcs_c} \alias{pal_ea19_nztcs_c} \title{Colour palette for a NZTCS category graph.} -\format{An object of class \code{character} of length 4.} +\format{ +An object of class \code{character} of length 4. +} \usage{ pal_ea19_nztcs_c } diff --git a/man/pal_ea19_trend2.Rd b/man/pal_ea19_trend2.Rd index 44d8064..5600c9e 100644 --- a/man/pal_ea19_trend2.Rd +++ b/man/pal_ea19_trend2.Rd @@ -4,7 +4,9 @@ \name{pal_ea19_trend2} \alias{pal_ea19_trend2} \title{Colour palette for a graph of a ordinal categorical trend variable with 2 values.} -\format{An object of class \code{character} of length 2.} +\format{ +An object of class \code{character} of length 2. +} \usage{ pal_ea19_trend2 } diff --git a/man/pal_ea19_trend3.Rd b/man/pal_ea19_trend3.Rd index efac6b7..5fa9f79 100644 --- a/man/pal_ea19_trend3.Rd +++ b/man/pal_ea19_trend3.Rd @@ -4,7 +4,9 @@ \name{pal_ea19_trend3} \alias{pal_ea19_trend3} \title{Colour palette for a graph of a ordinal categorical trend variable with 3 values.} -\format{An object of class \code{character} of length 3.} +\format{ +An object of class \code{character} of length 3. +} \usage{ pal_ea19_trend3 } diff --git a/man/pal_ea19_trend5.Rd b/man/pal_ea19_trend5.Rd index e47e9ef..c820af1 100644 --- a/man/pal_ea19_trend5.Rd +++ b/man/pal_ea19_trend5.Rd @@ -4,7 +4,9 @@ \name{pal_ea19_trend5} \alias{pal_ea19_trend5} \title{Colour palette for a graph of a ordinal categorical trend variable with 5 values.} -\format{An object of class \code{character} of length 5.} +\format{ +An object of class \code{character} of length 5. +} \usage{ pal_ea19_trend5 } diff --git a/man/pal_point_set1.Rd b/man/pal_point_set1.Rd index b58ba8d..b36c98e 100644 --- a/man/pal_point_set1.Rd +++ b/man/pal_point_set1.Rd @@ -4,7 +4,9 @@ \name{pal_point_set1} \alias{pal_point_set1} \title{Colour palette for categorical variables for points on a map etc.} -\format{An object of class \code{character} of length 9.} +\format{ +An object of class \code{character} of length 9. +} \usage{ pal_point_set1 } diff --git a/man/pal_point_trend2.Rd b/man/pal_point_trend2.Rd index df64b37..8b07b43 100644 --- a/man/pal_point_trend2.Rd +++ b/man/pal_point_trend2.Rd @@ -4,7 +4,9 @@ \name{pal_point_trend2} \alias{pal_point_trend2} \title{Colour palette for a map of a ordinal categorical trend variable with 2 values.} -\format{An object of class \code{character} of length 2.} +\format{ +An object of class \code{character} of length 2. +} \usage{ pal_point_trend2 } diff --git a/man/pal_point_trend3.Rd b/man/pal_point_trend3.Rd index a7e0c05..4915609 100644 --- a/man/pal_point_trend3.Rd +++ b/man/pal_point_trend3.Rd @@ -4,7 +4,9 @@ \name{pal_point_trend3} \alias{pal_point_trend3} \title{Colour palette for a map of a ordinal categorical trend variable with 3 values.} -\format{An object of class \code{character} of length 3.} +\format{ +An object of class \code{character} of length 3. +} \usage{ pal_point_trend3 } diff --git a/man/pal_point_trend5.Rd b/man/pal_point_trend5.Rd index 1c990c9..6410a24 100644 --- a/man/pal_point_trend5.Rd +++ b/man/pal_point_trend5.Rd @@ -4,7 +4,9 @@ \name{pal_point_trend5} \alias{pal_point_trend5} \title{Colour palette for a map of a ordinal categorical trend variable with 5 values.} -\format{An object of class \code{character} of length 5.} +\format{ +An object of class \code{character} of length 5. +} \usage{ pal_point_trend5 } diff --git a/man/pal_snz.Rd b/man/pal_snz.Rd index 7e0983d..284a9ce 100644 --- a/man/pal_snz.Rd +++ b/man/pal_snz.Rd @@ -4,7 +4,9 @@ \name{pal_snz} \alias{pal_snz} \title{Colour palette for a graph with a nominal categorical variable.} -\format{An object of class \code{character} of length 9.} +\format{ +An object of class \code{character} of length 9. +} \usage{ pal_snz } diff --git a/man/pal_snz_alpha2.Rd b/man/pal_snz_alpha2.Rd index fac0cb3..245c375 100644 --- a/man/pal_snz_alpha2.Rd +++ b/man/pal_snz_alpha2.Rd @@ -4,7 +4,9 @@ \name{pal_snz_alpha2} \alias{pal_snz_alpha2} \title{Colour palette for a graph that compares a current year to 1 past year.} -\format{An object of class \code{character} of length 2.} +\format{ +An object of class \code{character} of length 2. +} \usage{ pal_snz_alpha2 } diff --git a/man/pal_snz_nztcs_c.Rd b/man/pal_snz_nztcs_c.Rd index 754ecf3..13d1a3e 100644 --- a/man/pal_snz_nztcs_c.Rd +++ b/man/pal_snz_nztcs_c.Rd @@ -4,7 +4,9 @@ \name{pal_snz_nztcs_c} \alias{pal_snz_nztcs_c} \title{Colour palette for a NZTCS category graph.} -\format{An object of class \code{character} of length 4.} +\format{ +An object of class \code{character} of length 4. +} \usage{ pal_snz_nztcs_c } diff --git a/man/pal_snz_nztcs_s.Rd b/man/pal_snz_nztcs_s.Rd index 39c2300..68dfe9f 100644 --- a/man/pal_snz_nztcs_s.Rd +++ b/man/pal_snz_nztcs_s.Rd @@ -4,7 +4,9 @@ \name{pal_snz_nztcs_s} \alias{pal_snz_nztcs_s} \title{Colour palette for a NZTCS subcategory graph.} -\format{An object of class \code{character} of length 9.} +\format{ +An object of class \code{character} of length 9. +} \usage{ pal_snz_nztcs_s } diff --git a/man/pal_snz_trend2.Rd b/man/pal_snz_trend2.Rd index 7e5d044..b60f530 100644 --- a/man/pal_snz_trend2.Rd +++ b/man/pal_snz_trend2.Rd @@ -4,7 +4,9 @@ \name{pal_snz_trend2} \alias{pal_snz_trend2} \title{Colour palette for a graph of a ordinal categorical trend variable with 2 values.} -\format{An object of class \code{character} of length 2.} +\format{ +An object of class \code{character} of length 2. +} \usage{ pal_snz_trend2 } diff --git a/man/pal_snz_trend3.Rd b/man/pal_snz_trend3.Rd index 130fb01..91136e5 100644 --- a/man/pal_snz_trend3.Rd +++ b/man/pal_snz_trend3.Rd @@ -4,7 +4,9 @@ \name{pal_snz_trend3} \alias{pal_snz_trend3} \title{Colour palette for a graph of a ordinal categorical trend variable with 3 values.} -\format{An object of class \code{character} of length 3.} +\format{ +An object of class \code{character} of length 3. +} \usage{ pal_snz_trend3 } diff --git a/man/pal_snz_trend5.Rd b/man/pal_snz_trend5.Rd index c99d8b6..9661c9f 100644 --- a/man/pal_snz_trend5.Rd +++ b/man/pal_snz_trend5.Rd @@ -4,7 +4,9 @@ \name{pal_snz_trend5} \alias{pal_snz_trend5} \title{Colour palette for a graph of a ordinal categorical trend variable with 5 values.} -\format{An object of class \code{character} of length 5.} +\format{ +An object of class \code{character} of length 5. +} \usage{ pal_snz_trend5 } diff --git a/man/precipitation_above_reference.Rd b/man/precipitation_above_reference.Rd index 68912a6..d3654e3 100644 --- a/man/precipitation_above_reference.Rd +++ b/man/precipitation_above_reference.Rd @@ -4,8 +4,11 @@ \alias{precipitation_above_reference} \title{Get proportion of rainfall above reference} \usage{ -precipitation_above_reference(precipitation, reference_precipitation, - wet_day_threshold = 1) +precipitation_above_reference( + precipitation, + reference_precipitation, + wet_day_threshold = 1 +) } \arguments{ \item{precipitation}{vector with rainfall values} @@ -46,6 +49,7 @@ rain_data \%>\% summarise(prop_above = precipitation_above_reference(rainfall, ref)) } \seealso{ -Other rainfall functions: \code{\link{get_reference_precipitation}} +Other rainfall functions: +\code{\link{get_reference_precipitation}()} } \concept{rainfall functions} diff --git a/man/read_csv_datalake.Rd b/man/read_csv_datalake.Rd index be258a9..7a119e0 100644 --- a/man/read_csv_datalake.Rd +++ b/man/read_csv_datalake.Rd @@ -4,8 +4,12 @@ \alias{read_csv_datalake} \title{Read a CSV file stored in an AWS S3 bucket.} \usage{ -read_csv_datalake(s3_path, bucket_name = mfe_datalake_bucket, - version = NULL, ...) +read_csv_datalake( + s3_path, + bucket_name = mfe_datalake_bucket, + version = NULL, + ... +) } \arguments{ \item{s3_path}{The filename of the desired CSV in the S3 bucket including the diff --git a/man/read_excel_datalake.Rd b/man/read_excel_datalake.Rd index 62fddda..52ef6d7 100644 --- a/man/read_excel_datalake.Rd +++ b/man/read_excel_datalake.Rd @@ -4,8 +4,14 @@ \alias{read_excel_datalake} \title{Read a excel file stored in an AWS S3 bucket.} \usage{ -read_excel_datalake(s3_path, bucket_name = mfe_datalake_bucket, - version = NULL, all_sheets = T, sheet = 1, ...) +read_excel_datalake( + s3_path, + bucket_name = mfe_datalake_bucket, + version = NULL, + all_sheets = T, + sheet = 1, + ... +) } \arguments{ \item{s3_path}{The filename of the desired excel in the S3 bucket including the diff --git a/man/search_datalake.Rd b/man/search_datalake.Rd index 5710286..31531a2 100644 --- a/man/search_datalake.Rd +++ b/man/search_datalake.Rd @@ -4,8 +4,12 @@ \alias{search_datalake} \title{Search for keys in the data lake} \usage{ -search_datalake(..., bucket_name = mfe_datalake_bucket, - object_versions = FALSE, ncores = 1) +search_datalake( + ..., + bucket_name = mfe_datalake_bucket, + object_versions = FALSE, + ncores = 1 +) } \arguments{ \item{...}{Patterns to look for. Each argument can be a character string or a diff --git a/man/setup_datalake_access.Rd b/man/setup_datalake_access.Rd index b5d44e2..a7ad847 100644 --- a/man/setup_datalake_access.Rd +++ b/man/setup_datalake_access.Rd @@ -4,8 +4,10 @@ \alias{setup_datalake_access} \title{Set up access to the data lake programatically.} \usage{ -setup_datalake_access(cred_csv = "~/credentials.csv", - bucket_name = mfe_datalake_bucket) +setup_datalake_access( + cred_csv = "~/credentials.csv", + bucket_name = mfe_datalake_bucket +) } \arguments{ \item{cred_csv}{A csv file with the credentials information. At a minimum it diff --git a/man/simplify_likelihood_levels.Rd b/man/simplify_likelihood_levels.Rd index ec10f2b..f101cd7 100644 --- a/man/simplify_likelihood_levels.Rd +++ b/man/simplify_likelihood_levels.Rd @@ -27,7 +27,8 @@ get_likelihood_category(p) \%>\% } \seealso{ -Other likelihood functions: \code{\link{get_likelihood_category}}, - \code{\link{order_likelihood_levels}} +Other likelihood functions: +\code{\link{get_likelihood_category}()}, +\code{\link{order_likelihood_levels}()} } \concept{likelihood functions} diff --git a/man/statsnz_likelihood_scale.Rd b/man/statsnz_likelihood_scale.Rd index f5611bd..6a7a949 100644 --- a/man/statsnz_likelihood_scale.Rd +++ b/man/statsnz_likelihood_scale.Rd @@ -4,14 +4,16 @@ \name{statsnz_likelihood_scale} \alias{statsnz_likelihood_scale} \title{Stats NZ likelihood scale} -\format{A data frame with 9 rows and 5 variables: +\format{ +A data frame with 9 rows and 5 variables: \describe{ \item{term}{likelihood term} \item{left_break}{lower probability limit for the term} \item{right_break}{upper probability limit for the term} \item{left_open}{whether the lower limit is an open interval} \item{right_open}{whether the upper limit is an open interval} -}} +} +} \source{ http://archive.stats.govt.nz/browse_for_stats/environment/environmental-reporting-series/environmental-indicators/Home/About/trend-assessment-technical-information.aspx } diff --git a/vignettes/anomaly-and-aggregation.Rmd b/vignettes/anomaly-and-aggregation.Rmd new file mode 100644 index 0000000..29673e0 --- /dev/null +++ b/vignettes/anomaly-and-aggregation.Rmd @@ -0,0 +1,189 @@ +--- +title: "Anomaly Calculation and Data Aggregation" +output: rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{Anomaly Calculation and Data Aggregation} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +```{r, include = FALSE} +knitr::opts_chunk$set( + collapse = TRUE, + comment = "#>" +) +``` + +```{r setup, include=FALSE} +library(er.helpers) +library(dplyr) +library(tibble) +``` + +## Overview + +Environmental time series frequently contain missing values, and international +standards from organisations like the World Meteorological Organisation (WMO) +specify exactly how much missing data is acceptable before an aggregated value +should not be reported. `er.helpers` provides two complementary sets of tools +for these situations: + +- **Aggregation with criteria** — compute a summary statistic (mean, min, max, + sum) only when a dataset meets user-defined missing-data thresholds. +- **Annual anomaly** — express each year's value relative to a reference period + mean, with the same missing-data safeguards applied to the baseline. + +--- + +## Aggregating data with missing-value criteria + +`aggregate_with_criteria()` returns the requested aggregate, or `NA` if either +the total number of missing values or the length of the longest consecutive run +of missing values exceeds the specified thresholds. + +Thresholds can be expressed as **counts** (integers ≥ 1) or **proportions** +(0 < value ≤ 1): + +```{r aggregate-basics} +# A month of daily temperatures with a few missing days +# randomize sequence of daily temperatures and missing values to demonstrate consecutive-missing criteria +set.seed(42) +daily_temp <- sample(c(15:25, NA, NA, NA), size = 30, replace = TRUE) + +# Allow up to 3 missing days and no more than 2 consecutive missing days +aggregate_with_criteria(daily_temp, max_missing = 3, max_consecutive = 2) + +# Tigthen the criteria: allow at most 2 missing days and no more than 1 consecutive missing day +aggregate_with_criteria(daily_temp, max_missing = 2, max_consecutive = 1) +``` + +### Convenience wrappers + +`mean_with_criteria()`, `min_with_criteria()`, `max_with_criteria()`, and +`sum_with_criteria()` call `aggregate_with_criteria()` with the appropriate +`fun` argument pre-set: + +```{r convenience-wrappers} +mean_with_criteria(daily_temp, max_missing = 3, max_consecutive = 2) +min_with_criteria(daily_temp, max_missing = 3, max_consecutive = 2) +max_with_criteria(daily_temp, max_missing = 3, max_consecutive = 2) +sum_with_criteria(daily_temp, max_missing = 3, max_consecutive = 2) +``` + +### Applying criteria across groups with `dplyr` + +A common workflow is to compute a monthly aggregate from daily data: + +```{r dplyr-workflow} +set.seed(42) + +daily_data <- tibble( + date = seq.Date(as.Date("2020-01-01"), + as.Date("2020-12-31"), by = "day"), + temperature = runif(366, min = 5, max = 25)) |> + # Introduce ~8 % random missing values + mutate(temperature = ifelse(runif(n()) < 0.08, NA, temperature)) + +monthly_means <- daily_data |> + mutate(year = format(date, "%Y"), + month = format(date, "%m")) |> + group_by(year, month) |> + summarise(mean_temp = mean_with_criteria( + temperature, max_missing = 3, max_consecutive = 2), + .groups = "drop") + +monthly_means +``` + +Months where the missing-data criteria are exceeded will show `NA`, making it +easy to flag them downstream. + +--- + +## Calculating annual anomalies + +`calc_annual_anomaly()` subtracts the mean of a reference period from every +observation. The reference period mean is itself computed with +`mean_with_criteria()`, so the same missing-data safeguards apply. + +```{r anomaly-setup} +set.seed(7) + +# Simulate 50 years of annual mean temperatures +temp_series <- tibble( + year = 1971:2020, + temperature = 12 + cumsum(rnorm(50, mean = 0.03, sd = 0.4))) + +# Define the WMO 1981–2010 climate normal as the reference period +reference_period <- c(1981, 2010) +``` + +```{r anomaly-calc} +temp_series <- temp_series |> + mutate(anomaly = calc_annual_anomaly(temperature, + year, period = reference_period)) + +head(temp_series) +``` + +### Visualising anomalies + +```{r anomaly-plot, fig.width=7, fig.height=4} +library(ggplot2) + +ggplot(temp_series, aes(x = year, y = anomaly, fill = anomaly > 0)) + + geom_col(show.legend = FALSE) + + geom_hline(yintercept = 0, linewidth = 0.4) + + scale_fill_manual(values = c("#0D94A3", "#AE4E51")) + + labs(title = "Annual temperature anomaly", + subtitle = paste0("Relative to ", reference_period[1], "\u2013", + reference_period[2], " mean"), + x = NULL, y = "\u00b0C") + + theme_minimal() +``` + +### Handling missing data in the reference period + +If observations are missing inside the reference period, `calc_annual_anomaly()` +passes `max_missing` and `max_consecutive` to `mean_with_criteria()`. If the +reference mean cannot be calculated the function returns `NA` for every year +and issues a warning: + +```{r anomaly-missing, warning=TRUE} +# Introduce missing values in the reference period +temp_with_gaps <- temp_series$temperature +temp_with_gaps[11:15] <- NA # years 1981–1985 are missing + +anomalies_strict <- calc_annual_anomaly( + x = temp_with_gaps, + year = temp_series$year, + period = reference_period, + max_missing = 0, # zero tolerance for missing baseline data + max_consecutive = 0) + +head(anomalies_strict) + +# Relax the constraint: allow up to 20 % missing in the reference period +anomalies_relaxed <- calc_annual_anomaly( + x = temp_with_gaps, + year = temp_series$year, + period = reference_period, + max_missing = 0.20, + max_consecutive = NULL # no consecutive-missing constraint +) + +head(anomalies_relaxed) +``` + +--- + +## Summary of key arguments + +| Argument | Description | Accepts | +|---|---|---| +| `max_missing` | Maximum allowable missing values | Count (integer) or proportion (0–1) | +| `max_consecutive` | Maximum allowable consecutive missing values | Count (integer) or proportion (0–1) | +| `fun` | Aggregation function (`aggregate_with_criteria` only) | Any function, e.g. `mean`, `sum` | +| `period` | Start and end year of the anomaly baseline | `c(start, end)` or `NULL` for full range | + +Setting a threshold to `NULL` or `1` disables that constraint entirely. diff --git a/vignettes/likelihood.Rmd b/vignettes/likelihood.Rmd new file mode 100644 index 0000000..b39fae5 --- /dev/null +++ b/vignettes/likelihood.Rmd @@ -0,0 +1,201 @@ +--- +title: "Likelihood Estimation" +output: rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{Likelihood Estimation} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +```{r, include = FALSE} +knitr::opts_chunk$set( + collapse = TRUE, + comment = "#>" +) +``` + +```{r setup, message=FALSE, warning=FALSE} +library(er.helpers) +library(dplyr) +library(tibble) +library(ggplot2) +``` + +## Overview + +When communicating the results of statistical trend tests to a non-technical +audience, plain p-values are rarely helpful. `er.helpers` provides functions +to translate p-values into plain-language likelihood categories that align with +two established frameworks: + +- **Statistics New Zealand** (`scale = "statsnz"`) — five categories with + directional wording suited to environmental improvement/worsening language. +- **IPCC** (`scale = "ipcc"`) — nine categories aligned with Intergovernmental + Panel on Climate Change reporting conventions. + +The key functions are: + +| Function | Purpose | +|---|---| +| `get_likelihood_category()` | Classify a p-value into a likelihood term | +| `order_likelihood_levels()` | Return a correctly ordered factor of likelihood terms | +| `simplify_likelihood_levels()` | Collapse detailed categories into broader ones | + +The built-in datasets `statsnz_likelihood_scale` and `ipcc_likelihood_scale` +contain the interval boundaries used by each scale. + +--- + +## The likelihood scales + +```{r scales} +# Statistics NZ scale +statsnz_likelihood_scale + +# IPCC scale +ipcc_likelihood_scale +``` + +--- + +## Classifying p-values + +`get_likelihood_category()` maps a numeric probability to a category string. +The `term_type` argument controls the directional wording: + +| `term_type` | Use case | +|---|---| +| `"worsening-improving"` (default) | High p → worsening (e.g. water quality metrics) | +| `"improving-worsening"` | High p → improving | +| `"increasing-decreasing"` | For climate variables with no value judgement | +| `"likely-unlikely"` | Neutral language | + +```{r classify, warning=FALSE} +p_values <- seq(0, 1, length.out = 11) + +# Water quality example: large p → worsening +get_likelihood_category(p_values, term_type = "worsening-improving") + +# Climate variable: direction without value judgement +get_likelihood_category(p_values, term_type = "increasing-decreasing") + +# Neutral language +get_likelihood_category(p_values, term_type = "likely-unlikely") +``` + +### IPCC scale + +```{r ipcc} +get_likelihood_category(p_values, scale = "ipcc") +``` + +### Using percentage p-values + +If your p-values are expressed as percentages (0–100) rather than probabilities +(0–1), use `p_is = "percentage"`: + +```{r percentage} +p_percent <- p_values * 100 +get_likelihood_category(p_percent, p_is = "percentage") +``` + +--- + +## Ordering factors for plotting + +Likelihood categories returned by `get_likelihood_category()` are character +vectors. Use `order_likelihood_levels()` to convert them to an ordered factor +that displays correctly in plots: + +```{r order} +categories <- get_likelihood_category(p_values, +term_type = "increasing-decreasing") + +# As unordered character — levels appear alphabetically +factor(categories) |> levels() + +# Ordered factor — levels follow the scale from least to most likely +order_likelihood_levels(categories) |> levels() +``` + +### Complete trend-analysis workflow + +```{r workflow} +set.seed(42) + +# Simulate annual data for 10 indicator time series +indicator_df <- tibble( + indicator = rep(paste0("I", 1:10), each = 30), + year = rep(1991:2020, times = 10), + value = rnorm(300, mean = rep(runif(10, -0.1, 0.1), each = 30), + sd = 0.5) +) + +# Run Mann-Kendall test for each indicator +trend_results <- indicator_df |> + group_by(indicator) |> + summarise( + mann_kendall(value, alternative = "two.sided"), + .groups = "drop" + ) + +# Classify p-values and order the factor +trend_results <- trend_results |> + mutate( + likelihood = get_likelihood_category(p_value, + term_type = "increasing-decreasing") |> + order_likelihood_levels() + ) + +trend_results |> select(indicator, p_value, likelihood) +``` + +```{r workflow-plot, fig.width=6, fig.height=4} +trend_counts <- trend_results |> + count(likelihood) + +ggplot(trend_counts, aes(x = likelihood, y = n, fill = likelihood)) + + geom_col(show.legend = FALSE) + + scale_fill_manual(values = pal_snz_trend5) + + labs(title = "Distribution of trend likelihoods", + x = NULL, y = "Number of indicators") + + theme_minimal() + + theme(axis.text.x = element_text(angle = 30, hjust = 1)) +``` + +--- + +## Simplifying categories + +When the full five-category scale is too granular for a summary, use +`simplify_likelihood_levels()` to collapse "Likely X" and "Very likely X" +into a single "Likely or very likely X" bucket: + +```{r simplify, warning=FALSE} +detailed <- get_likelihood_category(p_values, + term_type = "increasing-decreasing") |> + order_likelihood_levels() + +levels(detailed) + +simplified <- simplify_likelihood_levels(detailed) +levels(simplified) +``` + +--- + +## Adding likelihood categories to a combined trend table + +A typical reporting workflow chains trend testing, likelihood classification, +and ordering in a single `mutate()` call: + +```{r full-table} +trend_results |> + mutate( + direction = get_likelihood_category(p_value, + term_type = "increasing-decreasing"), + direction = order_likelihood_levels(direction), + simplified = simplify_likelihood_levels(direction) + ) |> + select(indicator, p_value, direction, simplified) +``` diff --git a/vignettes/palettes.Rmd b/vignettes/palettes.Rmd new file mode 100644 index 0000000..517a568 --- /dev/null +++ b/vignettes/palettes.Rmd @@ -0,0 +1,231 @@ +--- +title: "Colour Palettes and Scale Transformations" +output: rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{Colour Palettes and Scale Transformations} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +```{r, include = FALSE} +knitr::opts_chunk$set( + collapse = TRUE, + comment = "#>" +) +``` + +```{r setup, message=FALSE} +library(er.helpers) +library(ggplot2) +library(tibble) +library(dplyr) +``` + +## Overview + +`er.helpers` provides two families of colour palettes tailored for +environmental reporting at Statistics New Zealand: + +| Family | Prefix | Use case | +|---|---|---| +| Statistics NZ web | `pal_snz_*` | StatsNZ website publications | +| EA19 report | `pal_ea19_*` | Environment Aotearoa 2019 print report | +| Map / point | `pal_point_*` | Spatial maps and scatter plots | + +Within each family there are palettes for different situations: + +| Suffix | Purpose | +|---|---| +| *(none)* | Nominal (unordered) categorical variables | +| `_alpha2` | Comparing a current year to one past year | +| `_trend2` | Two-level ordinal trend (e.g. improving / worsening) | +| `_trend3` | Three-level ordinal trend (e.g. improving / indeterminate / worsening) | +| `_trend5` | Five-level ordinal trend | +| `_nztcs_c` | NZ Threat Classification System — categories | +| `_nztcs_s` | NZ Threat Classification System — sub-categories (SNZ only) | + +An additional `signed_sqrt_trans()` scale transformation is useful for +visualising trend magnitudes that span both negative and positive values. + +--- + +## Viewing palettes + +Use `scales::show_col()` to display any palette: + +```{r show-palettes, fig.width=8, fig.height=4} +scales::show_col(pal_snz, borders = NA) +``` + +```{r show-palettes-ea19, fig.width=8, fig.height=4} +scales::show_col(pal_ea19, borders = NA) +``` + +```{r show-palettes-point, fig.width=8, fig.height=4} +scales::show_col(pal_point_set1, borders = NA) +``` + +--- + +## Nominal palettes (unordered categories) + +Use the base `pal_snz` / `pal_ea19` palettes with `scale_fill_manual()` or +`scale_colour_manual()` for unordered categorical variables: + +```{r nominal, fig.width=6, fig.height=4} +set.seed(1) +indicator_data <- tibble( + indicator = paste0("Indicator ", 1:7), + value = runif(7, 50, 150) +) + +ggplot(indicator_data, aes(x = reorder(indicator, value), y = value, + fill = indicator)) + + geom_col(show.legend = FALSE) + + scale_fill_manual(values = pal_snz) + + coord_flip() + + labs(title = "pal_snz — nominal palette", x = NULL, y = "Value") + + theme_minimal() +``` + +--- + +## Trend palettes (ordinal categories) + +Trend palettes are designed to pair with `order_likelihood_levels()` so that +colours align with the direction and strength of a trend. + +### Two levels + +```{r trend2, fig.width=5, fig.height=3} +trend2_df <- tibble( + trend = factor(c("Improving", "Worsening")), + n = c(12, 8) +) + +ggplot(trend2_df, aes(x = trend, y = n, fill = trend)) + + geom_col(show.legend = FALSE) + + scale_fill_manual(values = pal_snz_trend2) + + labs(title = "pal_snz_trend2", x = NULL, y = "Count") + + theme_minimal() +``` + +### Five levels — full likelihood scale + +```{r trend5, fig.width=6, fig.height=4, warning=FALSE} +set.seed(7) +p_values <- runif(50) + +trend5_df <- tibble( + p_value = p_values, + likelihood = get_likelihood_category(p_value, term_type = "increasing-decreasing") |> + order_likelihood_levels() +) |> + count(likelihood) + +ggplot(trend5_df, aes(x = likelihood, y = n, fill = likelihood)) + + geom_col(show.legend = FALSE) + + scale_fill_manual(values = pal_snz_trend5) + + labs(title = "pal_snz_trend5 — five-level trend palette", + x = NULL, y = "Count") + + theme_minimal() + + theme(axis.text.x = element_text(angle = 30, hjust = 1)) +``` + +--- + +## Year-comparison palettes + +`pal_snz_alpha2` and `pal_ea19_alpha2` use a tinted base colour for the +earlier year and the full base colour for the current year: + +```{r alpha2, fig.width=5, fig.height=3} +comparison_df <- tibble( + year = factor(c(2019, 2023), levels = c(2019, 2023)), + value = c(82, 91) +) + +ggplot(comparison_df, aes(x = year, y = value, fill = year)) + + geom_col(show.legend = FALSE, width = 0.5) + + scale_fill_manual(values = pal_snz_alpha2) + + labs(title = "pal_snz_alpha2 — year comparison palette", + x = NULL, y = "Value") + + theme_minimal() +``` + +--- + +## NZ Threat Classification System palettes + +`pal_snz_nztcs_c` (four categories) and `pal_snz_nztcs_s` (nine +sub-categories) are named vectors, so they map automatically to factor levels: + +```{r nztcs, fig.width=6, fig.height=3} +nztcs_df <- tibble( + status = factor(names(pal_snz_nztcs_c), + levels = names(pal_snz_nztcs_c)), + n = c(45, 120, 18, 310) +) + +ggplot(nztcs_df, aes(x = status, y = n, fill = status)) + + geom_col(show.legend = FALSE) + + scale_fill_manual(values = pal_snz_nztcs_c) + + labs(title = "pal_snz_nztcs_c — NZ Threat Classification", + x = NULL, y = "Number of species") + + theme_minimal() + + theme(axis.text.x = element_text(angle = 15, hjust = 1)) +``` + +--- + +## Signed square-root scale transformation + +When a continuous variable spans a wide range of both positive and negative +values, a standard linear scale compresses small values near zero. The +`signed_sqrt_trans()` transformation stretches both tails symmetrically: + +```{r signed-sqrt, fig.width=7, fig.height=4} +set.seed(22) +slopes_df <- tibble( + station = paste0("S", 1:20), + slope = c(rnorm(10, mean = -2, sd = 0.5), + rnorm(10, mean = 8, sd = 3)) +) + +ggplot(slopes_df, aes(x = reorder(station, slope), y = slope, + fill = slope > 0)) + + geom_col(show.legend = FALSE) + + scale_y_continuous(trans = signed_sqrt_trans()) + + scale_fill_manual(values = c("#0D94A3", "#AE4E51")) + + labs(title = "Signed square-root y-axis", + x = NULL, y = "Sen's slope (signed\u221a)") + + theme_minimal() + + theme(axis.text.x = element_text(angle = 45, hjust = 1)) +``` + +--- + +## Quick reference + +```{r quick-ref, echo=FALSE} +tibble::tribble( + ~Object, ~`Colours`, ~`Description`, + "pal_snz", 9L, "Nominal — StatsNZ web", + "pal_snz_alpha2", 2L, "Year comparison — StatsNZ web", + "pal_snz_trend2", 2L, "Trend 2-level — StatsNZ web", + "pal_snz_trend3", 3L, "Trend 3-level — StatsNZ web", + "pal_snz_trend5", 5L, "Trend 5-level — StatsNZ web", + "pal_snz_nztcs_c", 4L, "NZ TCS categories — StatsNZ web", + "pal_snz_nztcs_s", 9L, "NZ TCS sub-categories — StatsNZ web", + "pal_ea19", 9L, "Nominal — EA19 report", + "pal_ea19_alpha2", 2L, "Year comparison — EA19 report", + "pal_ea19_trend2", 2L, "Trend 2-level — EA19 report", + "pal_ea19_trend3", 3L, "Trend 3-level — EA19 report", + "pal_ea19_trend5", 5L, "Trend 5-level — EA19 report", + "pal_ea19_nztcs_c", 4L, "NZ TCS categories — EA19 report", + "pal_point_set1", 9L, "Nominal — maps/points", + "pal_point_trend2", 2L, "Trend 2-level — maps/points", + "pal_point_trend3", 3L, "Trend 3-level — maps/points", + "pal_point_trend5", 5L, "Trend 5-level — maps/points" +) +``` diff --git a/vignettes/precipitation.Rmd b/vignettes/precipitation.Rmd new file mode 100644 index 0000000..4c79de7 --- /dev/null +++ b/vignettes/precipitation.Rmd @@ -0,0 +1,204 @@ +--- +title: "Precipitation Indices" +output: rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{Precipitation Indices} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +```{r, include = FALSE} +knitr::opts_chunk$set( + collapse = TRUE, + comment = "#>" +) +``` + +```{r setup, message=FALSE, warning=FALSE} +library(er.helpers) +library(dplyr) +library(tibble) +library(ggplot2) +``` + +## Overview + +Heavy rainfall events are often characterised by the proportion of total annual +rainfall that falls on the most extreme days. `er.helpers` provides two +functions to calculate this index: + +| Function | Purpose | +|---|---| +| `get_reference_precipitation()` | Compute a percentile threshold from a reference period | +| `precipitation_above_reference()` | Compute the proportion of annual rainfall above that threshold | + +Together they implement the precipitation index commonly reported by the +Intergovernmental Panel on Climate Change (IPCC) and the Expert Team on Climate +Change Detection and Indices (ETCCDI). + +--- + +## Core concepts + +**Reference precipitation** — typically the 95th or 99th percentile of daily +rainfall on wet days during a climate normal (e.g. 1981–2010). Only days +where precipitation ≥ `wet_day_threshold` (default 1 mm) are included. + +**Proportion above reference** — the fraction of total annual wet-day +rainfall that falls on days exceeding the reference threshold. An increase in +this proportion over time indicates that intense rainfall events are becoming +more dominant. + +--- + +## Step 1 — Compute the reference threshold + +`get_reference_precipitation()` returns a single percentile value calculated +from the rainfall data within a specified reference period: + +```{r reference} +set.seed(101) + +# Simulate 20 years of daily rainfall (log-normal, approx. 2 mm/day) +n_days <- 20 * 365 +rainfall <- rlnorm(n_days, meanlog = 0.5, sdlog = 1.0) +years <- rep(2001:2020, each = 365) + +rain_data <- tibble(rainfall = rainfall, year = years) + +# Climate normal: 2001–2010 +climate_normal <- c(2001, 2010) + +# 95th percentile of wet days during the climate normal +ref_95 <- get_reference_precipitation( + precipitation = rain_data$rainfall, + date = rain_data$year, + reference_period = climate_normal, + percentile = 95) + +ref_95 +``` + +When `reference_period = NULL` the entire series is used as the reference. +You can also request a different percentile, such as the 99th: + +```{r reference-99} +ref_99 <- get_reference_precipitation( + precipitation = rain_data$rainfall, + date = rain_data$year, + reference_period = climate_normal, + percentile = 99 +) + +ref_99 +``` + +### Using date objects as the period + +The `date` and `reference_period` arguments can be any comparable type. Numeric +years (as above), `Date`, or `POSIXct` objects all work — just ensure both are +the same type: + +```{r reference-dates, eval=FALSE} +rain_data_dates <- rain_data |> + mutate(date = seq.Date(as.Date("2001-01-01"), + by = "day", + length.out = n())) + +ref_dates <- get_reference_precipitation( + precipitation = rain_data_dates$rainfall, + date = rain_data_dates$date, + reference_period = as.Date(c("2001-01-01", "2010-12-31")) +) +``` + +--- + +## Step 2 — Compute the annual proportion above reference + +After calculating the reference threshold, use `precipitation_above_reference()` +within a grouped summary to obtain the annual index: + +```{r proportion} +annual_index <- rain_data |> + mutate(ref = get_reference_precipitation( + rainfall, year, climate_normal, percentile = 95)) |> + group_by(year) |> + summarise( + prop_above = precipitation_above_reference(rainfall, ref), + .groups = "drop") + +annual_index +``` + +--- + +## Step 3 — Visualise and assess trends + +```{r plot, fig.width=7, fig.height=4} +ggplot(annual_index, aes(x = year, y = prop_above)) + + geom_line(colour = "#085c75") + + geom_point(colour = "#085c75") + + geom_smooth(method = "lm", se = FALSE, colour = "#AE4E51", + linewidth = 0.7, linetype = "dashed") + + scale_y_continuous(labels = scales::percent_format()) + + labs(title = "Proportion of annual rainfall from very wet days", + subtitle = "95th percentile threshold from 2001\u20132010 climate normal", + x = NULL, y = "Proportion of total rainfall") + + theme_minimal() +``` + +Combine with the trend functions from the `trends` vignette to test whether +the index is changing significantly over time: + +```{r trend-test} +annual_index |> + summarise( + mann_kendall(prop_above, alternative = "greater"), + .groups = "drop" + ) +``` + +--- + +## Adjusting the wet-day threshold + +By default, a wet day is defined as any day receiving ≥ 1 mm. You can change +this to match a different standard: + +```{r wet-day} +# Different wet-day thresholds +propn_1mm <- rain_data |> + group_by(year) |> + summarise( + prop = precipitation_above_reference( + rainfall, + get_reference_precipitation(rainfall, year, climate_normal), + wet_day_threshold = 1), + .groups = "drop") + +propn_0mm <- rain_data |> + group_by(year) |> + summarise( + prop = precipitation_above_reference( + rainfall, + get_reference_precipitation(rainfall, year, climate_normal, + wet_day_threshold = 0), + wet_day_threshold = 0), + .groups = "drop") +``` + +Set `wet_day_threshold = 0` to include all days (including dry days) in the +denominator — equivalent to treating all days as wet. + +--- + +## Summary of key arguments + +| Argument | Default | Description | +|---|---|---| +| `precipitation` | — | Numeric vector of daily rainfall values | +| `date` | `NULL` | Corresponding dates or years | +| `reference_period` | `NULL` | Two-element vector defining the climate normal | +| `percentile` | `95L` | Threshold percentile (0–100) | +| `wet_day_threshold` | `1` | Minimum rainfall to count a day as wet (mm) | diff --git a/vignettes/trends.Rmd b/vignettes/trends.Rmd new file mode 100644 index 0000000..302d606 --- /dev/null +++ b/vignettes/trends.Rmd @@ -0,0 +1,222 @@ +--- +title: "Trend Analysis" +output: rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{Trend Analysis} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +```{r, include = FALSE} +knitr::opts_chunk$set( + collapse = TRUE, + comment = "#>" +) +``` + +```{r setup, message=FALSE, warning=FALSE} +library(er.helpers) +library(dplyr) +library(tibble) +library(ggplot2) +``` + +## Overview + +`er.helpers` provides three tidy wrappers for common environmental trend tests. +Each function returns a one-row `tibble` so results integrate naturally with +`group_by()` / `summarise()` workflows. + +| Function | Method | Best for | +|---|---|---| +| `mann_kendall()` | Mann-Kendall test | Non-parametric monotonic trend detection | +| `sen_slope()` | Sen's slope | Non-parametric slope estimation with CI | +| `linear_model()` | OLS linear regression | Parametric slope with $R^2$ | + +All three: +- Accept a numeric vector `x` and an optional time variable `y`. +- Return `NA` results and a warning when `x` contains missing values. +- Include a `note` column that records non-fatal conditions (e.g. < 10 + observations). + +--- + +## Simulating example data + +```{r sim-data} +set.seed(42) +n <- 40 + +# A series with a real upward trend +trend_data <- tibble( + year = 1981:(1980 + n), + value = 10 + 0.15 * (1:n) + rnorm(n, sd = 1.2) +) + +# A flat series (no trend) +flat_data <- tibble( + year = 1981:(1980 + n), + value = 10 + rnorm(n, sd = 1.2) +) +``` + +--- + +## Mann-Kendall trend test + +The Mann-Kendall test is non-parametric and robust to non-normal distributions +and outliers. It tests the null hypothesis of **no monotonic trend**. + +```{r mann-kendall} +mk_result <- mann_kendall(trend_data$value, alternative = "greater") +mk_result +``` + +Key columns in the output: + +| Column | Description | +|---|---| +| `p_value` | p-value for the chosen alternative | +| `tau` | Kendall's τ (strength and direction of trend) | +| `s` | Mann-Kendall S statistic | +| `z` | Standardised test statistic | +| `alternative` | The hypothesis tested | +| `note` | Any non-fatal diagnostic messages | + +The `alternative` argument follows the same convention as `trend::mk.test`: + +- `"greater"` — test for an upward trend (most common for worsening indicators). +- `"less"` — test for a downward trend. +- `"two.sided"` — test for any monotonic trend. + +```{r mk-flat} +# No trend expected +mann_kendall(flat_data$value, alternative = "two.sided") +``` + +--- + +## Sen's slope + +Sen's slope is the median slope across all pairs of observations. It is more +robust to outliers than OLS regression and is typically reported alongside +Mann-Kendall: + +```{r sen-slope} +ss_result <- sen_slope(trend_data$value) +ss_result +``` + +Key columns: + +| Column | Description | +|---|---| +| `slope` | Sen's slope estimate (change per time step) | +| `conf_low` / `conf_high` | Confidence interval for the slope | +| `conf_level` | Confidence level used | +| `p_value` | p-value from the associated Kendall test | + +--- + +## Linear model + +`linear_model()` fits OLS regression and returns a tidy summary including the +slope, confidence interval, $R^2$, and residual standard error. It optionally +accepts a `y` argument for the time axis: + +```{r linear-model} +lm_result <- linear_model(trend_data$value, y = trend_data$year) +lm_result +``` + +When `y` is omitted, observations are assumed to be equally spaced (index 1, 2, +3, …). Passing `Date` or `POSIXct` vectors is also supported: + +```{r linear-model-dates} +date_series <- tibble( + date = seq.Date(as.Date("2000-01-01"), by = "year", length.out = 20), + value = cumsum(rnorm(20, mean = 0.5)) +) + +linear_model(date_series$value, y = date_series$date) +``` + +--- + +## Running multiple trend tests at once + +The one-row-tibble design makes it easy to apply all three methods to many +groups with `group_by()` + `summarise()`: + +```{r multi-group} +set.seed(99) + +many_series <- tibble( + region = rep(c("North", "South", "East", "West"), each = 30), + year = rep(2000:2029, times = 4), + value = c( + 5 + 0.20 * (1:30) + rnorm(30), # North: increasing + 8 - 0.10 * (1:30) + rnorm(30), # South: decreasing + 12 + rnorm(30), # East: flat + 6 + 0.05 * (1:30) + rnorm(30) # West: weak increase + ) +) + +trend_summary <- many_series |> + group_by(region) |> + summarise( + sen_slope(value), + .groups = "drop" + ) |> + mutate( + likelihood = get_likelihood_category(p_value, term_type = "increasing-decreasing") |> + order_likelihood_levels() + ) + +trend_summary |> select(region, p_value, slope, conf_low, conf_high, likelihood) +``` + +--- + +## Handling missing data + +All three functions return `NA` results with a warning when the input contains +`NA` values; the `note` column records this: + +```{r missing} +x_with_na <- trend_data$value +x_with_na[c(5, 10, 15)] <- NA + +mann_kendall(x_with_na) +``` + +Remove missing values before calling the trend functions, or impute them using +the aggregation tools in the `anomaly-and-aggregation` vignette. + +--- + +## Comparing all three methods + +```{r compare, fig.width=7, fig.height=4} +results <- bind_rows( + mann_kendall(trend_data$value) |> mutate(slope = tau) |> select(p_value, slope, method), + sen_slope(trend_data$value) |> select(p_value, slope, method), + linear_model(trend_data$value) |> select(p_value, slope, method) +) + +results + +# Plot the trend line from the linear model +lm_fit <- linear_model(trend_data$value, y = trend_data$year) + +ggplot(trend_data, aes(x = year, y = value)) + + geom_point(colour = "#085c75") + + geom_abline(intercept = lm_fit$intercept, + slope = lm_fit$slope, + colour = "#AE4E51", linewidth = 0.8) + + labs(title = "Annual values with fitted linear trend", + subtitle = paste0("slope = ", round(lm_fit$slope, 3), + ", p = ", signif(lm_fit$p_value, 3)), + x = NULL, y = "Value") + + theme_minimal() +```