Схемы Санки в R?

Я пытаюсь представить свой stream данных с помощью диаграммы Санки в R.

Я нашел этот пост в блоге, связанный с R-скриптом, который создает диаграмму Sankey, к сожалению, он довольно сырой и несколько ограниченный (см. Ниже пример кода и данных).

Кто-нибудь знает о других сценариях, а может быть, и о пакете, который более развит? Моя конечная цель – визуализировать как stream данных, так и проценты по относительным размерам компонентов диаграммы, как в этих примерах диаграмм Санки .

Я разместил несколько схожий вопрос в списке r-help , но после двух недель без каких-либо ответов я пробовал свою удачу здесь в stackoverflow.

Спасибо, Эрик

PS. Я знаю о Parallel Sets Plot , но это не то, что я ищу.

# thanks to, https://tonybreyal.wordpress.com/2011/11/24/source_https-sourcing-an-r-script-from-github/ sourc.https <- function(url, ...) { # install and load the RCurl package if (match('RCurl', nomatch=0, installed.packages()[,1])==0) { install.packages(c("RCurl"), dependencies = TRUE) require(RCurl) } else require(RCurl) # parse and evaluate each .R script sapply(c(url, ...), function(u) { eval(parse(text = getURL(u, followlocation = TRUE, cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl"))), envir = .GlobalEnv) } ) } # from https://gist.github.com/1423501 sourc.https("https://raw.github.com/gist/1423501/55b3c6f11e4918cb6264492528b1ad01c429e581/Sankey.R") # My example (there is another example inside Sankey.R): inputs = c(6, 144) losses = c(6,47,14,7, 7, 35, 34) unit = "n =" labels = c("Transfers", "Referrals\n", "Unable to Engage", "Consultation only", "Did not complete the intake", "Did not engage in Treatment", "Discontinued Mid-Treatment", "Completed Treatment", "Active in \nTreatment") SankeyR(inputs,losses,unit,labels) # Clean up my mess rm("inputs", "labels", "losses", "SankeyR", "sourc.https", "unit") 

Sankey Diagram, созданный с использованием вышеуказанного кода, Диаграмма Санки, подготовленная с помощью кода выше

Этот график можно создать через пакет networkD3 . Это позволяет создавать интерактивные диаграммы sankey. Здесь вы можете найти пример . Я также добавил скриншот, чтобы вы поняли, как оно выглядит.

введите описание изображения здесь

Я создал пакет ( riverplot ), который имеет немного другую, но перекрывающуюся функциональность по сравнению с функцией Sankey и может создавать графики, подобные этой:

введите описание изображения здесь

Если вы хотите сделать это с помощью R, ваша лучшая ставка, похоже, будет предложением @Roman – взломать функцию SankeyR . Например, ниже мое очень быстрое исправление – просто ориентируйте метки по вертикали, смещение их смещения и уменьшите шрифт для входных реферальных слов, чтобы он выглядел немного лучше. Эта модификация меняет строки 171 и 223 в функции SankeyR :

  #line171 - change oversized font size of input label fontsize = max(0.5,frInputs[j]*1.5)#1.5 instead of 2.5 #line223 - srt changes from 35 to 90 to orient labels vertically, #and offset adjusts them to get better alignment with arrows text(txtX, txtY, fullLabel, cex=fontsize, pos=4, srt=90, offset=0.1) 

введите описание изображения здесь

Я не туз в тригонометрии, но это действительно то, что вам нужно для изменения направления стрелок. На мой взгляд, это было бы идеально, если бы вы могли отрегулировать потери стрелок, чтобы они были ориентированы горизонтально, а не вертикально. В противном случае, почему мое решение устраняет проблему с ориентацией меток, это не делает диаграмму более читаемой …

В дополнение к rCharts диаграммы Sankey теперь также могут быть сгенерированы в R с помощью googleVis (версия> = 0.5.0). Например, в этом сообщении описывается генерация следующей диаграммы с помощью googleVis: введите описание изображения здесь

Аллювиальный пакет R также сделает это (от « ?alluvial ).

 # install.packages(c("alluvial"), dependencies = TRUE) require(alluvial) # Titanic data tit <- as.data.frame(Titanic) # 4d alluvial( tit[,1:4], freq=tit$Freq, border=NA, hide = tit$Freq < quantile(tit$Freq, .50), col=ifelse( tit$Class == "3rd" & tit$Sex == "Male", "red", "gray") ) 

введите описание изображения здесь

plotly имеет ту же мощность, что networkD3 пакет networkD3 ( пример ссылки ).

введите описание изображения здесь

Судя по этим определениям, эта функция, как и Parallel Sets Plot, не обладает способностью разделять и комбинировать streamи (т. Е. Через несколько переходов).

Поскольку диаграммы Санки являются ориентированными взвешенными графами , может оказаться полезным пакет, такой как qgraph .

Функция SankeyR обеспечивает более четкие метки, если сортировать потери в порядке убывания, поскольку текст помещается ближе к головам стрелки без перекрытия.

посмотрите на //sankeybuilder.com, поскольку он предлагает готовое решение, в котором вы можете загружать свои данные и воспроизводить изменения с течением времени. Переход работает хорошо (похоже на демонстрацию youtube в вашем вопросе). Если вы загружаете демонстрационную версию SankeyTrend, она включает в себя много временных интервалов (Годы данных). После загрузки (строит sankeys автоматически), нажмите кнопку воспроизведения в правом верхнем углу страницы для воспроизведения временных интервалов, вы можете даже приостановить и возобновить время. Демо-url здесь: SankeyTrend Надеюсь, это поможет вашему поиску идеальной диаграммы Sankey.

Просто откройте полученный пакет, который использует аллювиальную диаграмму для визуализации этапов рабочего процесса. Поскольку история сохраняется, когда используется аллювиальная форма, в ребрах нет кроссоверов.

https://github.com/claytontstanley/shiny.alluvial

введите описание изображения здесь

Interesting Posts

Использование распространения с повторяющимися идентификаторами для строк

«FOUNDATION_EXPORT» и «extern»

Эффективный способ поиска кодировки любого файла

Запуск сценария подключения при загрузке, на ubuntu или правильное использование / etc / networks

Не удается получить доступ к компьютеру в сети Windows (0x80070035 Сетевой путь не найден)

Избегайте корпоративных заблокированных URL-адресов, когда в Cisco VPN

Как преобразовать список, состоящий из вектора разной длины в полезный кадр данных в R?

Как подавить предупреждения о неиспользованном параметре в C?

Как управлять streamом событий с помощью RX?

Извлечение текста pdf в Objective C

новое ключевое слово в сигнатуре метода

wget для загрузки файла и сохранения в виде другого имени файла

Как реализовать перечисление с дженериками?

Инъекция зависимостей против заводского шаблона

Как визуализировать представление ASP.NET MVC в формате PDF

Давайте будем гением компьютера.