Как добавить метки оси с помощью networkD3 в R

Опубликовано: 8 Сентября, 2022

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

Выход: