R で2種類のグラフィックスを作成するとする.片方にはカテゴリA, C, D があり,片方にはA, B, C があるとする.ここで両方に共通するカテゴリを同じ色と指定したい.もっとも簡単な方法は?もちろん,手作業でアドホックに処理するのはなしで.
思い出さないなぁ. もっと簡単な方法があったはずだが,とりあえず,こんな方法でも実現できる.
まず二つの組に登場するカテゴリを一緒くたにしてベクトル z として扱い,それぞれの組のカテゴリ x, y が,この共通ベクトル z の何番目にあるかを調べるという方策である.
x <- c("A","C", "D") y <- c("A","B","C") z <- unique(c(x,y))
#y の各要素がzの何番目にあるか知りたい
y %in% z #意味無し
# 添字番号を取るためにループする?こんな厄介な処理が必要なのかなぁ?
xcol <- NULL ycol <- NULL for( i in 1:length(x)){ for(j in 1:length(z)){ if(x[i] == z[j]){ cat(j, "\n") xcol <- c(xcol, j) } } } for( i in 1:length(y)){ for(j in 1:length(z)){ if(y[i] == z[j]){ cat(j, "\n") ycol <- c(ycol, j) } } }
xx <- sample(x, 100, rep = T) xx.n <- sample(1:5, 100, rep = T) xx.l <- sample(x,100, rep = T) yy <- sample(y,100, rep = T) yy.n <- sample(1:5, 100, rep = T) yy.l <- sample(y,100, rep = T)
par(mfrow = c(1,2)) matplot(prop.table(table(xx.n, xx.l)), type = "l", col = xcol, lwd = 3) legend(1,.1, legend = x, col = xcol, lwd = 3) matplot(prop.table(table(yy.n, yy.l)), type = "l", col = ycol, lwd = 3) legend(1,.1, legend = y, col = ycol, lwd = 3)
# いや,絶対もっと簡単な方法があったはず