knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.path = "man/figures/README-",
  out.width = "100%",
  warning = FALSE
)

CRAN status Travis-CI Build Status AppVeyor Build Status

About gglorenz

The goal of gglorenz is to plot Lorenz Curves with the blessing of ggplot2.

Installation

# Install the CRAN version
install.packages("gglorenz")

# Install the development version from GitHub:
# install.packages("remotes")
remotes::install_github("jjchern/gglorenz")

Example

Suppose you have a vector with each element representing the amount of income or wealth of an individual, and you are interested in knowing how much of that is produced by the top x% of the population, then the gglorenz::stat_lorenz(desc = TRUE) would make a ggplot2 graph for you.

library(tidyverse)
library(gglorenz)

billionaires

billionaires %>%
    ggplot(aes(TNW)) +
    stat_lorenz(desc = TRUE) +
    coord_fixed() +
    geom_abline(linetype = "dashed") +
    theme_minimal() +
    hrbrthemes::scale_x_percent() +
    hrbrthemes::scale_y_percent() +
    hrbrthemes::theme_ipsum_rc() +
    labs(x = "Cumulative Percentage of the Top 500 Billionaires",
         y = "Cumulative Percentage of Total Net Worth",
         title = "Inequality Among Billionaires",
         caption = "Source: https://www.bloomberg.com/billionaires/ (accessed February 8, 2018)")

billionaires %>%
    filter(Industry %in% c("Technology", "Real Estate")) %>%
    ggplot(aes(x = TNW, colour = Industry)) +
    stat_lorenz(desc = TRUE) +
    coord_fixed() +
    geom_abline(linetype = "dashed") +
    theme_minimal() +
    hrbrthemes::scale_x_percent() +
    hrbrthemes::scale_y_percent() +
    hrbrthemes::theme_ipsum_rc() +
    labs(x = "Cumulative Percentage of Billionaires",
         y = "Cumulative Percentage of Total Net Worth",
         title = "Real Estate is a Relatively Equal Field",
         caption = "Source: https://www.bloomberg.com/billionaires/ (accessed February 8, 2018)")

If you have a data frame with columns indicating the wealth and number of individuals at that level you can use the n aesthetic like so: ggplot(freqdata, aes(x = value, n = freq) + stat_lorenz().

In addition, the annotate_ineq() function allows you to label the chart with inequality statistics such as the Gini coefficient:

billionaires %>%
    ggplot(aes(TNW)) +
    stat_lorenz(desc = TRUE) +
    coord_fixed() +
    geom_abline(linetype = "dashed") +
    theme_minimal() +
    hrbrthemes::scale_x_percent() +
    hrbrthemes::scale_y_percent() +
    hrbrthemes::theme_ipsum_rc() +
    labs(x = "Cumulative Percentage of the Top 500 Billionaires",
         y = "Cumulative Percentage of Total Net Worth",
         title = "Inequality Among Billionaires",
         caption = "Source: https://www.bloomberg.com/billionaires/ (accessed February 8, 2018)") +
    annotate_ineq(billionaires$TNW)

You can also use other geoms such as area or polygon and arranging population in ascending order:

billionaires %>%
    filter(Industry %in% c("Technology", "Real Estate")) %>% 
    add_row(Industry = "Perfect Equality", TNW = 1) %>% 
    ggplot(aes(x = TNW, fill = Industry)) +
    stat_lorenz(geom = "area", alpha = 0.65) +
    coord_fixed() +
    hrbrthemes::scale_x_percent() +
    hrbrthemes::scale_y_percent() +
    hrbrthemes::theme_ipsum_rc() +
    theme(legend.title = element_blank()) +
    labs(x = "Cumulative Percentage of Billionaires",
         y = "Cumulative Percentage of Total Net Worth",
         title = "Real Estate is a Relatively Equal Field",
         caption = "Source: https://www.bloomberg.com/billionaires/ (accessed February 8, 2018)")

billionaires %>%
    filter(Industry %in% c("Technology", "Real Estate")) %>% 
    mutate(Industry = forcats::as_factor(Industry)) %>% 
    ggplot(aes(x = TNW, fill = Industry)) +
    stat_lorenz(geom = "polygon", alpha = 0.65) +
    geom_abline(linetype = "dashed") +
    coord_fixed() +
    hrbrthemes::scale_x_percent() +
    hrbrthemes::scale_y_percent() +
    hrbrthemes::theme_ipsum_rc() +
    theme(legend.title = element_blank()) +
    labs(x = "Cumulative Percentage of Billionaires",
         y = "Cumulative Percentage of Total Net Worth",
         title = "Real Estate is a Relatively Equal Field",
         caption = "Source: https://www.bloomberg.com/billionaires/ (accessed February 8, 2018)")

Acknowledgement

The package came to exist solely because Bob Rudis was generous enough to write a chapter that demystifies ggplot2.



jjchern/gglorenz documentation built on July 14, 2020, 6:24 p.m.