mcpField
G
ggplot2

ggplot2

github.com/jspergerデータ・データベース15114 回インストール16 週間前に更新
リポジトリ

ggplot2 について

ggplot2 は、データマッピング、レイヤー、スケール、ファセット、座標、テーマを組み合わせて可視化を作る R パッケージです。このリファレンスは作図モデルと ggplot2 4.0 の一部機能を扱い、グラフの作成やスタイル調整を行う R ユーザーを対象としています。

主な機能

  1. 01データと美的マッピングによる作図
  2. 02幾何レイヤーと統計レイヤーの追加
  3. 03スケール、凡例、軸の設定
  4. 04変数によるファセットパネル分割
  5. 05テーマ、ラベル、座標の調整
  6. 06ggplot2 4.0 のテーマ・統計機能の利用

活用シーン

  1. 01傾向線付き散布図の作成
  2. 02ファセットパネルでグループを比較
  3. 03配色、ラベル、レイアウトのカスタマイズ

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/jsperger/llm-r-skills --skill ggplot2

インストール後、Claude Code で/ggplot2を入力して読み込まれたか確認します。

詳細

ggplot2 リファレンス

ggplot2 は、グラフィックの文法を使って可視化を作成するための R パッケージです。データ、マッピング、レイヤー、スケール、ファセット、座標、テーマを組み合わせてプロットを作成します。

コアコンポーネント

データとマッピング
ggplot(data = mpg, mapping = aes(x = cty, y = hwy))
  • データ:整然データのデータフレーム(行=観測値、列=変数)
  • マッピング:aes() でデータ列を視覚的属性(x、y、色、サイズなど)に対応付けます
レイヤー

レイヤーは、ジオメトリ、統計変換、位置調整を使ってデータを表示します。

ggplot(mpg, aes(cty, hwy)) +
  geom_point() +
  geom_smooth(formula = y ~ x, method = "lm")
スケール

データを視覚的属性に対応付ける方法を制御し、凡例や軸を作成します。

ggplot(mpg, aes(cty, hwy, colour = class)) +
  geom_point() +
  scale_colour_viridis_d()
ファセット

変数ごとにデータをパネルに分割します。

ggplot(mpg, aes(cty, hwy)) +
  geom_point() +
  facet_grid(year ~ drv)
座標

位置の美的属性を解釈します(デカルト座標、極座標、地図投影)。

ggplot(mpg, aes(cty, hwy)) +
  geom_point() +
  coord_fixed()
テーマ

データ以外の視覚要素を制御します。

ggplot(mpg, aes(cty, hwy, colour = class)) +
  geom_point() +
  theme_minimal() +
  theme(legend.position = "top")

ggplot2 4.0 の機能

ggplot2 4.0.0(2025 年 9 月)では、S7 クラスと主要な新機能が導入されました。

S7 への移行

$ の代わりに @ でプロパティにアクセスします。

# ggplot2 4.0+
ggplot()@data

# Deprecated (still works temporarily)
ggplot()$data

型の検証がより厳格になりました。

element_text(hjust = "foo")
#> Error: @hjust must be <NULL>, <integer>, or <double>, not <character>

テーマベースのレイヤーのデフォルト値

Ink、Paper、Accent

組み込みテーマでは、ink(前景色)、paper(背景色)、accent(強調色)を指定できます。

ggplot(mpg, aes(displ, hwy)) +
  geom_point() +
  geom_smooth(method = "lm", formula = y ~ x) +
  theme_gray(paper = "cornsilk", ink = "navy", accent = "tomato")
element_geom() と from_theme()

theme(geom) でレイヤーのデフォルト値を設定します。

ggplot(mpg, aes(class, displ)) +
  geom_boxplot(aes(colour = from_theme(accent))) +
  theme(geom = element_geom(
    accent = "tomato",
    paper = "cornsilk",
    bordertype = "dashed",
    borderwidth = 0.2,
    linewidth = 2,
    linetype = "solid"
  ))
テーマパレット

テーマでデフォルトのパレットを設定します。

theme(
  palette.colour.continuous = c("chartreuse", "forestgreen"),
  palette.shape.discrete = c("triangle", "triangle open")
)

テーマのショートカット

新しい theme_sub_*() 関数を使うと、記述を簡潔にできます。

ショートカット置き換えるプレフィックス
theme_sub_axis()axis.*
theme_sub_axis_x()axis.*.x
theme_sub_axis_bottom()axis.*.x.bottom
theme_sub_legend()legend.*
theme_sub_panel()panel.*
theme_sub_plot()plot.*
theme_sub_strip()strip.*
# Concise
theme_sub_axis_x(
  ticks = element_line(colour = "red"),
  ticks.length = unit(5, "mm")
) +
theme_sub_panel(
  widths = unit(5, "cm"),
  spacing.x = unit(5, "mm")
)
マージンヘルパー
margin_auto(1)           # all sides = 1
margin_auto(1, 2)        # t/b=1, l/r=2
margin_auto(1, 2, 3)     # t=1, l/r=2, b=3
margin_part(r = 20)      # partial (NA inherits)
パネルサイズ
theme_sub_panel(widths = unit(c(2, 3, 4), "cm"))  # per-panel
theme_sub_panel(widths = unit(9, "cm"))           # total area

ラベル

ラベル属性

"label" 属性を持つ変数は、軸ラベルに自動的に設定されます。

attr(df$bill_dep, "label") <- "Bill depth (mm)"
ggplot(df, aes(bill_dep, bill_len)) + geom_point()
辞書ラベル
dict <- c(species = "Species", bill_dep = "Bill depth (mm)")
ggplot(penguins, aes(bill_dep, bill_len, colour = species)) +
  geom_point() +
  labs(dictionary = dict)
関数ラベル
scale_colour_discrete(name = toupper)
guides(x = guide_axis(title = tools::toTitleCase))
labs(y = \(x) paste0(x, " variable"))

ラベルの優先順位(低い順から高い順):aes() < labs(dictionary) < 列属性 < labs() < scale_*(name) < guide_*(title)

名前付きブレーク
scale_colour_discrete(breaks = c(
  "Pygoscelis adeliae" = "Adelie",
  "Pygoscelis papua" = "Gentoo"
))

離散スケールの改善

# Palette for spacing
scale_x_discrete(palette = scales::pal_manual(c(1:3, 5:7)))

# Consistent limits across facets
scale_x_discrete(continuous.limits = c(1, 5))

# Minor breaks
scale_x_discrete(
  minor_breaks = scales::breaks_width(1, offset = 0.5),
  guide = guide_axis(minor.ticks = TRUE)
)

# Secondary axis
scale_x_discrete(sec.axis = dup_axis(
  name = "Counts",
  breaks = seq_len(7),
  labels = paste0("n = ", table(mpg$class))
))

位置の美的属性

ナッジの美的属性
geom_text(aes(nudge_x = sign(value) * 3, label = value))
ドッジの順序
ggplot(data, aes(x, y, fill = group)) +
  geom_boxplot(position = position_dodge(preserve = "single")) +
  aes(order = group)

ファセット

折り返し方向

facet_wrap(dir) には 8 つの方向オプションがあります。

dir開始位置塗りつぶし方向
"lt"左上左から右
"tl"左上上から下
"lb"左下左から右
"bl"左下下から上
"rt"右上右から左
"tr"右上上から下
"rb"右下右から左
"br"右下下から上
空き領域
facet_wrap(~ island, scales = "free_x", space = "free_x")
レイヤーレイアウト
geom_point(colour = "grey", layout = "fixed_rows")  # repeat in rows
geom_point(layout = NULL)                            # use facet vars
annotate("text", label = "X", layout = 6)            # specific panel

オプション:NULL、"fixed"、<integer>、"fixed_cols"、"fixed_rows"

スタイル設定

箱ひげ図のパーツ
geom_boxplot(
  whisker.linetype = "dashed",
  box.colour = "black",
  median.linewidth = 2,
  staplewidth = 0.5,
  staple.colour = "grey50"
)
バイオリンの分位点
geom_violin(
  quantiles = c(0.1, 0.9),
  quantile.linetype = 1,
  quantile.colour = "red"
)
ラベル
geom_label(
  aes(linetype = factor(vs), linewidth = factor(am)),
  text.colour = "black",
  border.colour = "blue"
)
塗りつぶしの変化
geom_area(aes(fill = continuous_var))  # gradient (R 4.1+)

新しい統計関数

stat_manual()
make_centroids <- function(df) {
  transform(df, xend = mean(x), yend = mean(y))
}
stat_manual(geom = "segment", fun = make_centroids)
stat_connect()
geom_line(stat = "connect")           # stairstep
geom_ribbon(stat = "connect", alpha = 0.4)

# Custom connection shape
smooth <- cbind(x = seq(0, 1, length.out = 20)[-1],
                y = scales::rescale(plogis(x, 0.5, 0.1)))
stat_connect(connection = smooth)

座標の反転

coord_cartesian(reverse = "x")   # "y", "xy", "none"
coord_sf(reverse = "y")
coord_radial(reverse = "theta")  # "r", "thetar", "none"

非推奨化

旧新
fattenmedian.linewidth / middle.linewidth
draw_quantilesquantiles
geom_errorbarh()geom_errorbar(orientation = "y")
coord_trans()coord_transform()
borders()annotation_borders()
facet_wrap(as.table)facet_wrap(dir)
theme_get/set/update/replace()get/set/update/replace_theme()
last_plot()get_last_plot()
layer_data/grob/scales()get_layer_data/grob()、get_panel_scales()

コメント