library(tidyverse)
library(dlstats)
library(ggrepel)
library(lubridate)

cran_stats gives us downloads per month, so they will be incomplete for the current month. I’ll exclude the current month to account for this.

Here’s a plot function, factored out of a previous copy and paste mess:

plot_em <- function(dl_dat) {
  first_of_this_month <- floor_date(today(), unit = "month")
  
  dl_dat |>
  filter(start < first_of_this_month) |>
  mutate(label = if_else(start == max(start),
                         as.character(package),
                         NA_character_)
         ) |>
  ggplot(aes(
    x = start,
    y = downloads,
    colour = package,
    label = label
  )) +
  geom_smooth(se = FALSE) +
  geom_point() +
  labs(x = "Date", y = "Downloads", colour = "Package") +
  geom_label_repel(na.rm = TRUE, segment.colour = NA) +
  theme(legend.position = "none") +
  scale_x_date(expand = expansion(mult = 0.2)) +
  scale_y_continuous(labels = scales::comma)
}

(Some) mixed models and SEM packages:

pack_stats <-
  cran_stats(c("lme4", "nlme", "sem", "lavaan", "blme", "brms", "rstanarm"))
plot_em(pack_stats)

Same again the log scale:

plot_em(pack_stats) +
scale_y_continuous(labels = scales::comma, trans = "log10")
Scale for 'y' is already present. Adding another scale for 'y', which will
replace the existing scale.

Packages for matching and propensity score weighting:

match_packages <-
  cran_stats(c(
    "Matching",
    "MatchIt",
    "twang",
    "PSweight",
    "cem"
  ))
plot_em(match_packages)

plot_em(match_packages) +
scale_y_continuous(labels = scales::comma, trans = "log10")
Scale for 'y' is already present. Adding another scale for 'y', which will
replace the existing scale.

These packages are all installed as part of the tidyverse, but can also be installed individually.

core_tidyverse_stats <-
  cran_stats(c(
    "ggplot2",
    "dplyr",
    "tidyr",
    "readr",
    "purrr",
    "tibble",
    "stringr",
    "forcats"
  ))
plot_em(core_tidyverse_stats)

