Легенда Венна Схема в Веннеулере

Я хотел бы создать легенду для диаграммы Веннеулера Венна. Это должно быть прямо, потому что функция venneuler возвращает цвета, используемые для консоли. Цвета имеют значения от 0 до 1. Я хочу знать, как превратить эти числовые значения, хранящиеся в $ colors, во что-то, что я могу использовать для заполнения аргумента заполнения в легенде.

Я попытался сделать это ниже, используя $ colors, извлеченный из venneuler и индексирование из 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])

Ответы на вопрос(1)

Решение Вопроса

plot.VennDiagram и по умолчанию вы можете увидеть, как он преобразует числа вy$colors RGB цвет строк. (ПытатьсяgetAnywhere("plot.VennDiagram") посмотреть самому.)

Здесь я собрал два бита кода, которые обрабатывали цвета (в вашем случае) в одну функцию, которая сделает преобразование за вас. Положение легенды, возможно, можно улучшить, но это еще одна проблема ...

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")

 Tyler Rinker03 февр. 2012 г., 01:49
О'Брайан Это прекрасно.
 Scott Robert Schreckengaust13 янв. 2014 г., 22:27
я использовалid <- match(names(y$colors, LAB)) вместо

Ваш ответ на вопрос