RでIR #01 スパゲティチャート(線の多すぎる折れ線グラフ) カテゴリ:
hr.icon
スパゲティチャート(線の多すぎる折れ線グラフ)
IRで折れ線グラフを作成する際、学部・学科毎の推移を見る場合など、折れ線の数が多くなりすぎてしまうことがあります。線が多すぎると、一応可視化はしているけれど、何が何だかわからず実質可視化できていないので悩ましいと思います。このような線の多すぎる折れ線グラフはスパゲティチャート(注2)と呼ばれているそうです。
Tableauなどでインタラクティブなグラフを作成できる場合には、ハイライトしたい部分を自由に選べるので問題ないかもしれないですが、紙で印刷したものを配る必要がある、PDFで配付する必要があるといった場合にはどのように作図すればいいか悩ましいものです。 その際参考になるのが、“An Economist’s Guide to Visualizing Data”(注3)です。Jonathan A. Schwabishの2014年の論文ですが、効果的なグラフの描き方を紹介していて、スパゲティチャート改善方法も取り上げています(注4)。
今回はRでこのスパゲティチャートの改善方法を実践するひとつの方法を取り上げます。 早速ですが、スパゲティチャートとその改善例を見てみましょう。 データは学校基本統計の年次統計「就職率(1950年~)【各年3月卒業者のうち、就職者(就職進学者を含む。)の占める割合】」(注5)を使います。 グラフを作成する前に、縦変換をするなど前処理が必要ですが、今回は省略します。
事前に前処理しておいたデータが次の表です(2018年10月29日にダウンロードした「学校基本統計」(文部科学省)を加工して作成)。
https://gyazo.com/999461b1c70df6a6e829895964315c9b
スパゲティチャートの例
イメージが持ちにくいと思うので、このデータを使って早速スパゲティチャートを見てみましょう。
https://gyazo.com/4ce616c61eff2839ae3d9aa70766c668
麺が8本しかないスパゲティレベルの低いスパゲティチャートで、お店でこんなスパゲティが出てきたらがっかりかもしれません。
でも8本しかなくても色の違いもわかりにくく、どの線がどの課程に該当するのかもわかりにくく見にくいですね。
スパゲティチャートの改善例
では次に改善版を見てみましょう。
https://gyazo.com/f5dedae3e50a56e44042de49d6711622
Jonathan(2014)でおすすめされているとおり、グラフを課程毎にわけてハイライトしています。また、最初と最後の値だけグラフの中に表示しています。
線の色や太さなどはお好みのものを使えばいいと思いますが、私はよく三重大学名誉教授の奥村晴彦先生のwebsiteを参考にさせていただいています(注6)。
Rでの作図方法
前段が長くなりましたが、Rでの作図方法を紹介します。 ここで紹介する内容よりもっと効率的な方法はたくさんあると思いますが、あくまで一例として捉えてください。
環境設定
まず、読み込むデータを保存したり、Rで出力するデータを保存したりする場所(作業ディレクトリ)を指定します。デフォルトのディレクトリで作業をするなら変更する必要はありません。
setwd("C:/Users/hogehoge/Documents/R/Spaghetti)
上記のディレクトリは架空のディレクトリですが、実際に保存する場所を“”の中に入れます。
次に必要なパッケージのインストールと呼び出しをします。 まだパッケージをインストールしていない場合は、先にinstall.packages(“tidyverse”)のように各パッケージをインストールしてください。
code:パッケージのインストール
library(tidyverse)
library(ggrepel)
library(ggpubr)
データの読み込み
そしてデータを読み込みます。
code:データの読み込み
grad <- read_csv("grad.csv",locale = locale(encoding = "cp932"))
## Parsed with column specification:
## cols(
## 年度 = col_integer(),
## 課程 = col_character(),
## 割合 = col_double()
## )
年度は整数として、課程は文字列として、割合は実数として読み込まれました。
作図
ここから図を作っていきます。 複数の図を作ってからひとつの図にまとめる方法で作図しているのですが、 繰り返しの作業になるのでfor文で作成していきます。 変数iが1から8まで変化する中で、図を作っていきます。 iが変わるごとに課程を変えられるようにするために、作業用の課程2というデータを作ります。
code:作図(step1)
課程2 <- c("中学校","高等学校","高等専門学校","短期大学","大学","修士課程","博士課程","専門職学位課程")
ここからfor文です。
code:作図(step2)
table00 <- grad
for(i in 1:8){
subtable <- filter(table00, 課程==課程2i) subtable2 <- filter(subtable, 年度==max(年度)|年度==min(年度)) %>%
mutate(割合=round(割合,1))
gg0 <-ggplot(data=table00, aes(x=年度,y=割合,group=課程))+
geom_line(size=0.3,alpha=0.8,col="grey")+
geom_line(data=subtable, colour="royal blue",size=0.6,alpha=0.9)+
geom_text_repel(data=subtable2,aes(label=割合),size=3,colour="black")+
labs(title=課程2i,x="", y= "")+ scale_y_continuous(breaks=seq(0,100,10)) +
scale_x_continuous(breaks = seq(min(年度),max(年度),10))+
theme(plot.title = element_text(hjust=0.5) ,
panel.background = element_rect(
fill = "transparent",color = NA),
panel.grid.minor = element_line(color = NA),
panel.grid.major = element_line(color = NA),
plot.background = element_rect(fill = "transparent",color = NA),
legend.position = 'none')
assign(paste("gg",i,sep="_"),gg0)
}
これで改善版スパゲティチャートに必要な8個のグラフができました。 試しに一つ見てみましょう。
print(gg_1)
https://gyazo.com/bb805192ef98a18da872f371384db8b5
あとはこれを8個並べて、タイトルを付けるだけです。
code:整列
gg_set <- ggarrange(gg_1,gg_2,gg_3,gg_4,gg_5,gg_6,gg_7,gg_8, ncol=2,nrow=4)+
labs(title="卒業者に占める就職者の割合の推移",
text=element_text(family = "Japan1"))
annotate_gg_set <-annotate_figure(
gg_set,
top=text_grob("卒業者に占める就職者の割合の推移",hjust=0.5,size=16),
left=text_grob("割合(%)",rot=90),
bottom=text_grob("年度"))
これで完成です。先に見たものと同じですが、一応完成形を見ておきましょう。
print(annotate_gg_set)
https://gyazo.com/f704523e37fc6096709135afee29206f
PDFへの出力
これをPDFで出力したい場合には、
code:PDF出力
pdf(file="ファイルの名前.pdf",width=8.27,height=11.69,family="Japan1" )
print(annotate_gg_set)
dev.off()
## png
## 2
などとします。
それでは学食においしいスパゲティを食べに行きましょう。
hr.icon
注
(1) この内容は私個人の見解であり、所属組織の見解ではありません。
(3) Jonathan A. Schwabish, 2014. “An Economist’s Guide to Visualizing Data,” Journal of Economic Perspectives, American Economic Association, vol. 28(1), pages 209-234, Winter.
(4) Nussbaumer,2013でもスパゲティチャートの改善方法は紹介されています。
(5) “就職率(1950年~)【各年3月卒業者のうち、就職者(就職進学者を含む。)の占める割合】”(政府統計の総合窓口)
(6) “統計グラフの色”(「奥村研究室 」website)
※当コラムの文責及び著作権は、すべて投稿者に帰属します。