本文へスキップ
からだにいいもの

Rのトピックスを中心に『まだ、まだ、知らない、役に立つ情報?』を発信します。

Rで解析:圃場試験の区画配置図を描く「desplot」パッケージの紹介

圃場(ほじょう)試験では、区画の位置と測定値の関係を把握することが欠かせません。しかし、多数の区画の配置と収量のばらつきを一枚の地図として描き、外れ値やブロックの偏りを読み取るには手間がかかります。

「desplot」パッケージは、圃場の区画を格子状に並べた地図として描画し、測定値を色分けで表現します。ブロックや処理区の枠線の重ね描き、セル内へのラベルや数値の表示、データ品質の低い区画を斜線で示す機能が可能です。また、latticeとggplot2のどちらでも同じ図を出力でき、赤・灰・青のグラデーション配色の生成も可能です。

本パッケージの利用で、圃場試験の空間的な傾向を視覚的に確認できるのではないかと考えます。

パッケージバージョンは1.11。Windows 11 x64 (build 26200)のR version 4.6.1で確認しています。

パッケージのインストール

下記コマンドを実行してください。

# パッケージのインストール
install.packages("desplot")

# パッケージの読み込み
library("desplot")

# コマンド例実行で必要なパッケージを読み込み
library("ggplot2")
スポンサーリンク

コマンド例

詳細はコメント、パッケージのヘルプを確認してください。

圃場試験では、試験地を格子状の区画(プロット)に分け、反復のまとまりであるブロックごとに処理を割り付けます。desplotパッケージは、区画の位置を表す2つの数値列を平面座標として扱い、そこに測定値の色分けや枠線を重ねた配置図を作成します。描画の指定は「測定値 ~ 横位置 * 縦位置」という数式で行い、必要に応じて群ごとの面付けを縦棒で追加します。

以降、京都府和束町の茶畑で宇治茶の6品種を6列4行の24区画に植え付け、荒茶収量を調べた品種試験を想定した擬似データを共通データとして使用します。列と行が区画の位置、ブロックが反復、品質はデータの信頼度を示すフラグ(0が良好、1が要確認、2が不良)です。

# 和束町の宇治茶 品種試験を模した区画データの作成(6列×4行=24区画)
茶園 <- data.frame(
  # 区画の東西方向の位置
  列 = rep(1:6, times = 4),
  # 区画の南北方向の位置
  行 = rep(1:4, each = 6),
  # 反復のまとまりを表すブロック
  ブロック = factor(rep(c("I", "II", "III", "IV"), each = 6)),
  # 各区画に植えた宇治茶の品種
  品種 = factor(c(
    "やぶきた", "ごこう", "さみどり", "おくみどり", "うじひかり", "こまかげ",
    "ごこう", "こまかげ", "やぶきた", "うじひかり", "おくみどり", "さみどり",
    "おくみどり", "さみどり", "うじひかり", "こまかげ", "やぶきた", "ごこう",
    "うじひかり", "やぶきた", "こまかげ", "ごこう", "さみどり", "おくみどり")),
  # 区画ごとの荒茶収量(kg/10アール)
  収量 = c(
    92, 88, 79, 74, 101, 96,
    85, 90, 98, 103, 77, 82,
    80, 83, 108, 99, 104, 88,
    111, 116, 102, 95, 90, 85),
  # データ品質のフラグ(0=良好、1=要確認、2=不良)
  品質 = c(
    0, 0, 0, 2, 0, 0,
    0, 0, 0, 0, 1, 0,
    0, 0, 0, 0, 0, 0,
    0, 0, 1, 0, 0, 0))

[圃場試験の区画配置図の描画]:desplotコマンド

区画の位置と測定値を格子状の地図として描画し、ブロックや処理区の枠線、セル内のラベル、データ品質の斜線表示を重ねます。

オプション意味初期値
dataデータフレームなし
form「測定値 ~ 横位置 * 縦位置 | 群」の形式の数式。横位置と縦位置は数値formula(NULL ~ x + y)
numセル内に数値コードとして表示する列名(クオートなし)NULL
num.stringセル内に数値コードとして表示する列名(文字列)NULL
colセル内テキストの色分けに使う列名(クオートなし)NULL
col.stringセル内テキストの色分けに使う列名(文字列)NULL
textセル内に表示するテキストの列名(クオートなし)NULL
text.stringセル内に表示するテキストの列名(文字列)NULL
out1第1レベルの枠線を描く単位の列名(クオートなし)NULL
out1.string第1レベルの枠線を描く単位の列名(文字列)NULL
out2第2レベルの枠線を描く単位の列名(クオートなし)NULL
out2.string第2レベルの枠線を描く単位の列名(文字列)NULL
dqデータ品質の悪い区画を斜線で示す列名(クオートなし。1で片斜線、2で×印)NULL
dq.stringデータ品質の悪い区画を斜線で示す列名(文字列)NULL
col.regionsセルの塗りつぶしに使う色RedGrayBlue
col.textテキストに使う色のベクトルNULL
text.levels水準名の代わりに表示する文字列NULL
out1.gpar第1レベルの枠線のグラフィックスパラメータ。list() または grid の gpar()list(col = “black”, lwd = 3)
out2.gpar第2レベルの枠線のグラフィックスパラメータlist(col = “yellow”, lwd = 1, lty = 1)
atカラーリボンの区切り位置。指定すると midpoint は NULL になるなし
midpointカラーリボンの中央を求める方法。”midrange”、”median”、または数値“median”
ticks軸の目盛りとラベルの指定。FALSE、TRUE、”all”、または list(x=, y=)FALSE
panel.borderTRUE でパネルの外枠と軸線を描画、FALSE で省略TRUE
flipTRUE で図を上下反転FALSE
main図の主題NULL
xlabx軸のラベルなし
ylaby軸のラベルなし
shorten凡例テキストの短縮方法。”abb”、”sub”、”no”、FALSE“abb”
show.keyTRUE で左側にキーを表示(カラーリボンとは別)TRUE
key.cex左側キーの文字の拡大率なし
cexセル内テキスト・数値の拡大率0.4
strip.cexストリップ見出しの文字の拡大率0.75
aspect縦横比。実寸の地図にするなら 縦の長さ/横の長さ を渡すNULL
subsetデータを絞り込む論理ベクトルを返す式TRUE
ggTRUE で desplot() を ggdesplot() に切り替えるFALSE
その他の引数なし
# 収量を色分けし、ブロックの枠線と品種名を重ねた区画配置図
desplot(茶園, 収量 ~ 列 * 行,
        # ブロックの外周に枠線を描く
        out1 = ブロック,
        # 各区画に品種名を表示(凡例は短縮しない)
        text = 品種, shorten = "no", cex = 0.9,
        main = "和束町 宇治茶 品種試験")

# 収量の区切り位置を手動指定し、品質の悪い区画を斜線で表示
desplot(茶園, 収量 ~ 列 * 行,
        out1 = ブロック,
        # 品質フラグの列を斜線表示に使う
        dq = 品質,
        # カラーリボンの区切りを4段階に固定
        at = c(70, 85, 100, 115), midpoint = NULL)

# ggplot2の体系で同じ図を描画(gg = TRUE でも同じ)
ggdesplot(茶園, 収量 ~ 列 * 行,
          out1 = ブロック, text = 品種, shorten = "no",
          aspect = 1)

# すべての整数座標に目盛りを振り、パネルの外枠を消して上下反転
desplot(茶園, 収量 ~ 列 * 行,
        out1 = ブロック,
        ticks = "all", panel.border = FALSE, flip = TRUE)

・収量を色分けし、ブロックの枠線と品種名を重ねた区画配置図

・収量の区切り位置を手動指定し、品質の悪い区画を斜線で表示

・ggplot2の体系で同じ図を描画(gg = TRUE でも同じ)

・すべての整数座標に目盛りを振り、パネルの外枠を消して上下反転

[隣り合う区画グループの境界線の描画]:geom_tileborderコマンド

ggplot2のタイル図に対して、指定した列の値が変わる境目だけに線を描き足すレイヤーです。ブロックや処理区のまとまりを強調する際に使用します。

オプション意味初期値
mappingaes() で作成した審美的属性の対応づけNULL
dataこのレイヤーで表示するデータNULL
geomデータの描画に使う幾何オブジェクト“segment”
positionデータに適用する位置調整“identity”
na.rmFALSE で欠損値を警告付きで除去、TRUE で警告なしで除去TRUE
show.legendこのレイヤーを凡例に含めるか。NA、FALSE、TRUENA
inherit.aesFALSE で既定の審美的属性を継承せず上書きTRUE
layer() の params に渡すその他の引数なし
# ブロックごとにタイルを塗り分け、その境目に線を引く
ggplot(茶園, aes(x = 列, y = 行)) +
  # ブロックを色分けしたタイル
  geom_tile(aes(fill = ブロック)) +
  # 隣り合うブロックの境目だけに線を描く
  geom_tileborder(aes(group = 1, grp = ブロック), lwd = 1.2)

[赤・灰・青のグラデーション配色の生成]:RedGrayBlueコマンド

低い値を赤、中間を灰色、高い値を青で表す発散型のカラーパレットを、指定した段階数で生成します。desplotの塗り色の既定値でもあります。

オプション意味初期値
n生成する色数なし
# 11段階の赤・灰・青パレットを生成
配色 <- RedGrayBlue(11)

# 生成した配色をグラデーション帯として確認
image(matrix(1:11, ncol = 1), col = 配色, axes = FALSE)

# 生成した配色を区画配置図の塗り色に指定
desplot(茶園, 収量 ~ 列 * 行, col.regions = 配色, out1 = ブロック)

・生成した配色をグラデーション帯として確認

・生成した配色を区画配置図の塗り色に指定


この記事が誰かの役に立ちますように。

スポンサーリンク
価格および配送状況は変更される場合があります。購入時は商品ページをご確認ください。
当サイトに表示されている商品情報はAmazonから提供されたものであり、更新または削除される場合があります。
karada-goodはAmazonアソシエイトとして、適格販売により収入を得ています。