понедельник, 3 июня 2013 г.

colorfulVennPlot — рисуем цветные диаграммы Венна

Диаграммы Вена — это эффективный способ графически изображать отношения между множествами. В R есть замечательный пакет VennDiagram, который успешно решает эту задачу. Но получающиеся диаграммы получаются чёрно-белыми. Сделать картинки немного интереснее поможет пакет colorfulVennPlot. Он позволяет создавать цветные диаграммы для трёх множеств следующего вида:
Давайте разберёмся с тем, как он работает. Для начала установим и подключим пакет:
install.packages("colorfulVennPlot")
library("colorfulVennPlot")
Для рисования диаграммы нам понадобятся данные. Вслед за мунаулом будем использовать фрейм данных survey (данные о 237 студентах университета Аделаиды) из пакета MASS. Сделаем импорт этих данных:
data(survey, package = "MASS") # Справка: ?MASS::survey
Теперь нам нужно подготовить данные для диаграммы. Делается это командой createVennData:
# Grouping students by Pulse, Height and Age
vennData <- createVennData(survey,
Cols = c("Pulse","Height","Age"),
Splits = c(75, 170, 20), ## Split Pulse at 75, split Height at 170, split Age at 20
Labels = NULL, ## Keep Labels NULL, as we wish to stick with Pulse, Height and Age titles.
type = c("percent")) ## generate data as percents
Давайте разберёмся с её синтаксисом. Общий вид выглядит следующим образом:
createVennData(
    x, 
    Cols = NULL, 
    Splits = c(0, 0, 0), 
    Labels = NULL, 
    type = c("count", "percent"))
  • x — таблица с численными значениями, на основе которой будет рисоваться диаграмма (должно быть хотя бы три колонки)
  • Cols — вектор длины 3, определяющий названия наших множеств (они же — столбцы таблицы x)
  • Splits — вектор длины 3, который определяет пороговую величину, по которой будет происходить разбиение на множества
  • Labels — подписи для каждого множества
  • type — тип графика: count для непосредственных значений или percent для процентов
Теперь, когда данные готовы, осталось только нарисовать график:
plotVenn(vennData$x, vennData$labels)
Результат можно видеть на заглавном изображении. Стоит отметить, что функцию plotVenn можно использовать непосредственно, без обращения к createVennData. Для этого необходимо явно указать все расчётные величины. Проще всего понять на примере:
y <- c(37,29,6,232,121,77,25)
names(y) <- c("001","010","011","100","101","110","111")
labels <- c("A","B","C")
plotVenn(y, labels, Colors=rainbow(7))