BellCurve 統計WEB

  • Step3. 実践編
  • 1. データの整理と可視化

1-4. 積み上げ棒グラフ

次のデータは、「Step0. 初級編 2-3. 積み上げ棒グラフを読み取ってみよう」で用いたデータです。このデータを使って、積み上げ棒グラフの作成を行ってみましょう。

ファイルのダウンロードはこちらから

■Excelによる解析例

  1. 「neko_ensoku.csv」のデータを選択(A1セルからE7セルまで)
  2. 挿入 > すべてのグラフを表示 > 積み上げ縦棒を選択
  3. 
    
    

  4. デフォルトのグラフが出力される
  5. デフォルトのグラフを加工
  6. ※棒グラフ間の線(区分線)を入れる場合には、次の手順で行います。:出力されたグラフをクリック > グラフツールのデザイン > グラフ要素の追加 > 線 > 区分線を選択

    ※100% 積み上げ縦棒を選択すると、各データ全体を100%としたときの各項目の割合を表す棒グラフを描くことができます。

    
    
    

■Rによる解析例

・その1(packageを使わない場合)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
dat <- read.csv("neko_ensoku_eng.csv", header=T, row.names = 1)  #データの読み込み
dat2 <- t(dat[1:6,1:4])  #必要なデータ(1~6行目、1~4列目)の抽出&転置(行列の入れ替え)
 
#積み上げ棒グラフ
barplot(dat2,  #barplot関数にデータをセット
        ylab = "Frequency"#y軸ラベルを設定
        legend = rownames(dat2),  #凡例をセット
        col=topo.colors(4))  #棒グラフの色を設定(topo.colorsのカラースケールを4分割)
 
#100%積み上げ棒グラフ
par(mar=c(5, 5, 4, 10))  #凡例がグラフに重ならないようにするため、余白を設定
barplot(prop.table(dat2, 2),  #列ごとの割合を算出
        ylab = "Proportion",
        legend = rownames(dat2),
        col=topo.colors(4),
        args.legend = list(x = "topright", inset = c(-0.25, 0)))  #凡例の位置を設定
 
dev.off()  #描画設定を初期値に戻す  



■Rによる解析例

・その2(ggplot2を使う場合)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
library(reshape2)
library(ggplot2)
 
dat <- read.csv("neko_ensoku_eng.csv", header=T, row.names = 1)  #データの読み込み
dat2 <- melt(as.matrix(dat[1:6,1:4]))  #データを縦に並べかえる
 
#積み上げ棒グラフ
G1 <-ggplot(dat2, aes(x = Var1, y = value, fill = Var2)) +  #x軸、y軸、塗りつぶしの色のデータを設定
  geom_bar(stat = "identity") +  #与えられた値をそのまま棒グラフとして使う
  scale_fill_brewer(palette = "Set2") +  #棒グラフの色を設定(Set2というカラーパレットを使用)
  labs(x = "", y = "Frequency", fill = "Category") +  #グラフのラベルを設定
  theme(panel.grid.major = element_blank(),  #背景のgridの削除
        panel.grid.minor = element_blank(),  #背景のgridの削除 
        panel.background = element_blank(),  #背景色の削除
        axis.line=element_line(colour = "black"),  #グラフの線の色を指定
        axis.ticks=element_line(colour = "black"),  #グラフの目盛(ticks)の色を指定
        axis.text=element_text(size = 14),  #グラフの目盛のフォントサイズを指定
        axis.title=element_text(size = 16),  #グラフのラベルのフォントサイズを指定
        legend.text=element_text(size = 14),  #凡例のフォントサイズを指定
        legend.title=element_text(size = 16))  #凡例のラベルのフォントサイズを指定
plot(G1)
 
#100%積み上げ棒グラフ
G2 <-ggplot(dat2, aes(x = Var1, y = value, fill = Var2)) +
  geom_bar(stat = "identity", position = "fill") +
  scale_fill_brewer(palette = "Set2") +
  labs(x = "", y = "Proportion", fill = "Category") +  #与えられた値をそのまま棒グラフとして使う+100%に積み上げる
  theme(panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(),
        panel.background = element_blank(),
        axis.line=element_line(colour = "black"),
        axis.ticks=element_line(colour = "black"),
        axis.text=element_text(size = 14),
        axis.title=element_text(size = 16),
        legend.text=element_text(size = 14),
        legend.title=element_text(size = 16))
plot(G2)



■Pythonによる解析例

・その1(for文を使わずに積み上げる場合)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import pandas as pd
import matplotlib.pyplot as plt
 
dat = pd.read_csv("neko_ensoku_eng.csv", index_col = 0#データの読み込み
dat2 = dat.iloc[0:6,0:4#必要なデータの抽出
 
#積み上げ棒グラフ
dat2.plot.bar(stacked = True#クロス集計表データから積み上げ棒グラフを作成
plt.legend(dat2.columns, fontsize = 10#凡例の項目、フォントサイズの設定
plt.ylabel("Frequency", fontsize = 10#y軸ラベルを設定、フォントサイズの設定
 
plt.show()  #グラフの出力
 
#100%積み上げ棒グラフ
dat3 = dat2.copy()  #dat2をdat3へコピー
for i in range(6):  #for文を使って列ごとの割合を算出
    dat3.iloc[i,:] = dat3.iloc[i,:] / dat3.iloc[i,:].sum()
dat3.plot.bar(stacked = True)
plt.legend(dat2.columns, fontsize = 10, loc='upper left', bbox_to_anchor = (1, 1))  #凡例の項目、フォントサイズ、位置の設定
plt.ylabel("Proportion", fontsize = 10)
plt.tight_layout()  #グラフの要素が画面からはみ出さないようにする
 
plt.show()



■Pythonによる解析例

・その2(for文を使って積み上げる場合)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import pandas as pd
import matplotlib.pyplot as plt
 
dat = pd.read_csv("neko_ensoku_eng.csv", index_col = 0)
dat2 = dat.iloc[0:6,0:4]
 
#積み上げ棒グラフ
fig, ax = plt.subplots()  #グラフの大枠の作成
for i in range(4):  #for文を使って列ごとデータを積み上げる
    ax.bar(dat2.index, dat2.iloc[:,i], bottom=dat2.iloc[:,:i].sum(axis = 1))
plt.legend(dat2.columns, fontsize = 10)
plt.ylabel("Frequency", fontsize=10)
 
plt.show()
 
#100%積み上げ棒グラフ
dat3 = dat2.copy()
for i in range(6):
    dat3.iloc[i,:] = dat3.iloc[i,:] / dat3.iloc[i,:].sum()
fig, ax = plt.subplots()
for i in range(4):
    ax.bar(dat3.index, dat3.iloc[:,i], bottom = dat3.iloc[:,:i].sum(axis = 1))
plt.legend(dat2.columns, fontsize = 10, loc = 'upper left', bbox_to_anchor = (1, 1))
plt.ylabel("Proportion", fontsize = 10)
plt.tight_layout()
 
plt.show()



1. データの整理と可視化


統計学やデータ分析を学ぶなら、大人のための統計教室 和(なごみ) [業務提携]


【BellCurve監修】統計検定®2級対策に最適な模擬問題集1~3を各500円(税込)にて販売中!

Kindleストアで配信中

統計検定®2級 模擬問題集1

500円(税込)

統計検定®2級 模擬問題集2

500円(税込)

統計検定®2級 模擬問題集3

500円(税込)