Как добавить метки оси с помощью networkD3 в R
networkD3 — это пакет R, используемый для создания сетевого графика D3 (Data-Driven Documents). networkd3 создан с использованием пакета htmlwidget. Как следует из названия сети, этот граф может быть построен в форме фрейма данных узла и края. затем он выполнит физическое моделирование, чтобы определить наиболее выгодную диаграмму в трех измерениях. Он используется для создания сети D3 Javascript, дерева, дендрограммы, графика Санки и т. д.
В пакете R уже присутствует множество библиотек визуализации. Например ggplot, Plotly, igraph и т.д. Но не все библиотеки используются для создания графиков сетевого типа и в 3D графиках его тоже нет. Это основная цель, почему это сделано.
Syntax: sankeyNetwork( Links, Nodes, Source, Target, Value, NodeID, NodeGroup = NodeID, LinkGroup = NULL, units = “”, colourScale = NULL, fontSize = 7, fontFamily = NULL, nodeWidth = 15, nodePadding = 10, margin = NULL, height = NULL, width = NULL, iterations = 32, sinksRight = TRUE )
Parameters:
- Links: dataframe represent link between source and target (node).
- Nodes: dataframe contain node properties
- Source: character string of source node
- Target: character string of target node
- Value: character string of distance value between nodes
- NodeID: node name
- NodeGroup: character string of the nodeIDs in nodes
- LinkGroup: character string for link between groups
- Units: character string to specify physical unit(value)
- colourscale: specify color scale
- nodeWidth: width of node
- nodePadding: padding between node
- sinksRight: Boolean. If it is True, last node moves to right border of graph
Создание простого графика sankeyNetwork с заголовком, подзаголовком и метками
Шаг: 1 Импортируйте необходимую библиотеку в Rstudio.
R
library(dplyr)library(networkD3)library(htmlwidgets)library(manipulateWidget)library(htmltools) |
Шаг: 2 Создайте сетевые данные в формате исходно-целевого фрейма данных.
- Здесь мы связываем узлы A->D, B->E и C->F и присваиваем 3 значения каждой ссылке. итоговая таблица будет выглядеть как изображение таблицы myDataframe.
- Таблица узлов содержит уникальную запись каждого узла.
- IDsource и IDtarget — это строковые символы исходного и целевого узлов.
- Функция match будет сопоставлять два столбца и создавать таблицу соответствия из 1. Но мы вычитаем на «-1», чтобы она могла начинаться с 0-го символа, например, для узла A это 0, узла B это 1 и так далее.
R
# Create valuesSource_Node <- c("A","B","C","A","B", "C","A","B","C")Target_category <- c("D","E","F","D", "E","F","D","E","F")Frequency <- c(1,2,3,4,5,6,7,8,9)myDataframe <- data.frame(Source_Node, Target_category,Frequency)# Node tablenodes <- data.frame(name=c(as.character(myDataframe$Source_Node), as.character(myDataframe$Target_category)) %>% unique())# IDsource and IDtarget string character formatmyDataframe$IDsource=match(myDataframe$Source_Node, nodes$name)-1myDataframe$IDtarget=match(myDataframe$Target_category, nodes$name)-1 |
Выход:
Шаг: 3 Создайте простую сетевую диаграмму Sankey.
В соответствии с приведенным выше синтаксисом sankeyNetwork мы назначаем некоторые параметры для генерации нашего вывода.
R
graph1 <- sankeyNetwork(Links = myDataframe, Nodes = nodes, Source = "IDsource", Target = "IDtarget", Value = "Frequency", NodeID = "name", sinksRight=FALSE)# view graphgraph1 |
Выход:
Шаг: 4 Добавьте заголовок и подзаголовок в графике1.
- Чтобы присвоить заголовок, мы можем использовать функцию prependContent из инструмента htmlwidgets.
- Создайте два тега h1 и h2 с текстовым описанием и стилем.
- добавьте эти теги в наш вышеприведенный график1, объединив все эти теги в функции prependContent.
R
graph2 <- htmlwidgets::prependContent(graph1, htmltools::tags$h1( "GeeksForGeeks Title", style="text-align:center;color:#007500; "), htmltools::tags$h2( "GeeksForGeeks Subtitle", style="color:#00D100;text-align:center;"))# view graphgraph2 |
Выход:
Шаг: 5 Добавьте левую и правую метки в networkGraph.
- создайте левый тег как leftTx и правый тег как rightTx.
- Теперь, чтобы объединить leftTx, rightTx и graph2, используйте combWidget из библиотеки managewidget.
- combWidget принимает, график, заголовок, левый столбец, правый столбец и номер строки в качестве параметров и объединяет все эти экземпляры в один.
Syntax: combineWidgets( list = NULL, nrow = NULL, ncol = NULL, title = NULL, rowsize = 1, colsize = 1, byrow = TRUE, titleCSS = “”, header = NULL, footer = NULL, leftCol = NULL, rightCol = NULL, width = NULL, height = NULL )
R
# create left-right labelleftTx = tags$div( style="max-width: 30vw; height: 100%; display: flex; align-items: center; justify-content: center;", tags$p("This is left side label"))rightTx = tags$p("This is right side label", style="max-width:30vw")# final output with label. combineWidget# can be use by manipulateWidget.graph3 <- combineWidgets(graph2, title = tags$h1("With left-right label", style="text-align:center;color:#007500;"), leftCol = leftTx, rightCol = rightTx, nrow = 1)# view graphgraph3 |
Выход: