#5 可視化(2)
May 13, 2026
ファイルは階層構造になっていることは何となくわかっていたが、絶対パスや相対パスがあることを初めて知ったし、まだ少しパスについて詳しく知りたいと思った(安用寺さん)
今まではペンギンのデータセットを使っていたので、実際にどのように使うかのイメージがわかなかったが、社会にあがっているデータをダウンロードして使える形にしたことによって、自分でも有効に使えそうと思えたから(山田さん)
今回の講義を通して様々なグラフの表現技法について習得して、使える幅が広がってワクワクしたから。ただ、やはり表現の豊かさに比例して関数の種類も多く感じられたため、使いこなすのは大変そうだと思った(山本さん)
theme(text = element_text(family = "Meiryo"))
theme(text = element_text(family = "Hiragino Sans"))
#| から書き始める

カラーパレットは、プロットに用いるデータを表現する能力に基づいて選ぶのがよいでしょう。例えば国や性別など、順序なしのカテゴリカル変数を表すには、簡単に混同されないような、はっきり区別できる色が必要です。その一方で、教育レベルといったような順序付きカテゴリカル変数では、大小や早い遅いなど段階的に変化する色の枠組みが必要です。それ以外にも変数の種類があります。例えば、順序付き変数でも、リッカート尺度 (Likert scale)のように中間的な点から双方向に広がるにつれて離れていくような尺度を取り扱う場合はどうすればよいでしょうか。繰り返しになりますが、この質問は色の尺度で変数をマッピングする場合にどうやって正確さや忠実さを確保するのかという問題です。手元のデータの構造を反映したパレットを選ぶように注意してください。例えば、連続的な変化をカテゴリカルなパレットでマッピングしないように、また、双方向パレットを使う場合は中間点がはっきりしない変数には用いないようにしましょう(ヒーリー,キーラン (2021), 283ページ)。


penguins |>
drop_na(species, sex, body_mass) |>
group_by(species, sex) |>
summarise(avg_body_mass = mean(body_mass), .groups = "drop") |>
ggplot(aes(x = species, y = avg_body_mass, fill = species)) +
geom_col() +
facet_wrap(~ sex) +
scale_fill_paletteer_d("DresdenColor::briefcases") # "ダブルクォテーション内がパレット名"
penguins |>
drop_na(species, sex, body_mass) |>
group_by(species, sex) |>
summarise(avg_body_mass = mean(body_mass), .groups = "drop") |>
ggplot(aes(x = species, y = avg_body_mass, fill = species)) +
geom_col() +
facet_wrap(~ sex) +
scale_fill_manual(values = met.brewer("Klimt", 3)) # "ダブルクォテーション内がパレット名"
geom_()内のalphaで指定
geom_()内のfillで指定label_percent()関数scale_x_continuous()関数 / scale_y_continuous()関数label_comma()関数label_kansuji()関数パッケージのインストールと読み込みが必要 パッケージがCRANにおいてないため、install.packagesが使えない パッケージremotesを利用。以下のコードをConsoleに入力して実行
install.packages("remotes")
remotes::install_github("uribo/zipangu")
df_pop_all |>
mutate(都道府県 = factor(都道府県, levels = pref_levels)) |>
ggplot(aes(x = 都道府県, y = 推定人口)) +
geom_col(fill = "#D55E00") +
gghighlight(都道府県 == "石川県") +
scale_y_continuous(labels = zipangu::label_kansuji()) + # y軸のラベルを日本語にして視認性を高める
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # x軸のラベルの角度を調整
labs()関数NULLを入れると(““不要)、ラベルは空白になる。ラベルが自明の場合、図に余分な情報がついていない方が見やすい図になる。
パッケージのインストールと読み込みが必要
# ggplotのデフォルトテーマ(全プロットに適用) ----
ggplot2::theme_set(
theme_classic() +
theme_sub_axis_bottom(
title = element_text(size = 11, margin = margin(t = 8)),
text = element_text(size = 8.5)
) +
theme_sub_axis_left(
title = element_text(size = 11, margin = margin(r = 8)),
text = element_text(size = 11, hjust = 0)
) +
theme_sub_legend(
position = "bottom",
margin = margin(t = -4),
key.size = unit(8, "mm")
) +
theme_sub_plot(
title = element_text(size = 20),
caption = element_text(size = 14)
)
)# ggplot theme_classicのフォント設定 ----
ggplot2::theme_set(
theme_classic(base_family = "Hiragino Sans") +
theme_sub_axis_bottom(
title = element_text(size = 11, margin = margin(t = 8)),
text = element_text(size = 8.5)
) +
theme_sub_axis_left(
title = element_text(size = 11, margin = margin(r = 8)),
text = element_text(size = 11, hjust = 0)
) +
theme_sub_legend(
position = "bottom",
margin = margin(t = -4),
key.size = unit(8, "mm")
) +
theme_sub_plot(
title = element_text(size = 20),
caption = element_text(size = 14)
)
)geom_text()関数geom_text()関数penguins |>
drop_na(species, island) |>
count(island, species) |>
group_by(island) |>
mutate(prop = n / sum(n)) |>
ggplot( aes(x = island, y = prop, fill = species)) +
geom_col(position = "fill") +
geom_text(
aes(
label = str_c( # 複数の要素を文字列として結合する
scales::percent(prop), # 比率(%が付される)
"\n(n=", n, ")" # 実数
)
),
position = position_fill(vjust = 0.5), # 位置
size = 3 # 文字サイズ
) +
scale_y_continuous(labels = scales::label_percent()) + # y軸を比率表示に変更
labs(y = "proportion") # y軸のラベルを変える(%が付されているので、proportionを削って""だけにしてよい=y軸のラベルがなくなる)
パッケージのインストールと読み込みが必要
+ で並べる(例:p1 + p2)