Ma.04.ggplot2 グラフ作成 復習

Rのggplot2パッケージを使った基本的なグラフ作成(箱ひげ図、散布図、ヒストグラム)の手順を復習するためのものです。
授業で学んだコードを見直しながら、グラフをステップアップさせていく方法を確認してください。

1. 箱ひげ図 (Boxplot)

箱ひげ図は、データの分布、中央値、四分位範囲、外れ値を視覚化するのに役立ちます。

1.1 基本の箱ひげ図

まずは、syotoku(所得)の基本的な箱ひげ図を描画します。x = factor(1)とすることで、グループ分けせずに全体の分布を表示できます。

ggplot(df, aes(x=factor(1), y=syotoku))+
  geom_boxplot()

1.2 データをフィルタリングして表示

特定の範囲のデータ(例:所得が4000以下の対象者)に絞ってグラフを作成したい場合は、先にdplyr::filter()でデータを処理してからggplot()に渡します。

df %>%
  dplyr::filter(syotoku <= 4000) %>%               
  ggplot(aes(x = factor(1), y = syotoku)) + 
  geom_boxplot()

1.3 グループ別の箱ひげ図

daitosi(大都市)のようにカテゴリ変数(因子)をX軸に指定すると、グループごとの分布を比較できます。

ggplot(df, aes(x=daitosi, y=syotoku))+
  geom_boxplot()

1.4 軸ラベルの追加

labs()関数を使って、X軸とY軸のラベルを分かりやすく変更します。

ggplot(df, aes(x = daitosi, y = syotoku)) +
  geom_boxplot()+
  labs(x="地域", y="所得2020")

1.5 データ点(実測値)の追加

geom_point()を追加すると、箱ひげ図の背後に実際のデータ点をプロットできます。alpha = 0.1で点を半透明にし、重なりを見やすくしています。

ggplot(df, aes(x = daitosi, y = syotoku)) +
  geom_boxplot()+
  geom_point(alpha = 0.1)+
  labs(x="地域", y="所得2020")

1.6 Y軸の表示範囲の調整

coord_cartesian(y=c(min, max))を使うと、グラフの表示範囲(Y軸)を指定できます(Zoom)。外れ値によってグラフ全体が見にくくなる場合などに便利です。

ggplot(df, aes(x = daitosi, y = syotoku)) +
  geom_boxplot()+
  geom_point(alpha = 0.1)+
  labs(x="地域", y="所得2020")+
  coord_cartesian(y=c(2000,5500))

1.7 平均値の追加

stat_summary()を使って、箱ひげ図(中央値)に加えて平均値を点で表示できます。

ggplot(df, aes(x = daitosi, y = syotoku)) +
  geom_boxplot()+
  stat_summary(fun = mean, geom = "point")+
  geom_point(alpha = 0.1)+
  labs(x="地域", y="所得2020")+
  coord_cartesian(y=c(2000,5500))

1.8 平均値のマーカー変更

stat_summary()内でshapesizeを指定することで、平均値のマーカーの形や大きさを変更できます。(例:shape=23は塗りつぶし可能なひし形)

ggplot(df, aes(x = daitosi, y = syotoku)) +
  geom_boxplot()+
  stat_summary(fun = mean, geom = "point", shape=23, size=3)+
  geom_point(alpha = 0.1)+
  labs(x="地域", y="所得2020")+
  coord_cartesian(y=c(2000,5500))

2. 散布図

散布図は、2つの量的変数(例:人口と所得)の関係性を視覚化するのに使います。

2.1 基本の散布図

jinko(人口)をX軸、syotoku(所得)をY軸にした基本的な散布図です。

ggplot(df, aes(x = jinko, y = syotoku)) + 
  geom_point()

2.2 タイトルとラベルの追加

labs()でグラフ全体のタイトルと、X軸・Y軸のラベルを追加します。

