I recently saw this graph I thought it would be a good exercise to try and reproduce a similar graph from online-available data (graph source: J.-M. Jancovici):

Of course, it would be too easy if we could find the actual data in the correct format…

Here, we will try reproducing the following graphs from CO2_emission.csv, energy-use-per-capita.csv, country-and-continent.csv and tot_population.csv (sources: CO2, Energy, Population, countries and continents).

You can get help on dataset merging here.

Data wrangling

  • Load the different datasets in tibbles named CO2, continent, pop and energy
    • In the case of continent, we care only about the 1st and 5th columns, respectively “Continent”, and “Code”
  • Make sure all tibbles are tidy, and that the column types (double, character…) are set correctly.
  • Merge all tibbles into a single one using inner_join
  • We are only interested in the columns ‘Code’, ‘Year’, ‘CO2’, ‘Continent’, ‘Energy’, ‘Country’ and ‘Population’. This tibble should look like the tibble printed below
  • Create a vector of the countries you are interested in (e.g. EU…)
  • Create a tibble ave containing the averaged CO2 emission, Energy consumption and Population for each country of this group of countries
## # A tibble: 5,990 x 7
##    Code   Year   CO2 Continent Energy Country Population
##    <chr> <dbl> <dbl> <chr>      <dbl> <chr>        <dbl>
##  1 ALB    1971  1.99 Europe     9131. Albania    2187853
##  2 ALB    1972  2.52 Europe    10067. Albania    2243126
##  3 ALB    1973  2.30 Europe     8870. Albania    2296752
##  4 ALB    1974  1.85 Europe     9036. Albania    2350124
##  5 ALB    1975  1.91 Europe     9617. Albania    2404831
##  6 ALB    1976  2.01 Europe    10362. Albania    2458526
##  7 ALB    1977  2.28 Europe    10743. Albania    2513546
##  8 ALB    1978  2.53 Europe    11756. Albania    2566266
##  9 ALB    1979  2.90 Europe    10051. Albania    2617832
## 10 ALB    1980  1.94 Europe    13369. Albania    2671997
## # … with 5,980 more rows

Plotting

  • Try reproducing the following plots. The following graphs are for countries within the EU (as of 2019). Make it for the continent of your origin.
    • Don’t bother with the text labels first
    • Try adding them using the library ggrepel

