7.3 Barplot

棒グラフは質的変数の値をカウントした結果を量的に可視化する手法である. 円グラフ,ドーナッツグラフもどうようだが可視化のためにはまず集計をする必要がある. 例えば30人に出身地を聞いたところTokyo, Osaka, Hokkaido, Fukuokaのいずれかで以下のような回答を得られたとする.

set.seed(10)
x <- sample(c("Tokyo", "Osaka", "Hokkaido", "Fukuoka"), replace = T, size = 30)
print(x)
##  [1] "Hokkaido" "Tokyo"    "Osaka"    "Fukuoka"  "Fukuoka" 
##  [6] "Hokkaido" "Fukuoka"  "Osaka"    "Hokkaido" "Hokkaido"
## [11] "Hokkaido" "Fukuoka"  "Hokkaido" "Hokkaido" "Osaka"   
## [16] "Hokkaido" "Osaka"    "Osaka"    "Fukuoka"  "Tokyo"   
## [21] "Hokkaido" "Fukuoka"  "Osaka"    "Hokkaido" "Osaka"   
## [26] "Hokkaido" "Hokkaido" "Osaka"    "Osaka"    "Tokyo"

次に可視化のために,それぞれの回答がいくつあったかを集計する必要がある.Rではtable()という関数を利用すると簡単に集計ができる.

smry <- table(x)
print(smry)
## x
##  Fukuoka Hokkaido    Osaka    Tokyo 
##        6       12        9        3

最後にbarplot()という関数にこの結果を渡すことで棒グラフを作成することができる.

barplot(smry)

棒を縦ではなく横に伸ばしたい場合はhoriz=TRUEと指定すると良い.

barplot(smry, horiz = TRUE, las=1, cex.names=0.8)

棒グラフをggplotのライブラリを利用して作成する場合は次のように実装できる. ggplotでは引数として渡すデータをデータフレームとして整形する必要があるので,少し慣れが必要である.

以下では2つの処理を実装している.

  1. smryをデータフレームに変換
  2. xとなっている列名をそれぞれcity_nameに変更
df <- as.data.frame(x) # データフレームに変換
df <- df %>% rename(city_name = x)
df %>% head()
##   city_name
## 1  Hokkaido
## 2     Tokyo
## 3     Osaka
## 4   Fukuoka
## 5   Fukuoka
## 6  Hokkaido

次にggplotのライブラリでの実装を示す.

ggplot(df) +
  geom_bar(aes(x=city_name), position = "identity")

先ほどと同様,棒を横に伸ばすこともできる.その場合,引数を追加するのではなく,coord_flip()という関数を足すことで実現できる.

ggplot(df) + 
  geom_bar(aes(x=city_name), position="identity") + 
  coord_flip()

Exercise 7.1 (棒グラフの作成) 以下のコードを実行して,仮想的なアイスの好きな味のアンケート結果のベクトルquiestionaireを作成しなさい.

set.seed(10)
choices <- c("vanilla", "strowberry", "chocolate", "cheese", "maccha", "milk")
questionaire <- sample(choices, replace=TRUE, size=40)

次に,このベクトルを利用して棒グラフを作成しなさい. 利用するライブラリは標準でもggplotでも良い,また縦横についても特段の指定はしない.