異なる2種の農薬を作物に散布するとき、間を十分にあけずに散布すると薬害がでやすくなるような農薬の組み合わせがある。
それで、「この農薬を散布してからこの農薬を散布するまでは◯◯日開けろ」というのを図にまとめたものが新版 ピシャッと効かせる農薬選び便利帳という本に書いてある(元データは日本曹達農薬要覧らしい。あと実際の農薬の使用にあたっては必ずラベルを確認して記載の使用方法に従ってください。)。
要するにこれは重み付きグラフ(ノードとかエッジとかがある方)なので、igraphパッケージ使ってプロットしてみた。
ちなみにigraphパッケージの使い方の簡単な部分だけ昔まとめたのでよろしければどうぞ。
で、スクリプトはこんな感じ。
library(igraph) lab <- c("ボルドー液", #0 "マンネブ剤\nジネブ剤\nポリカーバメート剤", #1 "DCPA剤", #2 "有機リン剤\nカーバメート剤", #3 "石灰硫黄合剤", #4 "有機・無機\n銅水和剤", #5 "マシン油\n乳剤", #6 "ビーナイン") #7 edge <- c(0,1, 0,3, 0,4, 0,7, 1,0, 1,5, 2,3, 3,2, 4,0, 4,1, 5,1, 5,7, 6,4, 6,0, 7,5, 7,0) weight <- c(7, 30, 30, 30, 7, 7, 10, 10, 15, 5, 7, 20, 30, 30, 5, 3) g <- graph(edge, directed=TRUE) E(g)$label <- weight E(g)$curved <- 0 E(g)$label.cex <- 0.9 E(g)$label.dist <- 1.5 E(g)$arrow.size <- 0.5 V(g)$label <- lab V(g)$shape <- "rectangle" V(g)$label.cex <- c(1, 0.6, 1, 0.8, 0.8, 0.8, 1, 1)*0.9 V(g)$size <- 45 V(g)$size2 <- 20 plot(g, layout = layout.random) plot(g, layout = layout.circle) plot(g, layout = layout.fruchterman.reingold) plot(g, layout = layout.kamada.kawai) plot(g, layout = layout.spring) plot(g, layout = layout.reingold.tilford) plot(g, layout = layout.fruchterman.reingold.grid) plot(g, layout = layout.lgl) plot(g, layout = layout.graphopt) plot(g, layout = layout.mds) plot(g, layout = layout.svd)
こうすると何が嬉しいかっていうと、レイアウトを適当に変更した結果を簡単に確認できるという点。
スクリプトの最後にずらずらとplotが並んでいるが、これはそれぞれデフォルトで用意されているレイアウト用のアルゴリズムを適用している。実際に実行してみるとそれぞれ特徴的なノード配置になることが理解できるだろう。
例えばlayout.circleではただ円形にノードが並ぶ。
元ネタの本に載ってるのはこれを手書きにしたようなやつで、見たら分かるようにエッジが交叉する部分が多くてちょっとごちゃっとした印象を受ける。
そこでlayout.lglというやつを使うと、例えば(毎回異なる)こんな感じのグラフが描画される。
一部数字が隠れたりしているが、「ボルドーは何か矢印沢山出たり入ったりしてるし注意しないといけないな」というような事がパッと見理解しやすいのではないかと思う。
まあもちろんこんなもん作ってる暇あったらさっさと暗記したほうがいいんじゃないのという感は否めません。