LS0tCnRpdGxlIDogIlIgRXhlcmNpc2VzIC0gQ08yIGVtaXNzaW9ucyIKZGF0ZSAgOiAiYHIgU3lzLkRhdGUoKWAiCm91dHB1dDogCiAgICBodG1sX2RvY3VtZW50OgogICAgICAgIHRvYyAgICAgICAgICAgIDogeWVzCiAgICAgICAgdG9jX2Zsb2F0ICAgICAgOiB5ZXMKICAgICAgICB0b2NfZGVwdGggICAgICA6IDQKICAgICAgICBoaWdobGlnaHQgICAgICA6IHRhbmdvCiAgICAgICAgbnVtYmVyX3NlY3Rpb25zOiBmYWxzZQogICAgICAgIGNvZGVfZG93bmxvYWQgIDogdHJ1ZQpwYXJhbXM6IAogICAgc29sdXRpb246CiAgICAgICAgdmFsdWU6IHRydWUKLS0tCgoKCkkgcmVjZW50bHkgc2F3IHRoaXMgZ3JhcGggSSB0aG91Z2h0IGl0IHdvdWxkIGJlIGEgZ29vZCBleGVyY2lzZSB0byB0cnkgYW5kIHJlcHJvZHVjZSBhIHNpbWlsYXIgZ3JhcGggZnJvbSBvbmxpbmUtYXZhaWxhYmxlIGRhdGEgKGdyYXBoIHNvdXJjZTogW0ouLU0uIEphbmNvdmljaV0oaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL2plYW5tYXJjLmphbmNvdmljaS9waG90b3MvYS4xNTM1OTM3NjcyODAvMTAxNTg1MzQ0NTM2NDcyODEvP3R5cGU9MykpOgoKIVtdKERhdGEvamFuY28uanBnKQoKT2YgY291cnNlLCBpdCB3b3VsZCBiZSB0b28gZWFzeSBpZiB3ZSBjb3VsZCBmaW5kIHRoZSBhY3R1YWwgZGF0YSBpbiB0aGUgY29ycmVjdCBmb3JtYXQuLi4KCkhlcmUsIHdlIHdpbGwgdHJ5IHJlcHJvZHVjaW5nIHRoZSBmb2xsb3dpbmcgZ3JhcGhzIGZyb20gPGEgaHJlZj0iRGF0YS9DTzJfZW1pc3Npb24uY3N2IiBkb3dubG9hZCB0YXJnZXQ9Il9ibGFuayI+Q08yX2VtaXNzaW9uLmNzdjwvYT4sIDxhIGhyZWY9IkRhdGEvZW5lcmd5LXVzZS1wZXItY2FwaXRhLmNzdiIgZG93bmxvYWQgdGFyZ2V0PSJfYmxhbmsiPmVuZXJneS11c2UtcGVyLWNhcGl0YS5jc3Y8L2E+LCA8YSBocmVmPSJEYXRhL2NvdW50cnktYW5kLWNvbnRpbmVudC5jc3YiIGRvd25sb2FkIHRhcmdldD0iX2JsYW5rIj5jb3VudHJ5LWFuZC1jb250aW5lbnQuY3N2PC9hPiBhbmQgPGEgaHJlZj0iRGF0YS90b3RfcG9wdWxhdGlvbi5jc3YiIGRvd25sb2FkIHRhcmdldD0iX2JsYW5rIj50b3RfcG9wdWxhdGlvbi5jc3Y8L2E+IChzb3VyY2VzOiBbQ08yXShodHRwczovL2RhdGFiYW5rLndvcmxkYmFuay5vcmcvcmVwb3J0cy5hc3B4P3NvdXJjZT0yJnNlcmllcz1FTi5BVE0uQ08yRS5QQyZjb3VudHJ5PSMpLCBbRW5lcmd5XShodHRwczovL291cndvcmxkaW5kYXRhLm9yZy9lbmVyZ3ktcHJvZHVjdGlvbi1hbmQtY2hhbmdpbmctZW5lcmd5LXNvdXJjZXMjcGVyLWNhcGl0YS1lbGVjdHJpY2l0eS1jb25zdW1wdGlvbiksIFtQb3B1bGF0aW9uXShodHRwczovL2dpdGh1Yi5jb20vZGF0YXNldHMvcG9wdWxhdGlvbi9ibG9iL21hc3Rlci9kYXRhL3BvcHVsYXRpb24uY3N2KSwgW2NvdW50cmllcyBhbmQgY29udGluZW50c10oaHR0cHM6Ly9kYXRhaHViLmlvL0pvaG5Tbm93TGFicy9jb3VudHJ5LWFuZC1jb250aW5lbnQtY29kZXMtbGlzdCkpLgoKWW91IGNhbiBnZXQgaGVscCBvbiBkYXRhc2V0IG1lcmdpbmcgW2hlcmVdKGh0dHBzOi8vcnB1YnMuY29tL2JyYWRsZXlib2VobWtlL2RhdGFfd3JhbmdsaW5nKS4KCiMgRGF0YSB3cmFuZ2xpbmcKCi0gTG9hZCB0aGUgZGlmZmVyZW50IGRhdGFzZXRzIGluIHRpYmJsZXMgbmFtZWQgYENPMmAsIGBjb250aW5lbnRgLCBgcG9wYCBhbmQgYGVuZXJneWAKICAgICsgSW4gdGhlIGNhc2Ugb2YgYGNvbnRpbmVudGAsIHdlIGNhcmUgb25seSBhYm91dCB0aGUgMXN0IGFuZCA1dGggY29sdW1ucywgcmVzcGVjdGl2ZWx5ICJDb250aW5lbnQiLCBhbmQgIkNvZGUiCi0gTWFrZSBzdXJlIGFsbCB0aWJibGVzIGFyZSB0aWR5LCBhbmQgdGhhdCB0aGUgY29sdW1uIHR5cGVzIChkb3VibGUsIGNoYXJhY3Rlci4uLikgYXJlIHNldCBjb3JyZWN0bHkuCi0gTWVyZ2UgYWxsIHRpYmJsZXMgaW50byBhIHNpbmdsZSBvbmUgdXNpbmcgYGlubmVyX2pvaW5gCi0gV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgY29sdW1ucyAnQ29kZScsICdZZWFyJywgJ0NPMicsICdDb250aW5lbnQnLCAnRW5lcmd5JywgJ0NvdW50cnknIGFuZCAnUG9wdWxhdGlvbicuIFRoaXMgdGliYmxlIHNob3VsZCBsb29rIGxpa2UgdGhlIHRpYmJsZSBwcmludGVkIGJlbG93Ci0gQ3JlYXRlIGEgdmVjdG9yIG9mIHRoZSBjb3VudHJpZXMgeW91IGFyZSBpbnRlcmVzdGVkIGluIChlLmcuIEVVLi4uKQotIENyZWF0ZSBhIHRpYmJsZSBgYXZlYCBjb250YWluaW5nIHRoZSBhdmVyYWdlZCBDTzIgZW1pc3Npb24sIEVuZXJneSBjb25zdW1wdGlvbiBhbmQgUG9wdWxhdGlvbiBmb3IgZWFjaCBjb3VudHJ5IG9mIHRoaXMgZ3JvdXAgb2YgY291bnRyaWVzCgpgYGB7ciBlY2hvPXBhcmFtcyRzb2x1dGlvbiwgd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlPUZBTFNFLCBjYWNoZT1GQUxTRX0KbGlicmFyeSh0aWR5dmVyc2UpCiMgQ08yIGRhdGEKQ08yIDwtIHJlYWRfY3N2KCJEYXRhL0NPMl9lbWlzc2lvbi5jc3YiLCBuYT0iLi4iKVssLWMoMSwyKV0KbmFtZXMoQ08yKSA8LSBjKCJDb3VudHJ5IiwiQ29kZSIsMTk2MDoyMDE4KQpDTzIgPC0gQ08yICU+JSBwaXZvdF9sb25nZXIoY29scz0iMTk2MCI6IjIwMTgiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzX3RvPSJZZWFyIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNfdG89IkNPMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc190cmFuc2Zvcm0gPSBsaXN0KFllYXIgPSBhcy5udW1lcmljKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc19kcm9wX25hPVRSVUUpCiMgQXR0cmlidXRlIHRoZSBjb3JyZWN0IGNvbnRpbmVudApjb250aW5lbnQgPC0gcmVhZF9jc3YoIkRhdGEvY291bnRyeS1hbmQtY29udGluZW50LmNzdiIpWyxjKDEsNSldCm5hbWVzKGNvbnRpbmVudCkgPC0gYygiQ29udGluZW50IiwiQ29kZSIpCkNPMiA8LSBpbm5lcl9qb2luKENPMiwgY29udGluZW50KQojIFBvcHVsYXRpb24KcG9wIDwtIHJlYWRfY3N2KCJEYXRhL3RvdF9wb3B1bGF0aW9uLmNzdiIsIG5hPSIuLiIpCm5hbWVzKHBvcCkgPC0gYygiQ291bnRyeSIsIkNvZGUiLCJZZWFyIiwiUG9wdWxhdGlvbiIpCiMgRW5lcmd5IGRhdGEKZW5lcmd5IDwtIHJlYWRfY3N2KCJEYXRhL2VuZXJneS11c2UtcGVyLWNhcGl0YS5jc3YiKQpuYW1lcyhlbmVyZ3kpIDwtIGMoIkNvdW50cnkiLCAiQ29kZSIsICJZZWFyIiwgIkVuZXJneSIpCiMgTWVyZ2UgZGF0YQpERiA8LSBDTzIKREYgPC0gaW5uZXJfam9pbihERiwgZW5lcmd5LCBieT1jKCJDb2RlIiwiWWVhciIpKQpERiA8LSBpbm5lcl9qb2luKERGLCBwb3AsIGJ5PWMoIkNvZGUiLCJZZWFyIikpCkRGIDwtIERGICU+JSBzZWxlY3QoLUNvdW50cnkueCwgLUNvdW50cnkueSkKREYKIyBFVSBjb3VudHJpZXMKRVUgPC0gYygiQXVzdHJpYSIsIkl0YWx5IiwiQmVsZ2l1bSIsIkxhdHZpYSIsIkJ1bGdhcmlhIiwiTGl0aHVhbmlhIiwiQ3JvYXRpYSIsCiAgICAgICAgIkx1eGVtYm91cmciLCJDeXBydXMiLCJNYWx0YSIsIkN6ZWNoaWEiLCJOZXRoZXJsYW5kcyIsIkRlbm1hcmsiLCJQb2xhbmQiLAogICAgICAgICJFc3RvbmlhIiwiUG9ydHVnYWwiLCJGaW5sYW5kIiwiUm9tYW5pYSIsIkZyYW5jZSIsIlNsb3Zha2lhIiwiR2VybWFueSIsCiAgICAgICAgIlNsb3ZlbmlhIiwiR3JlZWNlIiwiU3BhaW4iLCJIdW5nYXJ5IiwiU3dlZGVuIiwiSXJlbGFuZCIsIlVuaXRlZCBLaW5nZG9tIikKIyBBdmVyYWdlZCB2YWx1ZXMgZm9yIHRoZSBwYXN0IDIwIHllYXJzCnRoaXNfeWVhciA8LSBhcy5udW1lcmljKGZvcm1hdChTeXMudGltZSgpLCAnJVknKSkKYXZlIDwtIERGICU+JSBmaWx0ZXIoQ291bnRyeSAlaW4lIEVVICYgWWVhcj49dGhpc195ZWFyLTIwKSAlPiUKICAgICAgICAgZ3JvdXBfYnkoQ291bnRyeSkgJT4lCiAgICAgICAgIHN1bW1hcmlzZShDTzIgICAgICAgID0gbWVhbihDTzIsIG5hLnJtID1UUlVFKSwKICAgICAgICAgICAgICAgICAgIEVuZXJneSAgICAgPSBtZWFuKEVuZXJneSwgbmEucm0gPVRSVUUpLAogICAgICAgICAgICAgICAgICAgUG9wdWxhdGlvbiA9IG1lYW4oUG9wdWxhdGlvbiwgbmEucm0gPVRSVUUpCiAgICAgICAgICAgICAgICAgICApCmBgYAoKCiMgUGxvdHRpbmcKCi0gVHJ5IHJlcHJvZHVjaW5nIHRoZSBmb2xsb3dpbmcgcGxvdHMuIFRoZSBmb2xsb3dpbmcgZ3JhcGhzIGFyZSBmb3IgY291bnRyaWVzIHdpdGhpbiB0aGUgRVUgKGFzIG9mIDIwMTkpLiBNYWtlIGl0IGZvciB0aGUgY29udGluZW50IG9mIHlvdXIgb3JpZ2luLgogICAgKyBEb24ndCBib3RoZXIgd2l0aCB0aGUgdGV4dCBsYWJlbHMgZmlyc3QKICAgICsgVHJ5IGFkZGluZyB0aGVtIHVzaW5nIHRoZSBsaWJyYXJ5IGBnZ3JlcGVsYAoKYGBge3IgZWNobz1wYXJhbXMkc29sdXRpb24sIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZT1GQUxTRSwgY2FjaGU9RkFMU0V9CiMgUGxvdHRpbmcKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KGdncmVwZWwpCnAxIDwtIGdncGxvdChkYXRhPXN1YnNldChERiwgQ291bnRyeSVpbiVFVSksIAogICAgICAgICAgICAgYWVzKHg9RW5lcmd5LCB5PUNPMiwgY29sPUNvdW50cnkpCiAgICAgICAgICAgICkrCiAgICBsaW1zKHk9YygwLDE1KSwgeD1jKDAsODBlMykpKwogICAgc2NhbGVfY29sb3VyX2Rpc2NyZXRlKGd1aWRlID0gRkFMU0UpICsKICAgIGdlb21fcG9pbnQoYWxwaGE9MC4xLCBhZXMoc2l6ZT1Qb3B1bGF0aW9uLzFlNikpKwogICAgc2NhbGVfc2l6ZShuYW1lPSJQb3B1bGF0aW9uIChtaWxsaW9ucykiKSsKICAgIGdlb21fbGFiZWxfcmVwZWwoZGF0YT1hdmUsIHNob3cubGVnZW5kPUZBTFNFLCBzZWdtZW50LnNpemUgID0gMC41LAogICAgICAgICAgICAgIGZvcmNlPTMwLAogICAgICAgICAgICAgIGFlcyh4PUVuZXJneSwgeT1DTzIsIGNvbD1Db3VudHJ5LCBsYWJlbCA9IENvdW50cnkpKSsKICAgIGdlb21fcG9pbnQoZGF0YT1hdmUsIGFscGhhPTAuOSwgCiAgICAgICAgICAgICAgIGFlcyh4PUVuZXJneSwgeT1DTzIsIGNvbD1Db3VudHJ5LCBzaXplPVBvcHVsYXRpb24vMWU2KSkrCiAgICBsYWJzKHg9IkVuZXJneSBjb25zdW1wdGlvbiBba1doL2NhcGl0YV0iLCAKICAgICAgICAgeT0iQ08yIGVtaXNzaW9uIFt0b24vY2FwaXRhXSIpKwogICAgdGhlbWVfYncoKSsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKQpwMiA8LSBnZ3Bsb3QoZGF0YT1zdWJzZXQoREYsIENvdW50cnklaW4lRVUpLCAKICAgICAgICAgICAgIGFlcyh4PUVuZXJneSpQb3B1bGF0aW9uLzFlOSwgeT1DTzIqUG9wdWxhdGlvbi8xZTksIGNvbD1Db3VudHJ5KQogICAgICAgICAgICApKwogICAgbGltcyh5PWMoMCwxKSkrCiAgICBzY2FsZV9jb2xvdXJfZGlzY3JldGUoZ3VpZGUgPSBGQUxTRSkgKwogICAgZ2VvbV9wb2ludChhbHBoYT0wLjEsIGFlcyhzaXplPVBvcHVsYXRpb24vMWU2KSkrCiAgICBzY2FsZV9zaXplKG5hbWU9IlBvcHVsYXRpb24gKG1pbGxpb25zKSIpKwogICAgZ2VvbV9sYWJlbF9yZXBlbChkYXRhPWF2ZSwgc2hvdy5sZWdlbmQ9RkFMU0UsIHNlZ21lbnQuc2l6ZSAgPSAwLjUsCiAgICAgICAgICAgICAgYWVzKHg9RW5lcmd5KlBvcHVsYXRpb24vMWU5LCB5PUNPMipQb3B1bGF0aW9uLzFlOSwgCiAgICAgICAgICAgICAgICAgIGNvbD1Db3VudHJ5LCBsYWJlbD1Db3VudHJ5KSkrCiAgICBnZW9tX3BvaW50KGRhdGE9YXZlLGFscGhhPTAuOSwgCiAgICAgICAgICAgICAgIGFlcyh4PUVuZXJneSpQb3B1bGF0aW9uLzFlOSwgeT1DTzIqUG9wdWxhdGlvbi8xZTksIAogICAgICAgICAgICAgICAgICAgY29sPUNvdW50cnksIHNpemU9UG9wdWxhdGlvbi8xZTYpKSsKICAgIGxhYnMoeD0iVG90YWwgZW5lcmd5IGNvbnN1bXB0aW9uIFtUV2hdIiwKICAgICAgICAgeT0iVG90YWwgQ08yIGVtaXNzaW9uIFtHdG9uXSIpKwogICAgdGhlbWVfYncoKSsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKQpwMQpwMgpgYGA=