メモ

備忘録です。

ggplot2で比例縮尺財務諸表をつくる

タイトルの通り、ggplot2で比例縮尺財務諸表をつくる方法をまとめてみます。
ちなみにggplot2のバージョンは1.0.1です。
現在は2.x系が公開されており、1.x系とは書き方が変わっているということですので、その点はご留意ください。

作成手順はおおまかに以下の通りです。

  1. データの用意
  2. グラフの作成

ではつくって行きましょう。

データの用意

今回は筆者の地元である愛媛県に本社のある株式会社フジのデータを使います。
フジは愛媛県を中心に営業しているスーパーマーケットチェーンです。
地元企業というだけで特に深い意味はありません。

財務データの入手については、皆さんのお好きなようにしてください。
入手したデータは,以下の様に整形します。
f:id:mrikc:20160504182459p:plain
ここでのポイントは、実際の財務諸表とは科目が逆になるように並べることです。
以下で積み上げ棒グラフとして比例縮尺財務諸表をつくっていくのですが、
ggplot2の積み上げ棒グラフは、先に出てきた科目から下に積んでいきます。
なので、下に表示させたい科目を先に持ってくる必要があるのです。

並べ方にはいくつかやり方があるでしょうが、私は以下のようにしています。
f:id:mrikc:20160504182722p:plain
A列に作業列を作成して、(B/Sならば)現預金から順に各科目に番号を振り、
上図のように並べ替えを行ないます。

整形を終えたら、csvファイルとして保存します。
また、Mac版のOfficeではShift JISで保存されるため、
Rでデータを開くと文字化けをしてしまうことがあります。
そのため、この段階で文字コードUnicodeに変換しておきましょう。

グラフの作成

まずデータを読み込んで,factor型の変数の水準をチェックします。
基本的に先に表示されたものほど、グラフ上、左上に表示されます。

#ggplot2呼び出し
library(ggplot2)
#データ読み込み
data <- read.csv("fuji.csv", header = T)
#factor型変数の水準チェック→先に表示されたものほど左上に表示される
print(levels(data$Dr.Cr))
print(levels(data$年度BS.PL))
print(levels(data$科目))
#並べ替え
data <- transform(data, Dr.Cr = factor(Dr.Cr, levels = c("Dr", "Cr")))
data <- transform(data, 科目 = factor(科目, levels = c("現預金", "営業債権","商品","その他流動資産","建物・土地","その他有形固定資産","無形固定資産","投資有価証券","その他投資","営業債務","未払金","有利子負債","その他債務","純資産","売上高","売上原価","営業収入","販管費","営業利益")))

科目の並べ替えは面倒ですが、ここをきちんとしておかないと凡例がめちゃくちゃな順番で表示されてしまいます。
並べ替えが終わったら、実際に積み上げ棒グラフとして比例縮尺財務諸表を作成します。

#元データを指定します。
fs_plot <- ggplot(data, aes(x=Dr.Cr, y=金額, fill=科目))
#グラフに日本語を表示するために、theme_set()で日本語フォントを指定します。
fs_plot <- fs_plot + theme_set(theme_bw(base_family="HiraKakuProN-W3"))
#積み上げ棒グラフの指定。colourは棒グラフの外枠の色、sizeは外枠の太さです。
fs_plot <- fs_plot + geom_bar(stat = "identity", colour = "black", size = 0.25)
#ここがキモです。facet_grid()で各年度のBS、PLごとに積み上げ棒グラフを作成せよと指定。
fs_plot <- fs_plot + facet_grid(. ~ 年度BS.PL)
#軸指定。
fs_plot <- fs_plot + scale_y_continuous(breaks=seq(0, 350000,by=50000))
#表タイトル&軸タイトル指定。
fs_plot <- fs_plot + ggtitle("比例縮尺財務諸表") + xlab("") + ylab("金額[百万円]")

以上のコードで、以下の様な比例縮尺財務諸表が完成します。
f:id:mrikc:20160504191050p:plain
色の指定等もできますが、それはまたいずれ。