##この記事について
Slope Graph は、Edward Tufte が30年前に提案した可視化の手法です。棒グラフとかと比べたらあまり人気はないけど、最近人気な本、Storytelling With Data に改めて推奨されていた。その例としては:
Source: http://www.storytellingwithdata.com/
データ可視化ていうと、私あまり難しいことしないので、ぶちゃけほどんと MS Excel でできると思う。Excel はすごい。Storytelling with Data の中のグラフも全部 Excel で作られたていう。
ただの可視化のために、R や Python の code を書くメリットていうと、”再利用”ができるぐらいかな?でも Excel 一回作ったら、データをコピーペーしても再利用できるしね。
けど、 Slope Graph は比較的に新しい(不人気)コンセプトなので、すぐに使えるテンプレートはない!
Excelでもかなり苦労してる。(こちらの記事を参考してください)
このとき、R は頼もしい。
この記事にお世話になったので、Qiitaでまとめたいと思います。
データ
ランキングを比べたいから、このサイトからプログラミング言語の人気度データを参考しました。
結果
この感じのグラフを R で作りたいと思いますー!
R Code
library(ggplot2)
library(scales)
slope_graph <- function(group, data_left, data_right, reverse = FALSE){
## colorblind-friendly palette
cbPalette <- c("#999999", "#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", "#D55E00", "#CC79A7")
df<-data.frame(group, data_left,data_right)
## データラベルを作っとく
left_label <- paste(df$group, df$data_left, sep=",")
right_label <- paste(df$group, df$data_right,sep=", ")
## 色分け用
df$class <- ifelse((df$data_left - df$data_right) > 0, "blue", df$class)
## プロット
p <- ggplot(df) + geom_segment(aes(x=1, xend=2, y=data_left, yend=data_right, col=class), size=.75, show.legend=F) +
geom_vline(xintercept=1, linetype="dashed", size=.1) +
geom_vline(xintercept=2, linetype="dashed", size=.1) +
scale_color_manual(values = c("blue"=cbPalette[3], "gray"=cbPalette[1], "orange" = cbPalette[2])) + # color of lines
xlim(.5, 2.5) # X axis limits
## 順番回転かどうか
if(reverse){
p <- p + scale_y_reverse()
left_y = 0 - df$data_left
right_y = 0 - df$data_right
}else{
left_y = df$data_left
right_y = df$data_right
}
# データラベルを追加
p <- p + geom_text(label=left_label, y=left_y, x=rep(1, NROW(df)), color=df$class, hjust=1.1, size=2.5)
p <- p + geom_text(label=right_label, y=right_y, x=rep(2, NROW(df)), color=df$class, hjust=-0.1, size=2.5)
p
}
そしてデータを読み込んで、slope_graphに投げる。
## データを読み込む
data <- read.csv('programmingLanguageRank.csv')
data
## 使う欄をアサイン
group <- data$Programming.Language
data_left <- data$Jul.2016
data_right <- data$Jul.2017
## slope_graphを呼ぶ
mygraph <- slope_graph(
group,
data_left,
data_right)
mygraph
要注意のは、ランキングを比べたいから、数字ちいさいほうから並べて欲しいので、回転のパラメータをいれました。
mygraph <- slope_graph(
group,
data_left,
data_right,
reverse = TRUE)
そして、ggplotのオブジェクトだから、気軽く**+**でデコできる。
## タイトルとかを追加する
mygraph <- mygraph + geom_text(label="2016", x=1, y=0, hjust=1.2, size=3) # 左のタイトル
mygraph <- mygraph + geom_text(label="2017", x=2, y=0, hjust=-0.1, size=3) # 右のタイトル
mygraph <- mygraph + labs(title = "TIOBE Index", caption= "Data source : https://www.tiobe.com/tiobe-index/") + theme(plot.title = element_text(hjust = 0.5))
mygraph <- mygraph + labs(x="",y="Ranking of Programming Languages") # Axis labels
mygraph
## いらないものを消す
mygraph + theme(panel.background = element_blank(),
panel.grid = element_blank(),
axis.ticks = element_blank(),
axis.text = element_blank(),
panel.border = element_blank(),
plot.margin = unit(c(1,2,1,2), "cm"))
これで出来上がり。
気になる言語を比べたいときは、サブセットをとりましょう。
languages.I.care = c('Python','R', 'MATLAB', 'Perl')
data <- data[data$Programming.Language %in% languages.I.care,]
# このdataを使って、さっきのデータ読み込みの後のコードをもう一回実行する
結論
けっきょく R でもすぐ呼べる関数がないから、ちょっと面倒くさそうだけど、一回書いたら繰り返して使えるので、Excel より少し楽、かな。^_−☆
Reference
http://www.storytellingwithdata.com/blog/2014/03/more-on-slopegraphs
http://stephanieevergreen.com/slopegraph/
https://acaird.github.io/computers/r/2013/11/27/slopegraphs-ggplot
Slope Graphの歴史:
http://charliepark.org/slopegraphs/