6

venneuler ベン図の凡例を作成したいと思います。関数 venneuler はコンソールに使用される色を返すため、これは簡単です。色は 0 から 1 の間の値です。 $colors に格納されている数値を、凡例の塗りつぶし引数を埋めるために使用できるものに変換する方法を知りたいです。

venneuler から抽出された $colors と、colors() からのインデックス付けを使用して、以下でこれを試みました。colors() は間隔値でインデックス付けされているため、これが正しくないことはわかっていますが、それを入れて、私が望むものを示しています。

set.seed(20)
x <- matrix(sample(0:1, 100, replace = TRUE), 10, 10)
colnames(x) <- LETTERS[1:10]
rownames(x) <- letters[1:10]

require(venneuler)
y <- venneuler(x)
plot(y)

y$colors

legend(.05, .9, legend = colnames(x), fill = colors()[y$colors])
4

1 に答える 1

8

とそのデフォルトを熟読すると、数値がRGB カラー文字列plot.VennDiagramにどのように変換されるかがわかります。y$colors(自分の目で確かめてみgetAnywhere("plot.VennDiagram")てください。)

ここでは、(あなたの場合) 色を処理して変換を行う 1 つの関数に変換する 2 ビットのコードを集めました。凡例の位置はおそらく改善される可能性がありますが、それは別の問題です...

col.fn <- function(col, alpha=0.3) {
    col<- hcl(col * 360, 130, 60)
    col <- col2rgb(col)/255
    col <- rgb(col[1, ], col[2, ], col[3, ], alpha)
    col
}

COL <- col.fn(y$colors)
# The original order of columns in x is jumbled in the object returned
# by venneuler. This code is needed to put the colors and labels back
# in the original order (here alphabetical).
LABS <- y$labels
id <-  match(colnames(x), LABS)

plot(y)
legend(.05, .9, legend = LABS[id], fill = COL[id], x="topleft")

ここに画像の説明を入力

于 2012-02-03T00:28:46.043 に答える