knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.path = "man/figures/README-", out.width = "100%", warning = FALSE )
gglorenz
The goal of gglorenz
is to plot Lorenz Curves with the blessing of ggplot2
.
# Install the CRAN version install.packages("gglorenz") # Install the development version from GitHub: # install.packages("remotes") remotes::install_github("jjchern/gglorenz")
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)")
The package came to exist solely because Bob Rudis was generous enough to write a chapter that demystifies ggplot2
.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.