Question: Please replicate the Hans Rosling’s visualization as
closely as possible using ggplot. You only need to select one year to
replicate. Try your best to replicate the symbol colors, shapes, sizes,
axes, ticks, labels, text, grids, background colors, background text,
and etc. Of course, it is impossible to replicate everything exactly the
same.
gapminder::gapminder
library(tidyverse)
library(gapminder)
g <- gapminder_2007[order(gapminder_2007$continent, gapminder_2007$gdpPercap), ]
df <- gapminder::gapminder %>%
filter(year == 2007)
gmgraph <- ggplot(data = df) +
geom_point(aes(x = gdpPercap, y = lifeExp,
size = pop,
alpha = 0.5,
fill = continent),
shape = 21) +
scale_y_continuous(breaks = c(0, 10, 20, 30, 40, 50, 60, 70, 80, 90),
limits = c(0, 90)) +
scale_x_continuous(breaks = c(250, 500, 1000, 2000, 4000, 8000, 16000, 32000, 64000, 128000),
labels = c("250", "500", "1000", "2000", "4000", "8000", "16k", "32k", "64k", "128k"),
trans = "log10",
limits = c(-1, 128000)) +
scale_fill_manual(breaks = c("Asia", "Africa", "Americas", "Europe", "Oceania"),
values = c("red", "lightblue", "green", "yellow", "grey")) +
theme(panel.background = element_blank(),
axis.line = element_line(color = "black"),
panel.grid.major = element_line(color = "grey")) +
scale_size(range = c(1,20)) +
xlab("Income") +
ylab("Life Expectancy")
Warning: NaNs produced
gmgraph +
annotate("text", x = 5000, y = 40, label = "2007", size = 50, alpha = 0.2) +
guides(size = "none", alpha = "none")

LS0tDQp0aXRsZTogIkhvbWV3b3JrIDYgQkFOQSA0MTM3Ig0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NClF1ZXN0aW9uOiBQbGVhc2UgcmVwbGljYXRlIHRoZSBIYW5zIFJvc2xpbmfigJlzIHZpc3VhbGl6YXRpb24gYXMgY2xvc2VseSBhcyBwb3NzaWJsZSB1c2luZyBnZ3Bsb3QuIFlvdSBvbmx5IG5lZWQgdG8gc2VsZWN0IG9uZSB5ZWFyIHRvIHJlcGxpY2F0ZS4gVHJ5IHlvdXIgYmVzdCB0byByZXBsaWNhdGUgdGhlIHN5bWJvbCBjb2xvcnMsIHNoYXBlcywgc2l6ZXMsIGF4ZXMsIHRpY2tzLCBsYWJlbHMsIHRleHQsIGdyaWRzLCBiYWNrZ3JvdW5kIGNvbG9ycywgYmFja2dyb3VuZCB0ZXh0LCBhbmQgZXRjLiBPZiBjb3Vyc2UsIGl0IGlzIGltcG9zc2libGUgdG8gcmVwbGljYXRlIGV2ZXJ5dGhpbmcgZXhhY3RseSB0aGUgc2FtZS4gDQoNCmBgYHtyfQ0KZ2FwbWluZGVyOjpnYXBtaW5kZXINCmBgYA0KDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShnYXBtaW5kZXIpDQpgYGANCg0KDQpgYGB7cn0NCg0KZyA8LSBnYXBtaW5kZXJfMjAwN1tvcmRlcihnYXBtaW5kZXJfMjAwNyRjb250aW5lbnQsIGdhcG1pbmRlcl8yMDA3JGdkcFBlcmNhcCksIF0NCg0KZGYgPC0gZ2FwbWluZGVyOjpnYXBtaW5kZXIgJT4lDQogIGZpbHRlcih5ZWFyID09IDIwMDcpDQoNCg0KZ21ncmFwaCA8LSBnZ3Bsb3QoZGF0YSA9IGRmKSArDQogIGdlb21fcG9pbnQoYWVzKHggPSBnZHBQZXJjYXAsIHkgPSBsaWZlRXhwLA0KICAgICAgICAgICAgICAgICBzaXplID0gcG9wLA0KICAgICAgICAgICAgICAgICBhbHBoYSA9IDAuNSwNCiAgICAgICAgICAgICAgICAgZmlsbCA9IGNvbnRpbmVudCksDQogICAgICAgICAgICAgc2hhcGUgPSAyMSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gYygwLCAxMCwgMjAsIDMwLCA0MCwgNTAsIDYwLCA3MCwgODAsIDkwKSwNCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoMCwgOTApKSArDQogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBjKDI1MCwgNTAwLCAxMDAwLCAyMDAwLCA0MDAwLCA4MDAwLCAxNjAwMCwgMzIwMDAsIDY0MDAwLCAxMjgwMDApLA0KICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiMjUwIiwgIjUwMCIsICIxMDAwIiwgIjIwMDAiLCAiNDAwMCIsICI4MDAwIiwgIjE2ayIsICIzMmsiLCAiNjRrIiwgIjEyOGsiKSwNCiAgICAgICAgICAgICAgICAgICAgIHRyYW5zID0gImxvZzEwIiwNCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTEsIDEyODAwMCkpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwoYnJlYWtzID0gYygiQXNpYSIsICJBZnJpY2EiLCAiQW1lcmljYXMiLCAiRXVyb3BlIiwgIk9jZWFuaWEiKSwNCiAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gYygicmVkIiwgImxpZ2h0Ymx1ZSIsICJncmVlbiIsICJ5ZWxsb3ciLCAiZ3JleSIpKSArDQogIHRoZW1lKHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMubGluZSA9IGVsZW1lbnRfbGluZShjb2xvciA9ICJibGFjayIpLA0KICAgICAgICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9saW5lKGNvbG9yID0gImdyZXkiKSkgKw0KICBzY2FsZV9zaXplKHJhbmdlID0gYygxLDIwKSkgKw0KICB4bGFiKCJJbmNvbWUiKSArDQogIHlsYWIoIkxpZmUgRXhwZWN0YW5jeSIpIA0KDQpnbWdyYXBoICsNCiAgYW5ub3RhdGUoInRleHQiLCB4ID0gNTAwMCwgeSA9IDQwLCBsYWJlbCA9ICIyMDA3Iiwgc2l6ZSA9IDUwLCBhbHBoYSA9IDAuMikgKw0KICBndWlkZXMoc2l6ZSA9ICJub25lIiwgYWxwaGEgPSAibm9uZSIpDQoNCmBgYA==