Rudis’s Solution

Bob Rudis used geom_segment() for creating this beautiful plot:

You can see his R codes here.

My Solution

Instead of using geom_segment() we can use geom_col() for creating the above plot as follows:

# Create data set: 

library(tidyverse)

read.table(text = 'store,closing,total
"Radio Shack",550,1500
"Payless",400,2600
"Rue21",400,1100
"The Limited",250,250
"bebe",180,180
"Wet Seal",170,170
"Crocs",160,560
"JCPenny",138,1000
"American Apparel",110,110
"Kmart",109,735
"hhgregg",88,220
"Sears",41,695', sep = ",", header = TRUE, stringsAsFactors = FALSE) %>% 
  as_tibble() %>% 
  mutate(remaining = total - closing,
         gone = round((closing/total) * 100)/100,
         stay = 1-gone,
         rem_lab = ifelse(remaining == 0, "", scales::comma(remaining))) %>% 
  arrange(desc(stay)) %>% 
  mutate(store = factor(store, levels = store)) -> closing_df


# Prepare data for ploting: 

closing_df %>% 
  select(store, remaining, closing) %>% 
  gather(type, n, -store) %>% 
  full_join(closing_df %>% select(store, stay), by = c("store")) %>% 
  arrange(-stay, store) %>% 
  mutate(store = factor(store, levels = store %>% unique())) -> df_ForPloting


# Make a draft: 

library(hrbrthemes)
my_font <- "Roboto Condensed"

df_ForPloting %>% 
  ggplot(aes(store, -n, fill = type)) + 
  geom_col(position = "fill", width = 0.7) +
  coord_flip() + 
  scale_y_percent() +
  labs(x = NULL, y = NULL, 
       title = "Selected 2017 Store closings (estimated)",
       subtitle = "Smaller specialty chains such as Bebe and American Apparel are closing their stores,\nwhile lareger chains such as J.C. Penny and Sears are scaling back their footprint.") +
  theme_ipsum_rc(grid = "X") +
  theme(legend.position = c(0.875, 1.025)) +
  theme(legend.direction = "horizontal") -> g

# Final plot: 

g + 
  geom_text(data = df_ForPloting %>% filter(type == "closing"), aes(store, -0.98, label = n), color = "white", family = my_font) + 
  geom_text(data = df_ForPloting %>% filter(type == "remaining", n > 0), aes(store, -0.02, label = n), color = "white", family = my_font) + 
  scale_fill_ipsum(name = NULL, labels = c("Closing", "Remaining")) +
  scale_y_continuous(labels = paste0(seq(0, 100, 25), "%"), expand = c(0.002, 0))
LS0tDQp0aXRsZTogIkNyZWF0ZSBCYXIgQ2hhcnQgd2l0aCBEZXNjZW5kaW5nIE9yZGVyIG9mIFByb3BvcnRpb24gYnkgVXNpbmcgZ2VvbV9jb2woKSINCmF1dGhvcjogIk5ndXllbiBDaGkgRHVuZyINCnN1YnRpdGxlOiAiRGFpbHkgR3JhcGggU2VyaWVzIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgICMgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgaGlnaGxpZ2h0OiB6ZW5idXJuDQogICAgdGhlbWU6IGZsYXRseQ0KICAgIHRvYzogeWVzDQogICAgdG9jX2Zsb2F0OiB5ZXMNCiAgd29yZF9kb2N1bWVudDoNCiAgICB0b2M6IHllcw0KLS0tDQoNCmBgYHtyIHNldHVwLGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFLCBmaWcucmV0aW5hPTIpDQpgYGANCg0KIyBSdWRpcydzIFNvbHV0aW9uDQoNCkJvYiBSdWRpcyB1c2VkICoqZ2VvbV9zZWdtZW50KCkqKiBmb3IgY3JlYXRpbmcgdGhpcyBiZWF1dGlmdWwgcGxvdDogDQoNCiFbXShDOlxVc2Vyc1xaYm9va1xEZXNrdG9wXHBpY1xib2IuanBnKQ0KDQpZb3UgY2FuIHNlZSBoaXMgUiBjb2RlcyBbaGVyZV0oaHR0cHM6Ly9ydWQuaXMvYi8yMDE3LzA0LzIxL3NodXR0ZXJpbmctcGllcy13aXRoLXJldGlyaW5nLXN0b3Jlcy8pLiANCg0KIyBNeSBTb2x1dGlvbg0KDQpJbnN0ZWFkIG9mIHVzaW5nIGdlb21fc2VnbWVudCgpIHdlIGNhbiB1c2UgKipnZW9tX2NvbCgpKiogZm9yIGNyZWF0aW5nIHRoZSBhYm92ZSBwbG90IGFzIGZvbGxvd3M6IA0KDQpgYGB7ciwgZXZhbD1GQUxTRX0NCg0KIyBDcmVhdGUgZGF0YSBzZXQ6IA0KDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCg0KcmVhZC50YWJsZSh0ZXh0ID0gJ3N0b3JlLGNsb3NpbmcsdG90YWwNCiJSYWRpbyBTaGFjayIsNTUwLDE1MDANCiJQYXlsZXNzIiw0MDAsMjYwMA0KIlJ1ZTIxIiw0MDAsMTEwMA0KIlRoZSBMaW1pdGVkIiwyNTAsMjUwDQoiYmViZSIsMTgwLDE4MA0KIldldCBTZWFsIiwxNzAsMTcwDQoiQ3JvY3MiLDE2MCw1NjANCiJKQ1Blbm55IiwxMzgsMTAwMA0KIkFtZXJpY2FuIEFwcGFyZWwiLDExMCwxMTANCiJLbWFydCIsMTA5LDczNQ0KImhoZ3JlZ2ciLDg4LDIyMA0KIlNlYXJzIiw0MSw2OTUnLCBzZXAgPSAiLCIsIGhlYWRlciA9IFRSVUUsIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkgJT4lIA0KICBhc190aWJibGUoKSAlPiUgDQogIG11dGF0ZShyZW1haW5pbmcgPSB0b3RhbCAtIGNsb3NpbmcsDQogICAgICAgICBnb25lID0gcm91bmQoKGNsb3NpbmcvdG90YWwpICogMTAwKS8xMDAsDQogICAgICAgICBzdGF5ID0gMS1nb25lLA0KICAgICAgICAgcmVtX2xhYiA9IGlmZWxzZShyZW1haW5pbmcgPT0gMCwgIiIsIHNjYWxlczo6Y29tbWEocmVtYWluaW5nKSkpICU+JSANCiAgYXJyYW5nZShkZXNjKHN0YXkpKSAlPiUgDQogIG11dGF0ZShzdG9yZSA9IGZhY3RvcihzdG9yZSwgbGV2ZWxzID0gc3RvcmUpKSAtPiBjbG9zaW5nX2RmDQoNCg0KIyBQcmVwYXJlIGRhdGEgZm9yIHBsb3Rpbmc6IA0KDQpjbG9zaW5nX2RmICU+JSANCiAgc2VsZWN0KHN0b3JlLCByZW1haW5pbmcsIGNsb3NpbmcpICU+JSANCiAgZ2F0aGVyKHR5cGUsIG4sIC1zdG9yZSkgJT4lIA0KICBmdWxsX2pvaW4oY2xvc2luZ19kZiAlPiUgc2VsZWN0KHN0b3JlLCBzdGF5KSwgYnkgPSBjKCJzdG9yZSIpKSAlPiUgDQogIGFycmFuZ2UoLXN0YXksIHN0b3JlKSAlPiUgDQogIG11dGF0ZShzdG9yZSA9IGZhY3RvcihzdG9yZSwgbGV2ZWxzID0gc3RvcmUgJT4lIHVuaXF1ZSgpKSkgLT4gZGZfRm9yUGxvdGluZw0KDQoNCiMgTWFrZSBhIGRyYWZ0OiANCg0KbGlicmFyeShocmJydGhlbWVzKQ0KbXlfZm9udCA8LSAiUm9ib3RvIENvbmRlbnNlZCINCg0KZGZfRm9yUGxvdGluZyAlPiUgDQogIGdncGxvdChhZXMoc3RvcmUsIC1uLCBmaWxsID0gdHlwZSkpICsgDQogIGdlb21fY29sKHBvc2l0aW9uID0gImZpbGwiLCB3aWR0aCA9IDAuNykgKw0KICBjb29yZF9mbGlwKCkgKyANCiAgc2NhbGVfeV9wZXJjZW50KCkgKw0KICBsYWJzKHggPSBOVUxMLCB5ID0gTlVMTCwgDQogICAgICAgdGl0bGUgPSAiU2VsZWN0ZWQgMjAxNyBTdG9yZSBjbG9zaW5ncyAoZXN0aW1hdGVkKSIsDQogICAgICAgc3VidGl0bGUgPSAiU21hbGxlciBzcGVjaWFsdHkgY2hhaW5zIHN1Y2ggYXMgQmViZSBhbmQgQW1lcmljYW4gQXBwYXJlbCBhcmUgY2xvc2luZyB0aGVpciBzdG9yZXMsXG53aGlsZSBsYXJlZ2VyIGNoYWlucyBzdWNoIGFzIEouQy4gUGVubnkgYW5kIFNlYXJzIGFyZSBzY2FsaW5nIGJhY2sgdGhlaXIgZm9vdHByaW50LiIpICsNCiAgdGhlbWVfaXBzdW1fcmMoZ3JpZCA9ICJYIikgKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSBjKDAuODc1LCAxLjAyNSkpICsNCiAgdGhlbWUobGVnZW5kLmRpcmVjdGlvbiA9ICJob3Jpem9udGFsIikgLT4gZw0KDQojIEZpbmFsIHBsb3Q6IA0KDQpnICsgDQogIGdlb21fdGV4dChkYXRhID0gZGZfRm9yUGxvdGluZyAlPiUgZmlsdGVyKHR5cGUgPT0gImNsb3NpbmciKSwgYWVzKHN0b3JlLCAtMC45OCwgbGFiZWwgPSBuKSwgY29sb3IgPSAid2hpdGUiLCBmYW1pbHkgPSBteV9mb250KSArIA0KICBnZW9tX3RleHQoZGF0YSA9IGRmX0ZvclBsb3RpbmcgJT4lIGZpbHRlcih0eXBlID09ICJyZW1haW5pbmciLCBuID4gMCksIGFlcyhzdG9yZSwgLTAuMDIsIGxhYmVsID0gbiksIGNvbG9yID0gIndoaXRlIiwgZmFtaWx5ID0gbXlfZm9udCkgKyANCiAgc2NhbGVfZmlsbF9pcHN1bShuYW1lID0gTlVMTCwgbGFiZWxzID0gYygiQ2xvc2luZyIsICJSZW1haW5pbmciKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gcGFzdGUwKHNlcSgwLCAxMDAsIDI1KSwgIiUiKSwgZXhwYW5kID0gYygwLjAwMiwgMCkpDQogIA0KYGBgDQoNCg0KDQoNCg==