Как добавить метки оси с помощью 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 values Source_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 table nodes <- data.frame (name= c ( as.character (myDataframe$Source_Node), as.character (myDataframe$Target_category)) %>% unique ()) # IDsource and IDtarget string character format myDataframe$IDsource= match (myDataframe$Source_Node, nodes$name)-1 myDataframe$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 graph graph1 |
Выход:
Шаг: 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 graph graph2 |
Выход:
Шаг: 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 label leftTx = 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 graph graph3 |
Выход: