#' Network visualization clustering options - outliers
#'
#' Network visualization clustering options - outliers
#'
#' @param graph : a visNetwork object
#' @param clusterFactor : Number, from 0 to 1. 0.9 by default
#' @param stabilize : Boolean, default to false
#'
#' @examples
#'
#' nodes <- data.frame(id = 1:10)
#' edges <- data.frame(from = c(1,1,10,2,6,7,8,9,10),
#' to = c(2,3,4,5,2,5,6,7,9))
#'
#' visNetwork(nodes, edges) %>%
#' visClusteringOutliers(1)
#'
#'
#' @export
visClusteringOutliers <- function(graph, clusterFactor = 0.9, stabilize = FALSE){
if(any(class(graph) %in% "visNetwork_Proxy")){
stop("Can't use visClusteringOutliers with visNetworkProxy object")
}
if(!any(class(graph) %in% "visNetwork")){
stop("graph must be a visNetwork object")
}
clusteringOutliers <- list(clusterFactor = clusterFactor, stabilize = stabilize)
graph$x$clusteringOutliers <- mergeLists(graph$x$clusteringOutliers, clusteringOutliers)
graph
}
#' Network visualization clustering options - by color
#'
#' Network visualization clustering options - by color.
#'
#' @param graph : a visNetwork object
#' @param colors : Character/vector. colors we want to cluster
#' @param label : Character. Label put before value(s). See example
#' @param shape : Character. Shape of cluster(s) if different shapes between nodes or \code{force = T}. "database" per default
#' @param force : If \code{force = FALSE}, Set shape of nodes if all equal, else directly default shape
#'
#' @examples
#'
#' set.seed(124)
#' nodes <- data.frame(id = 1:10, color = c(rep("blue", 6), rep("red", 3), rep("green", 1)))
#' edges <- data.frame(from = round(runif(6)*10), to = round(runif(6)*10))
#'
#' visNetwork(nodes, edges) %>%
#' visClusteringByColor(colors = c("blue"))
#'
#' nodes <- data.frame(id = 1:10, label = paste("Label", 1:10),
#' group = sample(c("A", "B"), 10, replace = TRUE))
#' edges <- data.frame(from = c(2,5,10), to = c(1,2,10))
#'
#' visNetwork(nodes, edges) %>%
#' visGroups(groupname = "A", color = "red", shape = "square") %>%
#' visGroups(groupname = "B", color = "yellow", shape = "triangle") %>%
#' visClusteringByColor(colors = c("red"), label = "With color ") %>%
#' visClusteringByGroup(groups = c("B"), label = "Group : ") %>%
#' visLegend()
#'
#' visNetwork(nodes, edges) %>%
#' visGroups(groupname = "A", color = "red", shape = "triangle") %>%
#' visGroups(groupname = "B", color = "yellow", shape = "triangle") %>%
#' visClusteringByGroup(groups = c("A","B")) %>%
#' visLegend()
#' @export
visClusteringByColor <- function(graph, colors, label = "Cluster on color : ",
shape = "database", force = FALSE){
if(any(class(graph) %in% "visNetwork_Proxy")){
stop("Can't use visClusteringByColor with visNetworkProxy object")
}
if(!any(class(graph) %in% "visNetwork")){
stop("graph must be a visNetwork object")
}
shape <- rep(shape, length(colors))[1:length(colors)]
force <- rep(force, length(colors))[1:length(colors)]
if(length(colors) == 1){
colors <- list(colors)
}
clusteringColor<- list(colors = colors, label = label, shape = shape, force = force)
graph$x$clusteringColor <- clusteringColor
graph
}
#' Network visualization clustering options - by hubsize
#'
#' Network visualization clustering options - by hubsize
#'
#' @param graph : a visNetwork object
#' @param size : Integer. This method checks all nodes in the network and those with a equal or higher amount of edges than specified with size argument. If size is null (default), the size will be determined as the average value plus two standard deviations.
#'
#' @examples
#'
#' set.seed(124)
#' nodes <- data.frame(id = 1:10, color = c(rep("blue", 6), rep("red", 3), rep("green", 1)))
#' edges <- data.frame(from = round(runif(6)*10), to = round(runif(6)*10))
#'
#' visNetwork(nodes, edges) %>%
#' visClusteringByHubsize()
#'
#' visNetwork(nodes, edges) %>%
#' visClusteringByHubsize(size = 2)
#'
#' @export
visClusteringByHubsize <- function(graph, size = NULL){
if(any(class(graph) %in% "visNetwork_Proxy")){
stop("Can't use visClusteringByHubsize with visNetworkProxy object")
}
if(!any(class(graph) %in% "visNetwork")){
stop("graph must be a visNetwork object")
}
if(is.null(size)){
clusteringHubsize <- list(size = 0)
}else{
clusteringHubsize <- list(size = size)
}
graph$x$clusteringHubsize <- clusteringHubsize
graph
}
#' Network visualization clustering options - by group
#'
#' Network visualization clustering options - by group.
#'
#' @param graph : a visNetwork object
#' @param groups : Character/vector. groups we want to cluster
#' @param label : Character. Label put before value(s). See example
#' @param shape : Character. Shape of cluster(s) if different shapes between nodes or \code{force = T}. "database" per default
#' @param color : Character. Color of cluster(s) if different colors between nodes or \code{force = T}. "grey" per default
#' @param force : If \code{force = FALSE}, Set shape and color of nodes if all equal, else directly default shape and color
#' @param scale_size : Set size based on cluster population ? Default to TRUE.
#'
#' @examples
#'
#'
#' nodes <- data.frame(id = 1:10, label = paste("Label", 1:10),
#' group = sample(c("A", "B"), 10, replace = TRUE))
#' edges <- data.frame(from = c(2,5,10), to = c(1,2,10))
#'
#' visNetwork(nodes, edges) %>%
#' visGroups(groupname = "A", color = "red", shape = "database") %>%
#' visGroups(groupname = "B", color = "yellow", shape = "triangle") %>%
#' visClusteringByGroup(groups = c("B"), label = "Group : ",
#' shape = "ellipse", color = "blue", force = TRUE) %>%
#' visLegend()
#'
#' @export
visClusteringByGroup <- function(graph, groups, label = "Cluster on group : ",
shape = "database", color = "grey",
force = FALSE, scale_size = TRUE){
if(any(class(graph) %in% "visNetwork_Proxy")){
stop("Can't use visClusteringByGroup with visNetworkProxy object")
}
if(!any(class(graph) %in% "visNetwork")){
stop("graph must be a visNetwork object")
}
color <- rep(color, length(groups))[1:length(groups)]
shape <- rep(shape, length(groups))[1:length(groups)]
force <- rep(force, length(groups))[1:length(groups)]
scale_size <- rep(scale_size, length(groups))[1:length(groups)]
if(length(groups) == 1){
groups <- list(groups)
}
clusteringGroup<- list(groups = groups, label = label, shape = shape, color = color, force = force, scale_size = scale_size)
graph$x$clusteringGroup <- clusteringGroup
graph
}
#' Network visualization clustering options - by node id
#'
#' Network visualization clustering options - by node id
#'
#' @param graph : a visNetwork object
#' @param nodes : Character/vector. id of nodes we want to cluster
#'
#' @examples
#'
#' set.seed(124)
#' nodes <- data.frame(id = 1:10, color = c(rep("blue", 6), rep("red", 3), rep("green", 1)))
#' edges <- data.frame(from = round(runif(6)*10), to = round(runif(6)*10))
#'
#' visNetwork(nodes, edges) %>%
#' visClusteringByConnection(nodes = 9)
#'
#' @export
visClusteringByConnection <- function(graph, nodes){
if(any(class(graph) %in% "visNetwork_Proxy")){
stop("Can't use visClusteringByConnection with visNetworkProxy object")
}
if(!any(class(graph) %in% "visNetwork")){
stop("graph must be a visNetwork object")
}
if(length(nodes) == 1){
nodes <- list(nodes)
}
clusteringConnection<- list(nodes = nodes)
graph$x$clusteringConnection <- clusteringConnection
graph
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.