library(dplyr)
library(ggplot2)
library(readxl)
library(dplyr)
library(reshape2)
library(extrafont)
my_font <- "OfficinaSansITC"

# https://dav1d00.wordpress.com/2014/11/16/enjoy-r-how-to-make-a-pareto-chart-using-ggplot2-and-dplyr/


df <- 
  mtcars %>% 
  mutate(region = ifelse(carb %in% c(1,2,3,4),paste('product',carb), 'product 5'))

df <- 
  df %>% 
  group_by(region) %>% 
  summarise(mpg_sum = sum(mpg)) %>% 
  ungroup() %>% 
  arrange(mpg_sum)  %>% 
  as.data.frame() %>% 
  mutate(mpg_cumsum = cumsum(mpg_sum),
         mpg_total = sum(mpg_sum)) %>% 
  mutate(mpg_percent = mpg_cumsum/mpg_total) %>% 
  mutate(mpg_int = seq(1:NROW(.)))

# Define Product
df <- 
  df %>% 
  mutate(region = case_when(region == 'product 1' ~ 'Auto loan',
                             region == 'product 2' ~ 'Car loan',
                             region == 'product 3' ~ 'Business loan',
                             region == 'product 4' ~ 'Home loan',
                             region == 'product 5' ~ 'WC loan'))

# Chart
nr <- nrow(df)
N <- sum(df$mpg_sum)

df_ticks <- data.frame(xtick0 = rep(nr +.55, 11), xtick1 = rep(nr +.59, 11),
                       ytick = seq(0, N, N/10))
y2 <- paste0(seq(0, 100, 10), '%')

ggplot(df, aes(x = reorder(region,mpg_cumsum), y = mpg_sum)) +
  geom_bar(stat="identity", fill = "#23576E", width = 0.5) +
  geom_line(aes(x = mpg_int, y = mpg_cumsum), color = "#8C3F4D") +
  geom_point(aes(x = reorder(region,mpg_cumsum), y = mpg_cumsum), color = "#8C3F4D", pch = 19) +
  scale_y_continuous(breaks=seq(0, N, N/10), limits=c(-.02 * N, N * 1.02)) +
  scale_x_discrete(breaks = df$region) +
  guides(fill = FALSE, color = FALSE) +
  annotate("rect", xmin = nr + .55, xmax = nr + 1, ymin = -.02 * N, ymax = N * 1.02,
           fill = "#EFF2F4") +
  annotate("text", x = nr + .8, y = seq(0, N, N/10), label = y2, size = 3, family="serif") +
  # geom_segment(x = nr + .55, xend = nr + .55, y = -.02 * N, yend = N * 1.02, color = "grey50") +
  # geom_segment(data = df_ticks, aes(x = xtick0, y = ytick, xend = xtick1, yend = ytick)) +
  labs(title = paste0("DOANH S\u00D4\u0301 GIA\u0309I NG\u00C2N THEO SA\u0309N PH\u00C2\u0309M\n (TY\u0309 \u0110\u00D4\u0300NG)"), 
       y = "", 
       x = "",
       subtitle = "Tha\u0301ng ba\u0301o ca\u0301o: 31-12-2018") +
  theme_bw() +
  theme(text = element_text(family = 'serif')) +
  # theme(axis.title = element_text(family = my_font,size = 12)) +
  theme(panel.background = element_blank(), 
        panel.grid = element_blank(),
        axis.ticks = element_blank(),
        # axis.text.x = element_blank(),
        axis.text.x = element_text(size = 12, face = 'bold',angle = 90),
        panel.border = element_blank(),
        plot.margin = unit(c(1,4,1,4), "cm"),
        axis.title = element_text(family = my_font,size = 12),
        text = element_text(family = 'serif')) +
  theme(title = element_text(size = 14),
        plot.subtitle=element_text(size = 12, hjust=1.2, face = 'italic', color="black")) +
  theme(plot.title = element_text(hjust = 0.5,face = 'bold')) +
  theme(plot.background = element_rect(fill = "#EFF2F4", color = NA)) + 
  theme(panel.background = element_rect(fill = "#EFF2F4", color = NA)) +
  theme(legend.background = element_rect(fill = "#EFF2F4", color = NA))

LS0tDQp0aXRsZTogJ1BhcmV0byBjaGFydDogRG9hbmggc+G7kSBnaeG6o2kgbmfDom4gdGhlbyBz4bqjbiBwaOG6qW0nDQphdXRob3I6ICJSQ2hhcnQiDQpkYXRlOiAiTWF5IDI3LCAyMDE5Ig0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50OiANCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgaGlnaGxpZ2h0OiBweWdtZW50cw0KICAgICMgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCiAgICB0aGVtZTogImZsYXRseSINCiAgICB0b2M6IFRSVUUNCiAgICB0b2NfZmxvYXQ6IFRSVUUNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSx3YXJuaW5nID0gRixlcnJvciA9IEYsbWVzc2FnZSA9IEYpDQpgYGANCg0KDQoNCmBgYHtyfQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkocmVzaGFwZTIpDQpsaWJyYXJ5KGV4dHJhZm9udCkNCm15X2ZvbnQgPC0gIk9mZmljaW5hU2Fuc0lUQyINCg0KIyBodHRwczovL2RhdjFkMDAud29yZHByZXNzLmNvbS8yMDE0LzExLzE2L2Vuam95LXItaG93LXRvLW1ha2UtYS1wYXJldG8tY2hhcnQtdXNpbmctZ2dwbG90Mi1hbmQtZHBseXIvDQoNCg0KZGYgPC0gDQogIG10Y2FycyAlPiUgDQogIG11dGF0ZShyZWdpb24gPSBpZmVsc2UoY2FyYiAlaW4lIGMoMSwyLDMsNCkscGFzdGUoJ3Byb2R1Y3QnLGNhcmIpLCAncHJvZHVjdCA1JykpDQoNCmRmIDwtIA0KICBkZiAlPiUgDQogIGdyb3VwX2J5KHJlZ2lvbikgJT4lIA0KICBzdW1tYXJpc2UobXBnX3N1bSA9IHN1bShtcGcpKSAlPiUgDQogIHVuZ3JvdXAoKSAlPiUgDQogIGFycmFuZ2UobXBnX3N1bSkgICU+JSANCiAgYXMuZGF0YS5mcmFtZSgpICU+JSANCiAgbXV0YXRlKG1wZ19jdW1zdW0gPSBjdW1zdW0obXBnX3N1bSksDQogICAgICAgICBtcGdfdG90YWwgPSBzdW0obXBnX3N1bSkpICU+JSANCiAgbXV0YXRlKG1wZ19wZXJjZW50ID0gbXBnX2N1bXN1bS9tcGdfdG90YWwpICU+JSANCiAgbXV0YXRlKG1wZ19pbnQgPSBzZXEoMTpOUk9XKC4pKSkNCg0KIyBEZWZpbmUgUHJvZHVjdA0KZGYgPC0gDQogIGRmICU+JSANCiAgbXV0YXRlKHJlZ2lvbiA9IGNhc2Vfd2hlbihyZWdpb24gPT0gJ3Byb2R1Y3QgMScgfiAnQXV0byBsb2FuJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW9uID09ICdwcm9kdWN0IDInIH4gJ0NhciBsb2FuJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW9uID09ICdwcm9kdWN0IDMnIH4gJ0J1c2luZXNzIGxvYW4nLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpb24gPT0gJ3Byb2R1Y3QgNCcgfiAnSG9tZSBsb2FuJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW9uID09ICdwcm9kdWN0IDUnIH4gJ1dDIGxvYW4nKSkNCg0KIyBDaGFydA0KbnIgPC0gbnJvdyhkZikNCk4gPC0gc3VtKGRmJG1wZ19zdW0pDQoNCmRmX3RpY2tzIDwtIGRhdGEuZnJhbWUoeHRpY2swID0gcmVwKG5yICsuNTUsIDExKSwgeHRpY2sxID0gcmVwKG5yICsuNTksIDExKSwNCiAgICAgICAgICAgICAgICAgICAgICAgeXRpY2sgPSBzZXEoMCwgTiwgTi8xMCkpDQp5MiA8LSBwYXN0ZTAoc2VxKDAsIDEwMCwgMTApLCAnJScpDQoNCmdncGxvdChkZiwgYWVzKHggPSByZW9yZGVyKHJlZ2lvbixtcGdfY3Vtc3VtKSwgeSA9IG1wZ19zdW0pKSArDQogIGdlb21fYmFyKHN0YXQ9ImlkZW50aXR5IiwgZmlsbCA9ICIjMjM1NzZFIiwgd2lkdGggPSAwLjUpICsNCiAgZ2VvbV9saW5lKGFlcyh4ID0gbXBnX2ludCwgeSA9IG1wZ19jdW1zdW0pLCBjb2xvciA9ICIjOEMzRjREIikgKw0KICBnZW9tX3BvaW50KGFlcyh4ID0gcmVvcmRlcihyZWdpb24sbXBnX2N1bXN1bSksIHkgPSBtcGdfY3Vtc3VtKSwgY29sb3IgPSAiIzhDM0Y0RCIsIHBjaCA9IDE5KSArDQogIHNjYWxlX3lfY29udGludW91cyhicmVha3M9c2VxKDAsIE4sIE4vMTApLCBsaW1pdHM9YygtLjAyICogTiwgTiAqIDEuMDIpKSArDQogIHNjYWxlX3hfZGlzY3JldGUoYnJlYWtzID0gZGYkcmVnaW9uKSArDQogIGd1aWRlcyhmaWxsID0gRkFMU0UsIGNvbG9yID0gRkFMU0UpICsNCiAgYW5ub3RhdGUoInJlY3QiLCB4bWluID0gbnIgKyAuNTUsIHhtYXggPSBuciArIDEsIHltaW4gPSAtLjAyICogTiwgeW1heCA9IE4gKiAxLjAyLA0KICAgICAgICAgICBmaWxsID0gIiNFRkYyRjQiKSArDQogIGFubm90YXRlKCJ0ZXh0IiwgeCA9IG5yICsgLjgsIHkgPSBzZXEoMCwgTiwgTi8xMCksIGxhYmVsID0geTIsIHNpemUgPSAzLCBmYW1pbHk9InNlcmlmIikgKw0KICAjIGdlb21fc2VnbWVudCh4ID0gbnIgKyAuNTUsIHhlbmQgPSBuciArIC41NSwgeSA9IC0uMDIgKiBOLCB5ZW5kID0gTiAqIDEuMDIsIGNvbG9yID0gImdyZXk1MCIpICsNCiAgIyBnZW9tX3NlZ21lbnQoZGF0YSA9IGRmX3RpY2tzLCBhZXMoeCA9IHh0aWNrMCwgeSA9IHl0aWNrLCB4ZW5kID0geHRpY2sxLCB5ZW5kID0geXRpY2spKSArDQogIGxhYnModGl0bGUgPSBwYXN0ZTAoIkRPQU5IIFNcdTAwRDRcdTAzMDEgR0lBXHUwMzA5SSBOR1x1MDBDMk4gVEhFTyBTQVx1MDMwOU4gUEhcdTAwQzJcdTAzMDlNXG4gKFRZXHUwMzA5IFx1MDExMFx1MDBENFx1MDMwME5HKSIpLCANCiAgICAgICB5ID0gIiIsIA0KICAgICAgIHggPSAiIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJUaGFcdTAzMDFuZyBiYVx1MDMwMW8gY2FcdTAzMDFvOiAzMS0xMi0yMDE4IikgKw0KICB0aGVtZV9idygpICsNCiAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAnc2VyaWYnKSkgKw0KICAjIHRoZW1lKGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gbXlfZm9udCxzaXplID0gMTIpKSArDQogIHRoZW1lKHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksIA0KICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICAjIGF4aXMudGV4dC54ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsIGZhY2UgPSAnYm9sZCcsYW5nbGUgPSA5MCksDQogICAgICAgIHBhbmVsLmJvcmRlciA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGxvdC5tYXJnaW4gPSB1bml0KGMoMSw0LDEsNCksICJjbSIpLA0KICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KGZhbWlseSA9IG15X2ZvbnQsc2l6ZSA9IDEyKSwNCiAgICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAnc2VyaWYnKSkgKw0KICB0aGVtZSh0aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTQpLA0KICAgICAgICBwbG90LnN1YnRpdGxlPWVsZW1lbnRfdGV4dChzaXplID0gMTIsIGhqdXN0PTEuMiwgZmFjZSA9ICdpdGFsaWMnLCBjb2xvcj0iYmxhY2siKSkgKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LGZhY2UgPSAnYm9sZCcpKSArDQogIHRoZW1lKHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIiNFRkYyRjQiLCBjb2xvciA9IE5BKSkgKyANCiAgdGhlbWUocGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIiNFRkYyRjQiLCBjb2xvciA9IE5BKSkgKw0KICB0aGVtZShsZWdlbmQuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIiNFRkYyRjQiLCBjb2xvciA9IE5BKSkNCg0KYGBgDQoNCg==