いずれ気候変動についての書き込みをまとめたいと思いますが、CO2放出量のグラフの描き方をメモしておきます。
データは、DATA HUBの次のページです。
CO2 Emissions from Fossil Fuels since 1751, By Nation
Datahubについては、以前に紹介しました。
Python&R: 総合データサイトDatahubの使用法, R
Datahubの便利なところは、プログラムでデータを取得できるようにPythonやRなどのスクリプトが提供されているところでです。CSVファイルもダウンロードできますが、基本的に、プログラムで解析することを前提としてデータを提供しているところです。
Rについては、JavaScriptのデータを取得する式が書かれていますが、はじめから、tibbleで取得したいので、今回はCSVを読み込みました。
library(tidyverse)
# install the data
df0 <- read_cs.('https://pkgstore.datahub.io/core/co2-fossil-by-nation/fossil-fuel-co2-emissions-by-nation_csv/data/0f04181960a0a896ebaf6d8afb0b71a6/fossil-fuel-co2-emissions-by-nation_csv.csv') df0 # select the data df0 %>%
select(Year, Country, Total) %>%
filter(Year == 2014, Total > 150000) -> df0_selected1
# create a bar plot
p<-ggplot(df0_selected1, aes(x = Country, y=Total, fill=Country)) +
geom_bar(stat = "identity")
p
ggplot2でグラフを描く標準的な式で、簡単に次のようなグラフを作成できました。
しかし、このままではグラフがわかりにくいので、次の点を修正したいです。
日本のことを伝えたいなら、次のようにしてはどうでしょう。
以前描いたことがあるグラフですが、すっかり忘れていて、思い出すのに苦労しました。
- グラフのバーの色を2色にするために、データにmutate()を使ってID列を加えています。ifelse()を使って、「JAPAN」だけ「TRUE」で、他は「FALSE」といれました。この文字列は区別できればなんでもよいです。
- 棒グラフを水平にするのは、「coord_flip()」です。
- 降順に並べるのは、「aes(reorder(列名, 基準にする数値列名)」です。昇順にするのは、「–基準にする数値列名」と、前に「-」をいれます。
- 凡例(はんれい)を削除してgrid線を削除するのに、theme_minimal()+theme(legend . . .)としましたが、もっと簡潔な書き方があるかもしれません。
df0 <- read_cs.('https://pkgstore.datahub.io/core/co2-fossil-by-nation/fossil-fuel-co2-emissions-by-nation_csv/data/0f04181960a0a896ebaf6d8afb0b71a6/fossil-fuel-co2-emissions-by-nation_csv.csv') df0 df0 %>% select(Year, Country, Total) %>% filter(Year == 2014, Total > 150000) %>% mutate(Country, ID = ifelse(Country =="JAPAN", TRUE, FALSE)) -> df0_selected df0_selected p2<-ggplot(df0_selected, aes(reorder(Country, Total), Total, fill=ID)) + geom_bar(stat = "identity") + coord_flip() + scale_fill_manual(values = c("grey90", "dodgerblue")) + annotate("text", x="JAPAN", y =150000, label ="日本", color ="white", size=6, family="HiraKakuPro-W3") + ggtitle("Countries by carbon emission in 2014 (with >150000)") + labs(x="Country", y="emission") + theme_minimal() + theme(legend.position = "none", plot.background = element_blank(), panel.grid.major = element_blank(), panel.grid.minor = element_blank(), panel.border = element_blank()) + theme(plot.title = element_text(size=20, face="bold"), text = element_text(size=20), axis.text.x = element_text(size=18)) p2