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()内でshapeやsizeを指定することで、平均値のマーカーの形や大きさを変更できます。(例: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)

