Ответ 1
Этот график можно создать через пакет networkD3
. Это позволяет создавать интерактивные диаграммы sankey. Здесь вы можете найти . Я также добавил скриншот, чтобы вы поняли, как он выглядит.
Я пытаюсь представить свой поток данных с помощью диаграммы Санки в R.
Я нашел этот пост в блоге, связанный с R script, который создает диаграмму Санки, к сожалению, он довольно сырой и несколько ограниченный (см. ниже для примера кода и данных).
Кто-нибудь знает о других сценариях, а может быть, и о пакете, который более развит? Моя конечная цель - визуализировать как поток данных, так и проценты по относительным размерам компонентов диаграммы, например, в этих примерах диаграмм Sankey.
Я разместил несколько схожий вопрос в списке 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")
Диаграмма Санки, созданная с помощью приведенного выше кода,
Этот график можно создать через пакет networkD3
. Это позволяет создавать интерактивные диаграммы 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)
Я не туз в тригонометрии, но это действительно то, что вам нужно для изменения направления стрелок. На мой взгляд, это было бы идеально, если бы вы могли отрегулировать потери стрелок, чтобы они были ориентированы горизонтально, а не вертикально. В противном случае, почему мое решение устраняет проблему с ориентацией меток, это не делает диаграмму более читаемой...
Я создал пакет (riverplot), который имеет немного другую, но перекрывающуюся функциональность по сравнению с функцией Sankey и может создавать графики, подобные этой:
В дополнение к rCharts диаграммы Sankey теперь также могут быть сгенерированы в R с googleVis (версия >= 0.5.0). Например, этот post описывает создание следующей диаграммы с помощью googleVis:
R аллювиальный пакет также сделает это.
alluvial( as.data.frame(Titanic)[,1:4], freq=tit$Freq, border=NA,
hide = tit$Freq < quantile(tit$Freq, .50),
col=ifelse( tit$Class == "3rd" & tit$Sex == "Male", "red", "gray") )
Судя по этим определениям эта функция, как и Parallel Sets Plot, не обладает способностью разбивать и комбинировать потоки (т.е. через более чем один переход).
Так как диаграммы Sankey представляют собой ориентированные взвешенные графики, пакет, например qgraph может быть полезно.
Функция SankeyR
обеспечивает более четкие метки, если сортировать потери в порядке убывания, поскольку текст помещается ближе к головам стрелок без перекрытия.
plotly имеет ту же мощность, что и networkD3
package (пример ссылки).
посмотрите //sankeybuilder.com, так как он предлагает готовое решение, в котором вы можете загружать свои данные и воспроизводить изменения с течением времени. Переход работает хорошо (похоже на демонстрацию youtube в вашем вопросе). Если вы загружаете демонстрационную версию SankeyTrend, она включает в себя много временных интервалов (Годы данных). После загрузки (строит sankeys автоматически), нажмите кнопку воспроизведения в правом верхнем углу страницы для воспроизведения временных интервалов, вы можете даже приостановить и возобновить время. Демо-url здесь: SankeyTrend Надеюсь, это поможет вашему поиску идеальной диаграммы Санки.
Просто откройте исходный пакет, который использует аллювиальную диаграмму для визуализации этапов рабочего процесса. Поскольку история сохраняется, когда используется аллювиальная форма, в ребрах нет кроссоверов.