All Downloads are FREE. Search and download functionalities are using the official Maven repository.

chartreuse.examples.BahamasPopulation.scala Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2023 Creative Scala
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package chartreuse.examples

import cats.data.NonEmptySeq
import cats.effect.unsafe.implicits.global
import chartreuse.*
import chartreuse.layout.*
import doodle.core.Color
import doodle.core.Point
import doodle.svg.*
import doodle.syntax.all.*

import scala.collection.immutable.ArraySeq
import scala.scalajs.js.annotation.JSExport
import scala.scalajs.js.annotation.JSExportTopLevel

@JSExportTopLevel("BahamasPopulation")
object BahamasPopulation {
  // Population taken from Our World in Data data set at https://ourworldindata.org/population-growth
  val population =
    ArraySeq(
      Point(0, 1148),
      Point(100, 1252),
      Point(200, 1366),
      Point(300, 1490),
      Point(400, 1626),
      Point(500, 1774),
      Point(600, 1935),
      Point(700, 2111),
      Point(800, 2303),
      Point(900, 2513),
      Point(1000, 2741),
      Point(1100, 2990),
      Point(1200, 3262),
      Point(1300, 3559),
      Point(1400, 3882),
      Point(1500, 4235),
      Point(1600, 4620),
      Point(1700, 5040),
      Point(1710, 5535),
      Point(1720, 6077),
      Point(1730, 6673),
      Point(1740, 7327),
      Point(1750, 8046),
      Point(1760, 8835),
      Point(1770, 9701),
      Point(1780, 10652),
      Point(1790, 11696),
      Point(1800, 27350),
      Point(1801, 27350),
      Point(1802, 27350),
      Point(1803, 27350),
      Point(1804, 27350),
      Point(1805, 27350),
      Point(1806, 27350),
      Point(1807, 27350),
      Point(1808, 27350),
      Point(1809, 27350),
      Point(1810, 27350),
      Point(1811, 27350),
      Point(1812, 27350),
      Point(1813, 27350),
      Point(1814, 27350),
      Point(1815, 27350),
      Point(1816, 27350),
      Point(1817, 27350),
      Point(1818, 27350),
      Point(1819, 27354),
      Point(1820, 27363),
      Point(1821, 27376),
      Point(1822, 27393),
      Point(1823, 27414),
      Point(1824, 27436),
      Point(1825, 27457),
      Point(1826, 27479),
      Point(1827, 27500),
      Point(1828, 27522),
      Point(1829, 27543),
      Point(1830, 27565),
      Point(1831, 27587),
      Point(1832, 27608),
      Point(1833, 27630),
      Point(1834, 27651),
      Point(1835, 27673),
      Point(1836, 27695),
      Point(1837, 27716),
      Point(1838, 27738),
      Point(1839, 27760),
      Point(1840, 27782),
      Point(1841, 27803),
      Point(1842, 27825),
      Point(1843, 27847),
      Point(1844, 27869),
      Point(1845, 27891),
      Point(1846, 27912),
      Point(1847, 27934),
      Point(1848, 27956),
      Point(1849, 28100),
      Point(1850, 28369),
      Point(1851, 28820),
      Point(1852, 29403),
      Point(1853, 30124),
      Point(1854, 30861),
      Point(1855, 31617),
      Point(1856, 32391),
      Point(1857, 33184),
      Point(1858, 33996),
      Point(1859, 34745),
      Point(1860, 35428),
      Point(1861, 36041),
      Point(1862, 36583),
      Point(1863, 37049),
      Point(1864, 37521),
      Point(1865, 38000),
      Point(1866, 38484),
      Point(1867, 38974),
      Point(1868, 39470),
      Point(1869, 39983),
      Point(1870, 40512),
      Point(1871, 41059),
      Point(1872, 41623),
      Point(1873, 42204),
      Point(1874, 42794),
      Point(1875, 43392),
      Point(1876, 43998),
      Point(1877, 44612),
      Point(1878, 45235),
      Point(1879, 45835),
      Point(1880, 46411),
      Point(1881, 46962),
      Point(1882, 47489),
      Point(1883, 47989),
      Point(1884, 48495),
      Point(1885, 49006),
      Point(1886, 49522),
      Point(1887, 50043),
      Point(1888, 50570),
      Point(1889, 51134),
      Point(1890, 51736),
      Point(1891, 52378),
      Point(1892, 53060),
      Point(1893, 53782),
      Point(1894, 54515),
      Point(1895, 55257),
      Point(1896, 56010),
      Point(1897, 56772),
      Point(1898, 57544),
      Point(1899, 58230),
      Point(1900, 58828),
      Point(1901, 59335),
      Point(1902, 59751),
      Point(1903, 60072),
      Point(1904, 60394),
      Point(1905, 60718),
      Point(1906, 61044),
      Point(1907, 61371),
      Point(1908, 61700),
      Point(1909, 61917),
      Point(1910, 62021),
      Point(1911, 62013),
      Point(1912, 61891),
      Point(1913, 61655),
      Point(1914, 61420),
      Point(1915, 61186),
      Point(1916, 60953),
      Point(1917, 60720),
      Point(1918, 60387),
      Point(1919, 60270),
      Point(1920, 60371),
      Point(1921, 60692),
      Point(1922, 61233),
      Point(1923, 61998),
      Point(1924, 62772),
      Point(1925, 63555),
      Point(1926, 64348),
      Point(1927, 65152),
      Point(1928, 65965),
      Point(1929, 66810),
      Point(1930, 67687),
      Point(1931, 68598),
      Point(1932, 69542),
      Point(1933, 70521),
      Point(1934, 71513),
      Point(1935, 72520),
      Point(1936, 73540),
      Point(1937, 74575),
      Point(1938, 75625),
      Point(1939, 76504),
      Point(1940, 77209),
      Point(1941, 77738),
      Point(1942, 78088),
      Point(1943, 78256),
      Point(1944, 78425),
      Point(1945, 78593),
      Point(1946, 78762),
      Point(1947, 78932),
      Point(1948, 79101),
      Point(1949, 79993),
      Point(1950, 81651),
      Point(1951, 82915),
      Point(1952, 84605),
      Point(1953, 86752),
      Point(1954, 89364),
      Point(1955, 92458),
      Point(1956, 96021),
      Point(1957, 100016),
      Point(1958, 104423),
      Point(1959, 109247),
      Point(1960, 114512),
      Point(1961, 120227),
      Point(1962, 126320),
      Point(1963, 132655),
      Point(1964, 138798),
      Point(1965, 144862),
      Point(1966, 151343),
      Point(1967, 158210),
      Point(1968, 165469),
      Point(1969, 172761),
      Point(1970, 179149),
      Point(1971, 184447),
      Point(1972, 189194),
      Point(1973, 193577),
      Point(1974, 197771),
      Point(1975, 201900),
      Point(1976, 206106),
      Point(1977, 210540),
      Point(1978, 215032),
      Point(1979, 219437),
      Point(1980, 223761),
      Point(1981, 227971),
      Point(1982, 232184),
      Point(1983, 236595),
      Point(1984, 241176),
      Point(1985, 245945),
      Point(1986, 250815),
      Point(1987, 255626),
      Point(1988, 260458),
      Point(1989, 265505),
      Point(1990, 270690),
      Point(1991, 276072),
      Point(1992, 281982),
      Point(1993, 288172),
      Point(1994, 294006),
      Point(1995, 299567),
      Point(1996, 304944),
      Point(1997, 310183),
      Point(1998, 315410),
      Point(1999, 320282),
      Point(2000, 325033),
      Point(2001, 329639),
      Point(2002, 334015),
      Point(2003, 338505),
      Point(2004, 343097),
      Point(2005, 347815),
      Point(2006, 352672),
      Point(2007, 357678),
      Point(2008, 362807),
      Point(2009, 368064),
      Point(2010, 373277),
      Point(2011, 377956),
      Point(2012, 382073),
      Point(2013, 385660),
      Point(2014, 389137),
      Point(2015, 392707),
      Point(2016, 395986),
      Point(2017, 399027),
      Point(2018, 401911),
      Point(2019, 404563),
      Point(2020, 406478),
      Point(2021, 407920)
    )

  val line =
    Line
      .default[Point]
      .forThemeable(theme =>
        theme
          .withStrokeColor(Themeable.Override(Some(Color.darkBlue)))
          .withStrokeWidth(Themeable.Override(3.0))
      )
  val curve =
    Curve
      .default[Point]
      .forThemeable(theme =>
        theme
          .withStrokeColor(Themeable.Override(Some(Color.lawngreen)))
          .withStrokeWidth(Themeable.Override(7.0))
      )

  val plot =
    Plot(
      NonEmptySeq.of(
        line.toLayer(population).withLabel("Line"),
        curve.toLayer(population).withLabel("Curve")
      )
    )
      .withPlotTitle("Bahamas Population")
      .withYTitle("Estimated Population")
      .withXTitle("Year")
      .withLegend(true)

  @JSExport
  def draw(id: String): Unit =
    plot.draw(640, 480).drawWithFrame(Frame(id))
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy