1. 単年度収支の推移

1.1 データの読み込み

library(readr)
yosan <- read_csv("./data/yosan.csv")
## Rows: 7 Columns: 3
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## dbl (1): 会計年度
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

1.2 収支の計算

yosan[,]
dat <- yosan
収支 <- dat[,2]-dat[,3]
dat[,4] <- dat[,2]-dat[,3]
colnames(dat) <- c("会計年度","a:収入","b:支出","c:収支")
dat

「収入」、「支出」、「収支」のそれぞれの前にアルファベットを順に付ける。そうしないと、凡例でその順に表示されない。おそらく、文字コードの順になってしまう。

1.3 long formatに変換

library(tidyr)
dat_ <- gather(dat,"key","value",-会計年度)
dat_

1.4 描画

library(ggplot2)
ggplot(dat_,aes(x=会計年度,y=value,col=key))+
  geom_line(size=1.5)+
  geom_hline(yintercept=0,color="blue",size=1,linetype="dashed")+
labs(col="凡例",x="会計年度",y="金額",title="単年度収支の推移",caption="志井桜ヶ丘第二町内会", subtitle="2014-2020 単位:円")+
theme_minimal(base_family="HiraKakuProN-W3")
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

ggplot(dat_,aes(x=会計年度,y=value,group=key))+
  geom_point(size=1.5)+
  geom_line(aes(linetype=key))+
  geom_hline(yintercept=0,size=1,linetype="dashed")+
labs(col="凡例",x="会計年度",y="金額",title="単年度収支の推移",caption="志井桜ヶ丘第二町内会", subtitle="2014-2020 単位:円")+
scale_linetype_discrete(name="凡例",labels=c("収入","支出","収支"))+
theme_minimal(base_family="HiraKakuProN-W3")

library(ggplot2)
ggplot(dat_,aes(x=会計年度,y=value,col=key))+
  geom_line(size=1.5)+
  geom_hline(yintercept=0,color="blue",size=1,linetype="dashed")+
labs(col="凡例",x="会計年度",y="金額",title="単年度収支の推移",caption="○○町内会", subtitle="2014-2020 単位:円")+
theme_minimal(base_family="HiraKakuProN-W3")+
scale_x_continuous(breaks=seq(2014,2020,1))

ggplot(dat_,aes(x=会計年度,y=value,group=key))+
  geom_point(size=1.5)+
  geom_line(aes(linetype=key))+
  geom_hline(yintercept=0,size=1,linetype="dashed")+
labs(col="凡例",x="会計年度",y="金額",title="単年度収支の推移",caption="○○町内会", subtitle="2014-2020 単位:円")+
scale_linetype_discrete(name="凡例",labels=c("収入","支出","収支"))+
theme_grey(base_family="HiraKakuProN-W3")+
scale_x_continuous(breaks=seq(2014,2020,1))+
theme(axis.text.x=element_text(angle=30,hjust=1))

ggplot(dat_,aes(x=会計年度,y=value,group=key))+
  geom_point(size=1.5)+
  geom_line(aes(linetype=key))+
  geom_hline(yintercept=0,size=1,linetype="dashed")+
labs(col="凡例",x="会計年度",y="金額",title="単年度収支の推移",caption="○○町内会", subtitle="2014-2020 単位:円")+
scale_linetype_discrete(name="凡例",labels=c("収入","支出","収支"))+
theme_grey(base_family="HiraKakuProN-W3")+
scale_x_continuous(breaks=seq(2014,2020,1))+
theme(axis.text.x=element_text(angle=0,hjust=0.5))

2. 補助金の充当

以下のような程度のデータであれば、直接に書き込む方がよいであろう。外部ファイルから読み込むのではなく。3行2列の行列が想定されている。

# 説明的な配列名を付ける
役員手当 <- c(222000,119190)
公園維持管理費 <- c(80000,64500)
防犯灯電気代 <- c(69000,48100)

# 行列hojokinの作成
hojokin <- matrix(0,3,2)
hojokin[1,] <- 役員手当
hojokin[2,] <- 公園維持管理費
hojokin[3,] <- 防犯灯電気代

# データフレームにする
# 行名、列名は自動的に生成する
hojokin <- as.data.frame(hojokin)
hojokin
# 行名をアルファベットに変更
rownames(hojokin) <- c("a","b","c")

# 減算をして負担額を計算
hojokin[,3] <- hojokin$V1 - hojokin$V2

# HTML形式のtableとして出力
knitr::kable(hojokin)
V1 V2 V3
a 222000 119190 102810
b 80000 64500 15500
c 69000 48100 20900
# 描画(barplotによる)
par(family="HiraKakuProN-W3")
barplot(hojokin$V3, names.arg= c("役員手当","公園維持管理費","防犯灯電気代"),main="町内会負担額")

# 描画(ggplot2による)
hojokin$item <- c("a","b","c") # 列を追加
hojokin
ggplot(hojokin,aes(x=item,y=V3))+
  geom_col(fill="grey80")+
labs(x="予算項目",y="金額",title="町内会負担額",subtitle="支出額から補助金を控除")+
scale_x_discrete(labels=c("役員手当","公園維持管理費","防犯灯電気代"))+
scale_y_continuous(breaks=c(0,25000,50000,75000,100000),labels=c("0","25,000","50,000","75,000","100,000"))+
theme_grey(base_family="HiraKakuProN-W3")

3. データの追加

3.1 2021年度データの追加

d21 <- c(2021,747407,619526)
yosan21 <- rbind(yosan,d21)
yosan21
dat <- yosan21

3.2 収支の計算

収支 <- dat[,2]-dat[,3]
dat[,4] <- dat[,2]-dat[,3]
colnames(dat) <- c("会計年度","a:収入","b:支出","c:収支")
dat

3.3 long formatに変換

library(tidyr)
dat_ <- gather(dat,"key","value",-会計年度)
dat_

3.4 描画

library(ggplot2)
ggplot(dat_,aes(x=会計年度,y=value,col=key))+
  geom_line(size=1.5)+
  geom_hline(yintercept=0,color="blue",size=1,linetype="dashed")+
labs(col="凡例",x="会計年度",y="金額",title="単年度収支の推移",caption="○○町内会", subtitle="2014-2021 単位:円")+
theme_minimal(base_family="HiraKakuProN-W3")

ggplot(dat_,aes(x=会計年度,y=value,group=key))+
  geom_point(size=1.5)+
  geom_line(aes(linetype=key))+
  geom_hline(yintercept=0,size=1,linetype="dashed")+
labs(col="凡例",x="会計年度",y="金額",title="単年度収支の推移",caption="○○町内会", subtitle="2014-2021 単位:円")+
scale_linetype_discrete(name="凡例",labels=c("収入","支出","収支"))+
theme_minimal(base_family="HiraKakuProN-W3")

library(ggplot2)
ggplot(dat_,aes(x=会計年度,y=value,col=key))+
  geom_line(size=1.5)+
  geom_hline(yintercept=0,color="blue",size=1,linetype="dashed")+
labs(col="凡例",x="会計年度",y="金額",title="単年度収支の推移",caption="○○町内会", subtitle="2014-2021 単位:円")+
theme_minimal(base_family="HiraKakuProN-W3")+
scale_x_continuous(breaks=seq(2014,2021,1))

ggplot(dat_,aes(x=会計年度,y=value,group=key))+
  geom_point(size=1.5)+
  geom_line(aes(linetype=key))+
  geom_hline(yintercept=0,size=1,linetype="dashed")+
labs(col="凡例",x="会計年度",y="金額",title="単年度収支の推移",caption="○○町内会", subtitle="2014-2021 単位:円")+
scale_linetype_discrete(name="凡例",labels=c("収入","支出","収支"))+
theme_grey(base_family="HiraKakuProN-W3")+
scale_x_continuous(breaks=seq(2014,2021,1))+
theme(axis.text.x=element_text(angle=30,hjust=1)) # 目盛り右揃え(hjust=1)

ggplot(dat_,aes(x=会計年度,y=value,group=key))+
  geom_point(size=1.5)+
  geom_line(aes(linetype=key))+
  geom_hline(yintercept=0,size=1,linetype="dashed")+
labs(col="凡例",x="会計年度",y="金額",title="単年度収支の推移",caption="○○町内会", subtitle="2014-2021 単位:円")+
scale_linetype_discrete(name="凡例",labels=c("収入","支出","収支"))+
theme_grey(base_family="HiraKakuProN-W3")+
scale_x_continuous(breaks=seq(2014,2021,1))+
theme(axis.text.x=element_text(angle=0,hjust=0.5)) # 目盛り中央揃え(hjust=0.5)

改良版

『初めてのRstudio』(オーム社)にscale_linetype_discreteを使う以下と同様の例がある。

scale_linetype_discrete(name="凡例",labels=c("収入","支出","収支"))

labelsを外すと以下のようになる。アルファベットを付けた項目名が表示される。

ggplot(dat_,aes(x=会計年度,y=value,group=key))+
  geom_point(size=1.5)+
  geom_line(aes(linetype=key))+
  geom_hline(yintercept=0,size=1,linetype="dashed")+
labs(col="凡例",x="会計年度",y="金額",title="単年度収支の推移",caption="○○町内会", subtitle="2014-2021 単位:円")+
scale_linetype_discrete(name="凡例")+
theme_grey(base_family="HiraKakuProN-W3")+
scale_x_continuous(breaks=seq(2014,2021,1))+
theme(axis.text.x=element_text(angle=0,hjust=0.5)) # 目盛り中央揃え(hjust=0.5)

以下のコマンドを追加。縦軸の指数表記をやめる。

scale_y_continuous(breaks=c(-300000,0,300000,600000,900000),labels=c("-30万円","0","30万円","60万円","90万円"))+
ggplot(dat_,aes(x=会計年度,y=value,group=key))+
  geom_point(size=1.5)+
  geom_line(aes(linetype=key))+
  geom_hline(yintercept=0,size=1,linetype="dashed")+
labs(col="凡例",x="会計年度",y="金額",title="単年度収支の推移",caption="○○町内会", subtitle="2014-2021 単位:円")+
scale_linetype_discrete(name="凡例",labels=c("収入","支出","収支"))+
theme_grey(base_family="HiraKakuProN-W3")+
scale_x_continuous(breaks=seq(2014,2021,1))+
scale_y_continuous(breaks=c(-300000,0,300000,600000,900000),labels=c("-30万円","0","30万円","60万円","90万円"))+
theme(axis.text.x=element_text(angle=0,hjust=0.5)) # 目盛り中央揃え(hjust=0.5)

以下のコマンドを追加。凡例の項目を書き換える。順序は変えていない。

scale_colour_discrete(name="凡例",labels=c("収入","支出","収支"))
library(ggplot2)
ggplot(dat_,aes(x=会計年度,y=value,col=key))+
  geom_line(size=1.5)+
  geom_hline(yintercept=0,color="blue",size=1,linetype="dashed")+
labs(col="凡例",x="会計年度",y="金額",title="単年度収支の推移",caption="○○町内会", subtitle="2014-2021 単位:円")+
theme_minimal(base_family="HiraKakuProN-W3")+
scale_y_continuous(breaks=c(-300000,0,300000,600000,900000),labels=c("-30万円","0","30万円","60万円","90万円"))+
scale_colour_discrete(labels=c("収入","支出","収支"))+
scale_x_continuous(breaks=seq(2014,2021,1))