The Good, the Bad and the Ugly: how (not) to visualize data

[This article was first published on Shirin's playgRound, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

Below you’ll find the complete code used to create the ggplot2 graphs in my talk The Good, the Bad and the Ugly: how (not) to visualize data at this year’s data2day conference. You can find the German slides here:

You can also find a German blog article accompanying my talk on codecentric’s blog.


If you have questions or would like to talk about this article (or something else data-related), you can now book 15-minute timeslots with me (it’s free – one slot available per weekday):


If you have been enjoying my content and would like to help me be able to create more, please consider sending me a donation at . Thank you! 🙂


library(tidyverse)

library(ggExtra)
library(ragg)
library(ggalluvial)
library(treemapify)
library(ggalt)

library(palmerpenguins)

Dataset

head(penguins)
## # A tibble: 6 x 8
##   species island bill_length_mm bill_depth_mm flipper_length_… body_mass_g sex  
##                                              
## 1 Adelie  Torge…           39.1          18.7              181        3750 male 
## 2 Adelie  Torge…           39.5          17.4              186        3800 fema…
## 3 Adelie  Torge…           40.3          18                195        3250 fema…
## 4 Adelie  Torge…           NA            NA                 NA          NA  
## 5 Adelie  Torge…           36.7          19.3              193        3450 fema…
## 6 Adelie  Torge…           39.3          20.6              190        3650 male 
## # … with 1 more variable: year 
#head(penguins_raw)

Colors

# The palette with grey:
cbp1 <- c("#999999", "#E69F00", "#56B4E9", "#009E73",
          "#F0E442", "#0072B2", "#D55E00", "#CC79A7")

# The palette with black:
cbp2 <- c("#000000", "#E69F00", "#56B4E9", "#009E73",
          "#F0E442", "#0072B2", "#D55E00", "#CC79A7")

library(plotrix)
sliceValues <- rep(10, 8) # each slice value=10 for proportionate slices
(
  p <- pie3D(sliceValues, 
      explode=0, 
      theta = 1.2, 
      col = cbp1, 
      labels = cbp1, 
      labelcex = 0.9,
      shade = 0.6,
      main = "Colorblind\nfriendly palette")
)

## [1] 0.3926991 1.1780972 1.9634954 2.7488936 3.5342917 4.3196899 5.1050881
## [8] 5.8904862
ggplot <- function(...) ggplot2::ggplot(...) + 
  scale_color_manual(values = cbp1) +
  scale_fill_manual(values = cbp1) + # note: needs to be overridden when using continuous color scales
  theme_bw()

Main diagram types

https://rstudio.com/wp-content/uploads/2015/03/ggplot2-cheatsheet.pdf

Pointcharts

penguins %>%
    remove_missing() %>%
    ggplot(aes(x = bill_length_mm, y = flipper_length_mm)) +
    geom_jitter(alpha = 0.5) +
    facet_wrap(vars(species), ncol = 3) +
    scale_x_reverse() +
    scale_y_reverse() +
    labs(x = "Bill length (mm)", 
         y = "Flipper length (mm)",
         size = "body mass (g)",
        title = "Scatterplot", 
        subtitle = "Penguins bill v. flipper length by species",
        caption = "Source: https://github.com/allisonhorst/palmerpenguins")

penguins %>%
    remove_missing() %>%
    ggplot(aes(x = bill_length_mm, y = flipper_length_mm,
              color = species, shape = species)) +
    geom_point(alpha = 0.7) +
    labs(x = "Bill length (mm)", 
         y = "Flipper length (mm)",
        title = "Scatterplot", 
        subtitle = "Penguins bill v. flipper length by species",
        caption = "Source: https://github.com/allisonhorst/palmerpenguins")

  • Jitter with smoothing line
penguins %>%
    remove_missing() %>%
    ggplot(aes(x = bill_length_mm, y = flipper_length_mm,
              color = species, shape = species)) +
    geom_jitter(alpha = 0.5) +
    geom_smooth(method = "loess", se = TRUE) +
    facet_wrap(vars(species), nrow = 3) +
    labs(x = "Bill length (mm)", 
         y = "Flipper length (mm)",
        title = "Scatterplot with smoothing line", 
        subtitle = "Penguins bill v. flipper length by species with loess smoothing line",
        caption = "Source: https://github.com/allisonhorst/palmerpenguins")

penguins %>%
  remove_missing() %>%
  filter(species == "Adelie") %>%
  ggplot(aes(x = bill_length_mm, y = flipper_length_mm)) +
  geom_point(alpha = 0.5) +
  geom_smooth(method = "loess", se = TRUE) +
    labs(x = "Bill length (mm)", 
         y = "Flipper length (mm)",
        title = "Scatterplot with smoothing line", 
        subtitle = "Penguins bill v. flipper length by species with\nloess smoothing line, histogram & density distribution",
        caption = "Source: https://github.com/allisonhorst/palmerpenguins")

#(ggMarginal(p, type = "densigram", fill = "transparent"))

Bubblecharts

penguins %>%
    remove_missing() %>%
    ggplot(aes(x = bill_length_mm, y = flipper_length_mm,
              color = species, shape = species, size = body_mass_g)) +
    geom_point(alpha = 0.5) +
    labs(x = "Bill length (mm)", 
         y = "Flipper length (mm)",
        title = "Bubble plot", 
        size = "body mass (g)",
        subtitle = "Penguins bill v. flipper length by species;\nsize indicates body mass in grams",
        caption = "Source: https://github.com/allisonhorst/palmerpenguins")

Linecharts

penguins %>%
    remove_missing() %>%
    filter(species == "Adelie") %>%
    ggplot(aes(x = bill_length_mm, y = flipper_length_mm,
               color = sex)) +
    geom_line() +
    geom_point() +
    labs(x = "Bill length (mm)", 
         y = "Flipper length (mm)",
        title = "Line plot", 
        subtitle = "Penguins bill v. flipper length by species and sex",
        caption = "Source: https://github.com/allisonhorst/palmerpenguins")

Correlation plots / heatmaps

mat <- penguins %>%
  remove_missing() %>%
  select(bill_depth_mm, bill_length_mm, body_mass_g, flipper_length_mm)

cormat <- round(cor(mat), 2)
cormat[upper.tri(cormat)] <- NA

cormat <- cormat %>%
  as_data_frame() %>%
  mutate(x = colnames(mat)) %>%
  gather(key = "y", value = "value", bill_depth_mm:flipper_length_mm)

cormat %>%
    remove_missing() %>%
    arrange(x, y) %>%
    ggplot(aes(x = x, y = y, fill = value)) + 
    geom_tile() +
    scale_fill_gradient2(low = "blue", high = "red", mid = "white", 
     midpoint = 0, limit = c(-1,1), space = "Lab", 
     name = "Pearson\nCorrelation") +
    theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
    coord_fixed() +
      labs(x = "", 
           y = "",
          title = "Correlation heatmap", 
          subtitle = "Correlation btw. penguins' traits",
          caption = "Source: https://github.com/allisonhorst/palmerpenguins")

Barcharts

  • per default: counts
penguins %>%
    remove_missing() %>%
    ggplot(aes(x = species,
               fill = sex)) +
    geom_bar() +
      labs(x = "Species", 
           y = "Counts",
          title = "Barchart", 
          subtitle = "Counts of male & female penguins per species in study",
          caption = "Source: https://github.com/allisonhorst/palmerpenguins")

penguins %>%
    remove_missing() %>%
    ggplot(aes(x = species,
               fill = sex)) +
    geom_bar(position = 'dodge') +
      labs(x = "Species", 
           y = "Counts",
          title = "Barchart", 
          subtitle = "Counts of male & female penguins per species in study",
          caption = "Source: https://github.com/allisonhorst/palmerpenguins")

  • alternative: set y-values
penguins %>%
    remove_missing() %>%
    group_by(species, sex) %>%
    summarise(mean_bmg = mean(body_mass_g),
              sd_bmg = sd(body_mass_g)) %>%
    ggplot(aes(x = species, y = mean_bmg,
               fill = sex)) +
    geom_bar(stat = "identity", position = "dodge") +
    geom_errorbar(aes(ymin = mean_bmg - sd_bmg, 
                      ymax = mean_bmg + sd_bmg), 
                  width = 0.2,
                 position = position_dodge(0.9)) +
      labs(x = "Species", 
           y = "Mean body mass (in g)",
          title = "Barchart", 
          subtitle = "Mean body mass of male & female penguins per species\nwith standard deviation",
          caption = "Source: https://github.com/allisonhorst/palmerpenguins")

Boxplots

penguins %>%
    remove_missing() %>%
    ggplot(aes(x = species, y = body_mass_g,
               fill = sex)) +
    geom_boxplot() +
      labs(x = "Species", 
           y = "Body mass (in g)",
          title = "Boxplot", 
          subtitle = "Body mass of three penguin species per sex",
          caption = "Source: https://github.com/allisonhorst/palmerpenguins")

  • with points
penguins %>%
    remove_missing() %>%
    ggplot(aes(x = species, y = body_mass_g,
               fill = sex, color = sex)) +
    geom_boxplot(alpha = 0.5, notch = TRUE) +
    geom_jitter(alpha = 0.5, position=position_jitter(0.3)) +
      labs(x = "Species", 
           y = "Body mass (in g)",
          title = "Boxplot with points (dotplot)", 
          subtitle = "Body mass of three penguin species per sex",
          caption = "Source: https://github.com/allisonhorst/palmerpenguins")

Violinplots

penguins %>%
    remove_missing() %>%
    ggplot(aes(x = species, y = body_mass_g,
               fill = sex)) +
    geom_violin(scale = "area") +
      labs(x = "Species", 
           y = "Body mass (in g)",
          title = "Violinplot", 
          subtitle = "Body mass of three penguin species per sex",
          caption = "Source: https://github.com/allisonhorst/palmerpenguins")

  • with dots (sina-plots)
penguins %>%
    remove_missing() %>%
    ggplot(aes(x = species, y = body_mass_g,
               fill = sex, color = sex)) +
    geom_dotplot(method = "dotdensity", alpha = 0.7,
                 binaxis = 'y', stackdir = 'center',
                 position = position_dodge(1)) +
      labs(x = "Species", 
           y = "Body mass (in g)",
          title = "Violinplot with points (dotplot)", 
          subtitle = "Body mass of three penguin species per sex",
          caption = "Source: https://github.com/allisonhorst/palmerpenguins")

Piecharts

penguins %>%
    remove_missing() %>%
    group_by(species, sex) %>%
    summarise(n = n()) %>%
    mutate(freq = n / sum(n),
           percentage = freq * 100) %>%
    ggplot(aes(x = "", y = percentage,
               fill = sex)) +
    facet_wrap(vars(species), nrow = 1) +
    geom_bar(stat = "identity", alpha = 0.8) +
    coord_polar("y", start = 0) +
      labs(x = "", 
           y = "Percentage",
          title = "Piechart", 
          subtitle = "Percentage of male v. female penguins per species in study",
          caption = "Source: https://github.com/allisonhorst/palmerpenguins")

Alluvial charts

as.data.frame(UCBAdmissions) %>%
    ggplot(aes(y = Freq, axis1 = Gender, axis2 = Dept)) +
    geom_alluvium(aes(fill = Admit), width = 1/12) +
    geom_stratum(width = 1/12, fill = "black", color = "grey") +
    geom_label(stat = "stratum", aes(label = after_stat(stratum))) +
    scale_x_discrete(limits = c("Gender", "Dept"), expand = c(.05, .05)) +
      labs(x = "", 
           y = "Frequency",
          title = "Alluvial chart", 
          subtitle = "UC Berkeley admissions and rejections, by sex and department",
          caption = "Source: Bickel et al. (1975)\nSex bias in graduate admissions: Data from Berkeley. Science, 187, 398–403.")

Treemaps

as.data.frame(UCBAdmissions) %>%
    group_by(Admit, Gender) %>%
    summarise(sum_freq = sum(Freq)) %>%
    ggplot(aes(area = sum_freq, fill = sum_freq, label = Gender, 
               subgroup = Admit)) +
    geom_treemap() +
    geom_treemap_subgroup_border() +
    geom_treemap_subgroup_text(place = "centre", grow = T, alpha = 0.5, colour =
                             "black", fontface = "italic", min.size = 0) +
    geom_treemap_text(colour = "white", place = "centre", reflow = T) +
    scale_fill_gradient2(low = "#999999", high = "#E69F00", mid = "white", midpoint = 1000, space = "Lab", 
     name = "Sum of\nfrequencies") +
      labs(x = "", 
           y = "",
          title = "Treemap", 
          subtitle = "UC Berkeley admissions and rejections by sex",
          caption = "Source: Bickel et al. (1975)\nSex bias in graduate admissions: Data from Berkeley. Science, 187, 398–403.")

Dumbbell plots

penguins %>%
    remove_missing() %>%
    group_by(year, species, sex) %>%
    summarise(mean_bmg = mean(body_mass_g)) %>%
    mutate(species_sex = paste(species, sex, sep = "_"),
         year = paste0("year_", year)) %>%
    spread(year, mean_bmg) %>%
    ggplot(aes(x = year_2007, xend = year_2009, 
               y = reorder(species_sex, year_2009))) +
    geom_dumbbell(color = "#999999", 
                      size_x = 3, 
                      size_xend = 3,
                      #Note: there is no US:'color' for UK:'colour' 
                      # in geom_dumbbel unlike standard geoms in ggplot()
                      colour_x = "#999999",
                      colour_xend = "#E69F00") +
      labs(x = "Body mass (g)", 
           y = "Species & sex",
          title = "Dumbbell plot", 
          subtitle = "Penguin's change in body mass from 2007 to 2009",
          caption = "Source: https://github.com/allisonhorst/palmerpenguins")

Slope charts

penguins %>%
    remove_missing() %>%
    group_by(year, species, sex) %>%
    summarise(mean_bmg = mean(body_mass_g)) %>%
    ggplot(aes(x = year, y = mean_bmg, group = sex,
               color = sex)) +
    facet_wrap(vars(species), nrow = 3) +
    geom_line(alpha = 0.6, size = 2) +
    geom_point(alpha = 1, size = 3) +
    scale_x_continuous(breaks=c(2007, 2008, 2009)) +
      labs(x = "Year", 
           y = "Body mass (g)",
           color = "Sex",
          title = "Slope chart", 
          subtitle = "Penguin's change in body mass from 2007 to 2009",
          caption = "Source: https://github.com/allisonhorst/palmerpenguins")

Stacked area charts

penguins %>%
    remove_missing() %>%
    group_by(year, species, sex) %>%
    summarise(mean_bmg = mean(body_mass_g)) %>%
    ggplot(aes(x = year, y = mean_bmg, fill = sex)) +
    facet_wrap(vars(species), nrow = 3) +
    geom_area(alpha = 0.6, size=.5, color = "white") +
    scale_x_continuous(breaks=c(2007, 2008, 2009)) +
      labs(x = "Year", 
           y = "Mean body mass (g)",
           color = "Sex",
          title = "Stacked area chart", 
          subtitle = "Penguin's change in body mass from 2007 to 2009",
          caption = "Source: https://github.com/allisonhorst/palmerpenguins")

Lolliplot chart

penguins %>%
    remove_missing() %>%
    group_by(year, species, sex) %>%
    summarise(mean_bmg = mean(body_mass_g)) %>%
    mutate(species_sex = paste(species, sex, sep = "_"),
         year = paste0("year_", year)) %>%
    spread(year, mean_bmg) %>%
    ggplot() +
    geom_segment(aes(x = reorder(species_sex, -year_2009), xend = reorder(species_sex, -year_2009), 
                   y = 0, yend = year_2009),
                 color = "#999999", size = 1) +
    geom_point(aes(x = reorder(species_sex, -year_2009), y = year_2009),
               size = 4, color = "#E69F00") +
    coord_flip() +
      labs(x = "Species & sex", 
           y = "Body mass (g)",
          title = "Lollipop chart", 
          subtitle = "Penguin's body mass in 2009",
          caption = "Source: https://github.com/allisonhorst/palmerpenguins")

Dendrograms

library(ggdendro)
library(dendextend)
penguins_hist <- penguins %>%
  filter(sex == "male") %>%
  select(species, bill_length_mm, bill_depth_mm, flipper_length_mm, body_mass_g) %>%
  group_by(species) %>% 
  sample_n(10) %>%
  as.data.frame()
rownames(penguins_hist) <- paste(penguins_hist$species, seq_len(nrow(penguins_hist)), sep = "_")

penguins_hist <- penguins_hist %>%
  select(-species) %>%
  remove_missing()
#hc <- hclust(dist(penguins_hist, method = "euclidean"), method = "ward.D2")
#ggdendrogram(hc)

# Create a dendrogram and plot it
penguins_hist %>%  
  scale %>% 
  dist(method = "euclidean") %>%
  hclust(method = "ward.D2") %>% 
  as.dendrogram
## 'dendrogram' with 2 branches and 30 members total, at height 11.94105

Waterfall charts

library(waterfall)
jaquith %>%
    arrange(score) %>%
    add_row(factor = "Total", score = sum(jaquith$score)) %>%
    mutate(factor = factor(factor, levels = factor),
                           id = seq_along(score)) %>%
    mutate(end = cumsum(score),
           start = c(0, end[-length(end)]),
           start = c(start[-length(start)], 0),
           end = c(end[-length(end)], score[length(score)]),
           gr_col = ifelse(factor == "Total", "Total", "Part")) %>%
    ggplot(aes(x = factor, fill = gr_col)) + 
      geom_rect(aes(x = factor,
                    xmin = id - 0.45, xmax = id + 0.45, 
                    ymin = end, ymax = start)) +
      theme(axis.text.x = element_text(angle = 60, vjust = 1, hjust = 1),
            legend.position = "none") +
        labs(x = "", 
             y = "Amount",
            title = "Waterfall chart", 
            subtitle = "Sample business-adjusted risk from Security Metrics",
            caption = "Andrew Jaquith, Security Metrics: Replacing Fear, Uncertainty, and Doubt\n(Boston: Addison-Wesley Professional, 2007), 170-171.")

Biplots

library(ggfortify)
penguins_prep <- penguins %>%
  remove_missing() %>%
  select(bill_length_mm:body_mass_g)

penguins_pca <- penguins_prep %>%
  prcomp(scale. = TRUE)
penguins_km <- penguins_prep %>%
  kmeans(3)
autoplot(penguins_pca, 
                data = penguins %>% remove_missing(), 
                colour = 'species',
                shape = 'species',
                loadings = TRUE, 
                loadings.colour = 'blue',
                loadings.label = TRUE, 
                loadings.label.size = 3) +
      scale_color_manual(values = cbp1) +
  scale_fill_manual(values = cbp1) +
  theme_bw() +
            labs(
            title = "Biplot PCA", 
            caption = "Source: https://github.com/allisonhorst/palmerpenguins")

autoplot(penguins_km, 
                data = penguins %>% remove_missing(), 
                colour = 'species',
                shape = 'species',
                frame = TRUE, frame.type = 'norm') +
      scale_color_manual(values = cbp1) +
  scale_fill_manual(values = cbp1) +
  theme_bw() +
            labs(
            title = "Biplot k-Means clustering", 
            caption = "Source: https://github.com/allisonhorst/palmerpenguins")

Radar charts, aka star chart, aka spider plot

https://www.data-to-viz.com/caveat/spider.html

library(ggiraphExtra)
penguins %>%
    remove_missing() %>%
    select(-island, -year) %>%
    ggRadar(aes(x = c(bill_length_mm, bill_depth_mm, flipper_length_mm, body_mass_g), 
                group = species,
                colour = sex, facet = sex), 
            rescale = TRUE, 
            size = 1, interactive = FALSE, 
            use.label = TRUE) +
     scale_color_manual(values = cbp1) +
  scale_fill_manual(values = cbp1) +
  theme_bw() +
     scale_y_discrete(breaks = NULL) + # don't show ticks
      labs(
          title = "Radar/spider/star chart", 
          subtitle = "Body mass of male & female penguins per species",
          caption = "Source: https://github.com/allisonhorst/palmerpenguins")


devtools::session_info()
## ─ Session info ───────────────────────────────────────────────────────────────
##  setting  value                       
##  version  R version 4.0.2 (2020-06-22)
##  os       macOS Catalina 10.15.7      
##  system   x86_64, darwin17.0          
##  ui       X11                         
##  language (EN)                        
##  collate  en_US.UTF-8                 
##  ctype    en_US.UTF-8                 
##  tz       Europe/Berlin               
##  date     2020-10-20                  
## 
## ─ Packages ───────────────────────────────────────────────────────────────────
##  package        * version date       lib source                           
##  ash              1.0-15  2015-09-01 [1] CRAN (R 4.0.2)                   
##  assertthat       0.2.1   2019-03-21 [1] CRAN (R 4.0.0)                   
##  backports        1.1.10  2020-09-15 [1] CRAN (R 4.0.2)                   
##  blob             1.2.1   2020-01-20 [1] CRAN (R 4.0.2)                   
##  blogdown         0.20.1  2020-09-09 [1] Github (rstudio/[email protected])
##  bookdown         0.20    2020-06-23 [1] CRAN (R 4.0.2)                   
##  broom            0.7.0   2020-07-09 [1] CRAN (R 4.0.2)                   
##  callr            3.4.4   2020-09-07 [1] CRAN (R 4.0.2)                   
##  cellranger       1.1.0   2016-07-27 [1] CRAN (R 4.0.0)                   
##  cli              2.0.2   2020-02-28 [1] CRAN (R 4.0.0)                   
##  colorspace       1.4-1   2019-03-18 [1] CRAN (R 4.0.0)                   
##  crayon           1.3.4   2017-09-16 [1] CRAN (R 4.0.0)                   
##  DBI              1.1.0   2019-12-15 [1] CRAN (R 4.0.0)                   
##  dbplyr           1.4.4   2020-05-27 [1] CRAN (R 4.0.2)                   
##  dendextend     * 1.14.0  2020-08-26 [1] CRAN (R 4.0.2)                   
##  desc             1.2.0   2018-05-01 [1] CRAN (R 4.0.0)                   
##  devtools         2.3.2   2020-09-18 [1] CRAN (R 4.0.2)                   
##  digest           0.6.25  2020-02-23 [1] CRAN (R 4.0.0)                   
##  dplyr          * 1.0.2   2020-08-18 [1] CRAN (R 4.0.2)                   
##  ellipsis         0.3.1   2020-05-15 [1] CRAN (R 4.0.0)                   
##  evaluate         0.14    2019-05-28 [1] CRAN (R 4.0.1)                   
##  extrafont        0.17    2014-12-08 [1] CRAN (R 4.0.2)                   
##  extrafontdb      1.0     2012-06-11 [1] CRAN (R 4.0.2)                   
##  fansi            0.4.1   2020-01-08 [1] CRAN (R 4.0.0)                   
##  farver           2.0.3   2020-01-16 [1] CRAN (R 4.0.0)                   
##  fastmap          1.0.1   2019-10-08 [1] CRAN (R 4.0.0)                   
##  forcats        * 0.5.0   2020-03-01 [1] CRAN (R 4.0.0)                   
##  fs               1.5.0   2020-07-31 [1] CRAN (R 4.0.2)                   
##  gdtools          0.2.2   2020-04-03 [1] CRAN (R 4.0.2)                   
##  generics         0.0.2   2018-11-29 [1] CRAN (R 4.0.0)                   
##  ggalluvial     * 0.12.2  2020-08-30 [1] CRAN (R 4.0.2)                   
##  ggalt          * 0.4.0   2017-02-15 [1] CRAN (R 4.0.2)                   
##  ggdendro       * 0.1.22  2020-09-13 [1] CRAN (R 4.0.2)                   
##  ggExtra        * 0.9     2019-08-27 [1] CRAN (R 4.0.2)                   
##  ggfittext        0.9.0   2020-06-14 [1] CRAN (R 4.0.2)                   
##  ggfortify      * 0.4.10  2020-04-26 [1] CRAN (R 4.0.2)                   
##  ggiraph          0.7.8   2020-07-01 [1] CRAN (R 4.0.2)                   
##  ggiraphExtra   * 0.2.9   2018-07-22 [1] CRAN (R 4.0.2)                   
##  ggplot2        * 3.3.2   2020-06-19 [1] CRAN (R 4.0.2)                   
##  glue             1.4.2   2020-08-27 [1] CRAN (R 4.0.2)                   
##  gridExtra        2.3     2017-09-09 [1] CRAN (R 4.0.2)                   
##  gtable           0.3.0   2019-03-25 [1] CRAN (R 4.0.0)                   
##  haven            2.3.1   2020-06-01 [1] CRAN (R 4.0.2)                   
##  hms              0.5.3   2020-01-08 [1] CRAN (R 4.0.0)                   
##  htmltools        0.5.0   2020-06-16 [1] CRAN (R 4.0.2)                   
##  htmlwidgets      1.5.1   2019-10-08 [1] CRAN (R 4.0.0)                   
##  httpuv           1.5.4   2020-06-06 [1] CRAN (R 4.0.2)                   
##  httr             1.4.2   2020-07-20 [1] CRAN (R 4.0.2)                   
##  insight          0.9.6   2020-09-20 [1] CRAN (R 4.0.2)                   
##  jsonlite         1.7.1   2020-09-07 [1] CRAN (R 4.0.2)                   
##  KernSmooth       2.23-17 2020-04-26 [1] CRAN (R 4.0.2)                   
##  knitr            1.30    2020-09-22 [1] CRAN (R 4.0.2)                   
##  labeling         0.3     2014-08-23 [1] CRAN (R 4.0.0)                   
##  later            1.1.0.1 2020-06-05 [1] CRAN (R 4.0.2)                   
##  lattice        * 0.20-41 2020-04-02 [1] CRAN (R 4.0.2)                   
##  lifecycle        0.2.0   2020-03-06 [1] CRAN (R 4.0.0)                   
##  lubridate        1.7.9   2020-06-08 [1] CRAN (R 4.0.2)                   
##  magrittr         1.5     2014-11-22 [1] CRAN (R 4.0.0)                   
##  maps             3.3.0   2018-04-03 [1] CRAN (R 4.0.2)                   
##  MASS             7.3-53  2020-09-09 [1] CRAN (R 4.0.2)                   
##  Matrix           1.2-18  2019-11-27 [1] CRAN (R 4.0.2)                   
##  memoise          1.1.0   2017-04-21 [1] CRAN (R 4.0.0)                   
##  mgcv             1.8-33  2020-08-27 [1] CRAN (R 4.0.2)                   
##  mime             0.9     2020-02-04 [1] CRAN (R 4.0.0)                   
##  miniUI           0.1.1.1 2018-05-18 [1] CRAN (R 4.0.0)                   
##  modelr           0.1.8   2020-05-19 [1] CRAN (R 4.0.2)                   
##  munsell          0.5.0   2018-06-12 [1] CRAN (R 4.0.0)                   
##  mycor            0.1.1   2018-04-10 [1] CRAN (R 4.0.2)                   
##  nlme             3.1-149 2020-08-23 [1] CRAN (R 4.0.2)                   
##  palmerpenguins * 0.1.0   2020-07-23 [1] CRAN (R 4.0.2)                   
##  pillar           1.4.6   2020-07-10 [1] CRAN (R 4.0.2)                   
##  pkgbuild         1.1.0   2020-07-13 [1] CRAN (R 4.0.2)                   
##  pkgconfig        2.0.3   2019-09-22 [1] CRAN (R 4.0.0)                   
##  pkgload          1.1.0   2020-05-29 [1] CRAN (R 4.0.2)                   
##  plotrix        * 3.7-8   2020-04-16 [1] CRAN (R 4.0.2)                   
##  plyr             1.8.6   2020-03-03 [1] CRAN (R 4.0.0)                   
##  ppcor            1.1     2015-12-03 [1] CRAN (R 4.0.2)                   
##  prettyunits      1.1.1   2020-01-24 [1] CRAN (R 4.0.0)                   
##  processx         3.4.4   2020-09-03 [1] CRAN (R 4.0.2)                   
##  proj4            1.0-10  2020-03-02 [1] CRAN (R 4.0.1)                   
##  promises         1.1.1   2020-06-09 [1] CRAN (R 4.0.2)                   
##  ps               1.3.4   2020-08-11 [1] CRAN (R 4.0.2)                   
##  purrr          * 0.3.4   2020-04-17 [1] CRAN (R 4.0.0)                   
##  R6               2.4.1   2019-11-12 [1] CRAN (R 4.0.0)                   
##  ragg           * 0.3.1   2020-07-03 [1] CRAN (R 4.0.2)                   
##  RColorBrewer     1.1-2   2014-12-07 [1] CRAN (R 4.0.0)                   
##  Rcpp             1.0.5   2020-07-06 [1] CRAN (R 4.0.2)                   
##  readr          * 1.3.1   2018-12-21 [1] CRAN (R 4.0.0)                   
##  readxl           1.3.1   2019-03-13 [1] CRAN (R 4.0.0)                   
##  remotes          2.2.0   2020-07-21 [1] CRAN (R 4.0.2)                   
##  reprex           0.3.0   2019-05-16 [1] CRAN (R 4.0.0)                   
##  reshape2         1.4.4   2020-04-09 [1] CRAN (R 4.0.0)                   
##  rlang            0.4.7   2020-07-09 [1] CRAN (R 4.0.2)                   
##  rmarkdown        2.3     2020-06-18 [1] CRAN (R 4.0.2)                   
##  rprojroot        1.3-2   2018-01-03 [1] CRAN (R 4.0.0)                   
##  rstudioapi       0.11    2020-02-07 [1] CRAN (R 4.0.0)                   
##  Rttf2pt1         1.3.8   2020-01-10 [1] CRAN (R 4.0.2)                   
##  rvest            0.3.6   2020-07-25 [1] CRAN (R 4.0.2)                   
##  scales           1.1.1   2020-05-11 [1] CRAN (R 4.0.0)                   
##  sessioninfo      1.1.1   2018-11-05 [1] CRAN (R 4.0.0)                   
##  shiny            1.5.0   2020-06-23 [1] CRAN (R 4.0.2)                   
##  sjlabelled       1.1.7   2020-09-24 [1] CRAN (R 4.0.2)                   
##  sjmisc           2.8.5   2020-05-28 [1] CRAN (R 4.0.2)                   
##  stringi          1.5.3   2020-09-09 [1] CRAN (R 4.0.2)                   
##  stringr        * 1.4.0   2019-02-10 [1] CRAN (R 4.0.0)                   
##  systemfonts      0.3.2   2020-09-29 [1] CRAN (R 4.0.2)                   
##  testthat         2.3.2   2020-03-02 [1] CRAN (R 4.0.0)                   
##  tibble         * 3.0.3   2020-07-10 [1] CRAN (R 4.0.2)                   
##  tidyr          * 1.1.2   2020-08-27 [1] CRAN (R 4.0.2)                   
##  tidyselect       1.1.0   2020-05-11 [1] CRAN (R 4.0.0)                   
##  tidyverse      * 1.3.0   2019-11-21 [1] CRAN (R 4.0.0)                   
##  treemapify     * 2.5.3   2019-01-30 [1] CRAN (R 4.0.2)                   
##  usethis          1.6.3   2020-09-17 [1] CRAN (R 4.0.2)                   
##  utf8             1.1.4   2018-05-24 [1] CRAN (R 4.0.0)                   
##  uuid             0.1-4   2020-02-26 [1] CRAN (R 4.0.2)                   
##  vctrs            0.3.4   2020-08-29 [1] CRAN (R 4.0.2)                   
##  viridis          0.5.1   2018-03-29 [1] CRAN (R 4.0.2)                   
##  viridisLite      0.3.0   2018-02-01 [1] CRAN (R 4.0.0)                   
##  waterfall      * 1.0.2   2016-04-03 [1] CRAN (R 4.0.2)                   
##  withr            2.3.0   2020-09-22 [1] CRAN (R 4.0.2)                   
##  xfun             0.18    2020-09-29 [1] CRAN (R 4.0.2)                   
##  xml2             1.3.2   2020-04-23 [1] CRAN (R 4.0.0)                   
##  xtable           1.8-4   2019-04-21 [1] CRAN (R 4.0.0)                   
##  yaml             2.2.1   2020-02-01 [1] CRAN (R 4.0.0)                   
## 
## [1] /Library/Frameworks/R.framework/Versions/4.0/Resources/library

To leave a comment for the author, please follow the link and comment on their blog: Shirin's playgRound.

R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

Never miss an update!
Subscribe to R-bloggers to receive
e-mails with the latest R posts.
(You will not see this message again.)

Click here to close (This popup will not appear again)