LS0tDQp0aXRsZTogIkNSQU4gcGFja2FnZSBwb3B1bGFyaXR5Ig0KYXV0aG9yOiAiQEFuZGlAdGVjaC5sZ2J0Ig0Kb3V0cHV0OiANCiAgaHRtbF9ub3RlYm9vazogDQogICAgY29kZV9mb2xkaW5nOiBub25lDQotLS0NCg0KDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShkbHN0YXRzKQ0KbGlicmFyeShnZ3JlcGVsKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpgYGANCg0KDQpgY3Jhbl9zdGF0c2AgZ2l2ZXMgdXMgZG93bmxvYWRzIHBlciBtb250aCwgc28gdGhleSB3aWxsIGJlIGluY29tcGxldGUgZm9yIHRoZSBjdXJyZW50IG1vbnRoLiBJJ2xsIGV4Y2x1ZGUgdGhlIGN1cnJlbnQgbW9udGggdG8gYWNjb3VudCBmb3IgdGhpcy4NCg0KSGVyZSdzIGEgcGxvdCBmdW5jdGlvbiwgZmFjdG9yZWQgb3V0IG9mIGEgcHJldmlvdXMgY29weSBhbmQgcGFzdGUgbWVzczoNCg0KYGBge3J9DQpwbG90X2VtIDwtIGZ1bmN0aW9uKGRsX2RhdCkgew0KICBmaXJzdF9vZl90aGlzX21vbnRoIDwtIGZsb29yX2RhdGUodG9kYXkoKSwgdW5pdCA9ICJtb250aCIpDQogIA0KICBkbF9kYXQgfD4NCiAgZmlsdGVyKHN0YXJ0IDwgZmlyc3Rfb2ZfdGhpc19tb250aCkgfD4NCiAgbXV0YXRlKGxhYmVsID0gaWZfZWxzZShzdGFydCA9PSBtYXgoc3RhcnQpLA0KICAgICAgICAgICAgICAgICAgICAgICAgIGFzLmNoYXJhY3RlcihwYWNrYWdlKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBOQV9jaGFyYWN0ZXJfKQ0KICAgICAgICAgKSB8Pg0KICBnZ3Bsb3QoYWVzKA0KICAgIHggPSBzdGFydCwNCiAgICB5ID0gZG93bmxvYWRzLA0KICAgIGNvbG91ciA9IHBhY2thZ2UsDQogICAgbGFiZWwgPSBsYWJlbA0KICApKSArDQogIGdlb21fc21vb3RoKHNlID0gRkFMU0UpICsNCiAgZ2VvbV9wb2ludCgpICsNCiAgbGFicyh4ID0gIkRhdGUiLCB5ID0gIkRvd25sb2FkcyIsIGNvbG91ciA9ICJQYWNrYWdlIikgKw0KICBnZW9tX2xhYmVsX3JlcGVsKG5hLnJtID0gVFJVRSwgc2VnbWVudC5jb2xvdXIgPSBOQSkgKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsNCiAgc2NhbGVfeF9kYXRlKGV4cGFuZCA9IGV4cGFuc2lvbihtdWx0ID0gMC4yKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gc2NhbGVzOjpjb21tYSkNCn0NCmBgYA0KDQoNCg0KKFNvbWUpIG1peGVkIG1vZGVscyBhbmQgU0VNIHBhY2thZ2VzOg0KDQpgYGB7cn0NCnBhY2tfc3RhdHMgPC0NCiAgY3Jhbl9zdGF0cyhjKCJsbWU0IiwgIm5sbWUiLCAic2VtIiwgImxhdmFhbiIsICJibG1lIiwgImJybXMiLCAicnN0YW5hcm0iKSkNCmBgYA0KDQoNCmBgYHtyIGRwaSA9IDMwMH0NCnBsb3RfZW0ocGFja19zdGF0cykNCmBgYA0KDQpTYW1lIGFnYWluIHRoZSBsb2cgc2NhbGU6DQoNCmBgYHtyfQ0KcGxvdF9lbShwYWNrX3N0YXRzKSArDQpzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gc2NhbGVzOjpjb21tYSwgdHJhbnMgPSAibG9nMTAiKQ0KYGBgDQoNCg0KDQoNClBhY2thZ2VzIGZvciBtYXRjaGluZyBhbmQgcHJvcGVuc2l0eSBzY29yZSB3ZWlnaHRpbmc6DQoNCmBgYHtyfQ0KbWF0Y2hfcGFja2FnZXMgPC0NCiAgY3Jhbl9zdGF0cyhjKA0KICAgICJNYXRjaGluZyIsDQogICAgIk1hdGNoSXQiLA0KICAgICJ0d2FuZyIsDQogICAgIlBTd2VpZ2h0IiwNCiAgICAiY2VtIg0KICApKQ0KYGBgDQoNCg0KYGBge3J9DQpwbG90X2VtKG1hdGNoX3BhY2thZ2VzKQ0KYGBgDQoNCg0KYGBge3J9DQpwbG90X2VtKG1hdGNoX3BhY2thZ2VzKSArDQpzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gc2NhbGVzOjpjb21tYSwgdHJhbnMgPSAibG9nMTAiKQ0KYGBgDQoNCg0KVGhlc2UgcGFja2FnZXMgYXJlIGFsbCBpbnN0YWxsZWQgYXMgcGFydCBvZiB0aGUgdGlkeXZlcnNlLCBidXQgY2FuIGFsc28gYmUgaW5zdGFsbGVkIGluZGl2aWR1YWxseS4NCg0KDQpgYGB7cn0NCmNvcmVfdGlkeXZlcnNlX3N0YXRzIDwtDQogIGNyYW5fc3RhdHMoYygNCiAgICAiZ2dwbG90MiIsDQogICAgImRwbHlyIiwNCiAgICAidGlkeXIiLA0KICAgICJyZWFkciIsDQogICAgInB1cnJyIiwNCiAgICAidGliYmxlIiwNCiAgICAic3RyaW5nciIsDQogICAgImZvcmNhdHMiDQogICkpDQpgYGANCg0KYGBge3J9DQpwbG90X2VtKGNvcmVfdGlkeXZlcnNlX3N0YXRzKQ0KYGBgDQoNCg0KDQo=