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==