ggplot(df, aes(x = jinko, y = syotoku)) + 
  geom_point()+
  labs(title="散布図例", x="県民人口", y="所得2020")

2.3 Y軸の表示範囲の調整

箱ひげ図と同様に、coord_cartesian()で表示範囲を調整できます。

ggplot(df, aes(x = jinko, y = syotoku)) + 
  geom_point()+
  labs(title="散布図例", x="県民人口", y="所得2020")+
  coord_cartesian(y=c(2000,3500))

2.4 グループ別の色分け

aes()(マッピング)の中でcolor = daitosiのように指定すると、グループ(daitosi)ごとに点の色が自動的に変わります。

ggplot(df, aes(x = jinko, y = syotoku, color = daitosi)) + 
  geom_point()+
  labs(title="散布図例", x="県民人口", y="所得2020")+
  coord_cartesian(y=c(2000,5500))

2.5 回帰直線の追加(グループ別)

geom_smooth(method=lm)を追加すると、回帰直線(lm: 線形モデル)を描画できます。aes()colorが指定されていると、回帰直線もグループ別に描画されます。

ggplot(df, aes(x = jinko, y = syotoku, color = daitosi)) + 
  geom_point()+
  labs(title="散布図例", x="県民人口", y="所得2020")+
  coord_cartesian(y=c(2000,5500))+
  geom_smooth(method=lm)

2.6 回帰直線の追加(全体)

グループ分けせずに、データ全体の回帰直線を引きたい場合は、aes()colorを指定しません。

ggplot(df, aes(x = jinko, y = syotoku)) + 
  geom_point()+
  labs(title="散布図例", x="県民人口", y="所得2020")+
  coord_cartesian(y=c(2000,3500))+
  geom_smooth(method=lm)

2.7 特定のレイヤーのみ色分け

「点(geom_point)だけ色分けし、回帰直線(geom_smooth)は全体で1本にしたい」場合は、geom_point()内のaes()colorを指定します。

ggplot(df, aes(x = jinko, y = syotoku)) + 
  geom_point(aes(color = daitosi))+
  labs(title="散布図例", x="県民人口", y="所得2020")+
  coord_cartesian(y=c(2000,3500))+
  geom_smooth(method = lm)

3. ヒストグラム (Histogram)

ヒストグラムは、1つの量的変数(syotoku)の分布(度数分布)を視覚化します。

3.1 基本のヒストグラム (binwidth=100)

geom_histogram()でヒストグラムを描画します。binwidthは、ビン(棒)の幅(階級の幅)を指定します。

ggplot(df,aes(x=syotoku))+
  geom_histogram(binwidth = 100)

3.2 binwidth (階級の幅) の変更

binwidthの値を大きくする(例:500)と、ビンの数が減り、より大まかな分布が見えます。

ggplot(df,aes(x=syotoku))+
  geom_histogram(binwidth = 500, boundary = 0)

3.3 boundary (階級の境界) の指定

boundary = 0を指定すると、ビンの境界(区切り)が0から始まるように調整されます。

ggplot(df,aes(x=syotoku))+
  geom_histogram(binwidth = 100, boundary = 0)

3.4 タイトルとラベルの追加

labs()でタイトルや軸ラベルを追加します。

ggplot(df,aes(x=syotoku))+
  geom_histogram(binwidth = 250, boundary = 0)+
  labs(title="ヒストグラム練習", x = "平均所得(千円)", y = "度数")

3.5 グループ別の表示 (Facet)

facet_wrap(~daitosi)を追加すると、daitosi(大都市)のカテゴリごとにグラフを分割して表示できます。分布の形状をグループ間で比較するのに便利です。

ggplot(df,aes(x=syotoku))+
  geom_histogram(binwidth = 200, boundary = 0)+
  labs(title="ヒストグラム練習", x = "平均所得(千円)", y = "度数")+
  facet_wrap(~daitosi)

次の記事

Ma.05.差の検定