Title: | Convert a Graph into a D3js Script |
---|---|
Description: | Generator of web pages which display interactive network/graph visualizations with D3js, jQuery and Raphael. |
Authors: | Stephane Cano [aut, cre], Sylvain Gubian [aut], Florian Martin [aut] |
Maintainer: | Stephane Cano <[email protected]> |
License: | GPL-2 |
Version: | 1.35.0 |
Built: | 2024-11-30 03:48:39 UTC |
Source: | https://github.com/bioc/RGraph2js |
Generate javascript code based on general options, options for containers and network data
generateOptionsJSCode(opts)
generateOptionsJSCode(opts)
opts |
|
String containing JS code for component options
Sylvain Gubian [email protected]
Get a RGraph2js compatible adjacency matrix from the provided R object.
getAdjMat(A)
getAdjMat(A)
A |
signed weighted adjacency |
the RGraph2js compatible adjacency matrix
Stephane Cano [email protected], PMP SA.
Generate a list containing parameters for the D3js component's options with default values
getDefaultOptions()
getDefaultOptions()
list
of parameters with default values
w : width of the component in pixels
h : height of the component in pixels
minZoomFactor : float [0,n], 1 means 100%
maxZoomFactor : float [0,n], 1 means 100%
layout_forceLinkDistance : float
If distance is specified, sets the target distance between linked nodes to
the specified value. If distance is not specified, returns the layout's
current link distance, which defaults to 20. Typically, the distance is
specified in pixels; however, the units are arbitrary relative to the
layout's size.
layout_forceCharge : float
If charge is specified, sets the charge strength to the specified value.
If charge is not specified, returns the current charge strength, which
defaults to -900. A negative value results in node repulsion, while a
positive value results in node attraction.
For graph layout, negative values should be used; for n-body simulation,
positive values can be used.
All nodes are assumed to be infinitesimal points with equal charge and mass.
Charge forces are implemented efficiently via the Barnes-Hut algorithm,
computing a quadtree for each tick.
Setting the charge force to zero disables computation of the quadtree, which
can noticeably improve performance if you do not need n-body forces.
layout_linkStrength : float [0,1]
If strength is specified, sets the strength (rigidity) of links to the
specified value in the range [0,1].
If strength is not specified, returns the layout's current link strength,
which defaults to 1.
layout_friction : float
If friction is specified, sets the friction coefficient to the specified
value. If friction is not specified, returns the current coefficient,
which defaults to 0.9.
The name of this parameter is perhaps misleading; it does not correspond to
a standard physical coefficient of friction. Instead, it more closely
approximates velocity decay: at each tick of the simulation,
the particle velocity is scaled by the specified friction.
Thus, a value of 1 corresponds to a frictionless environment,
while a value of 0 freezes all particles in place.
Values outside the range [0,1] are not recommended and may have
destabilizing effects.
layout_chargeDistance : float
If distance is specified, sets the maximum distance over which charge forces
are applied.
If distance is not specified, returns the current maximum charge distance,
which defaults to infinity.
Specifying a finite charge distance improves the performance of the force
layout and produces a more localized layout; distance-limited charge forces
are especially useful in conjunction with custom gravity.
layout_theta : float
If theta is specified, sets the Barnes-Hut approximation criterion to the
specified value. If theta is not specified, returns the current value, which
defaults to 0.8. Unlike links, which only affect two linked nodes,
the charge force is global: every node affects every other node, even if
they are on disconnected subgraphs.
To avoid quadratic performance slowdown for large graphs, the force layout
uses the Barnes-Hut approximation which takes O(n log n) per tick.
For each tick, a quadtree is created to store the current node positions;
then for each node, the sum charge force of all other nodes on the given
node are computed. For clusters of nodes that are far away, the charge force
is approximated by treating the distance cluster of nodes as a single,
larger node. Theta determines the accuracy of the computation: if the ratio
of the area of a quadrant in the quadtree to the distance between a node to
the quadrant's center of mass is less than theta, all nodes in the given
quadrant are treated as a single, larger node rather than computed
individually.
layout_gravity : float
If gravity is specified, sets the gravitational strength to the specified
value. If gravity is not specified, returns the current gravitational
strength, which defaults to 0.1. The name of this parameter is perhaps
misleading; it does not correspond to physical gravity (which can be
simulated using a positive charge parameter).
Instead, gravity is implemented as a weak geometric constraint similar to a
virtual spring connecting each node to the center of the layout's size.
This approach has nice properties: near the center of the layout,
the gravitational strength is almost zero, avoiding any local distortion of
the layout; as nodes get pushed farther away from the center, the
gravitational strength becomes strong in linear proportion to the distance.
Thus, gravity will always overcome repulsive charge forces at some
threshold, preventing disconnected nodes from escaping the layout.
Gravity can be disabled by setting the gravitational strength to zero.
If you disable gravity, it is recommended that you implement some other
geometric constraint to prevent nodes from escaping the layout, such as
constraining them within the layout's bounds.
maxLayoutIterations : the max allowed number to perform
displayNetworkEveryNLayoutIterations : 1 means always, 0 to display only on
layout completion
optimizeDisplayWhenLayoutRunning : boolean, TRUE to simplify the display
when the layout engine is running
FALSE otherwise.
nodeSize : size of the node in pixels
nodeRoundedCornerPixels : apply rounded corners on rectangle like shapes
displayNodeLabels : boolean, display node names besides them
nodeBorderColor : RGB hex color
leadingNodeBorderColor : RGB hex color
noneLeadingNodeOpacity : float [0,1], 1 means fully opaque
nodeLabelsColor : RGB hex color, example "#444444"
nodeLabelsFont : example "6px sans-serif"
dragNodeBorderColor : the node border color to apply on dragging
selectNodeBorderColor : the node border color to apply on left-click,
"#ff0000"
displayBarPlotsInsideNodes : boolean, display barplots inside nodes
barplotInNodeTooltips : boolean, display barplots inside node's tooltips
barplotInsideNodeBorderColor : the barplot borders color, example '#000000'
barplotInsideNodeBorderWidth : the barplot borders width in pixels, example
'2px'
nodeTooltipOpacity : float [0,1], 1 means fully opaque (for link tooltips as
well)
displayBarplotTooltips : boolean, (dis/en)able tooltips for each barplot's
bar
nodeTooltipActivationDelay : milliseconds (for link tooltips as well)
nodeTooltipDeactivationDelay : milliseconds (for link tooltips as well)
barplotInNodeTooltipsFontSize : pixels
enableNodeDragging : boolean, allow/deny node dragging
jsFunctionToCallOnNodeClick : name of the javascript function to call
on node click
example:
To call the following function
var myfunction = function(nodeObj) alert(nodeObj.name); ;
you should set jsFunctionToCallOnNodeClick='myfunction'
displayColorScale : show a color scale in the toolbar
scaleGradient : define the linear color gradient
Linear gradient format is "<angle>-<colour>[-<colour>[:<offset>]]*-<colour>"
examples: "90-#fff-#000" => 90 degree gradient from white to black
"0-#fff-#f00:20-#000" -> 0 degree gradient from white via red (at 20%)
to black.
scaleLabelsFontFamily : example "monospace"
scaleLabelsFontSize : in pixels
scaleHeight : in pixels
scaleTickSize : in pixels
scaleTicksPercents : to draw a tick every 20%: "[20,40,60,80,100]"
exportCGI : boolean, enable a CGI convertion in the export function,
permit only the SVG export otherwise
Sylvain Gubian [email protected]
v <- c(0, 0, 1, 1, 0, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0) a <- matrix(v, 3, 5) colnames(a) <- LETTERS[1:5] rownames(a) <- LETTERS[1:3] opts <- getDefaultOptions() opts$nodeLabelsFont <- '16px sans-serif' g <- graph2js(A=a, opts=opts)
v <- c(0, 0, 1, 1, 0, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0) a <- matrix(v, 3, 5) colnames(a) <- LETTERS[1:5] rownames(a) <- LETTERS[1:3] opts <- getDefaultOptions() opts$nodeLabelsFont <- '16px sans-serif' g <- graph2js(A=a, opts=opts)
Function wich generates a list containing parameters for Tools in the D3js component with default values
getDefaultToolParameters()
getDefaultToolParameters()
list
of parameters with default values
Sylvain Gubian [email protected]
data.frame
from Adjacency matrix and propertiesCreate Edges data.frame
from Adjacency matrix and properties
getEdgesDataFrame(A, eGlobal = NULL, eProp = NULL)
getEdgesDataFrame(A, eGlobal = NULL, eProp = NULL)
A |
signed weighted adjacency matrix |
eGlobal |
A |
eProp |
A |
A data.frame
Sylvain Gubian [email protected]
v <- c(0, 0, 1, 1, 0, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0) a <- matrix(v, 3, 5) colnames(a) <- LETTERS[1:5] rownames(a) <- LETTERS[1:3] eGlobal <- list(color="#5555ff") eProp <- data.frame(from=c('A','C'), to=c('B', 'A'), width=c(2,2)) getEdgesDataFrame(A=a, eGlobal=eGlobal, eProp=eProp)
v <- c(0, 0, 1, 1, 0, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0) a <- matrix(v, 3, 5) colnames(a) <- LETTERS[1:5] rownames(a) <- LETTERS[1:3] eGlobal <- list(color="#5555ff") eProp <- data.frame(from=c('A','C'), to=c('B', 'A'), width=c(2,2)) getEdgesDataFrame(A=a, eGlobal=eGlobal, eProp=eProp)
Generate a HTML table node code for component based on template
getHTMLContainerCode(id, toolParam)
getHTMLContainerCode(id, toolParam)
id |
String for component identification |
toolParam |
|
String which is the HTML code generated
Sylvain Gubian [email protected]
Generate a HTML style code for component based on template
getHTMLStyleCode(id)
getHTMLStyleCode(id)
id |
String for component identification |
String which is the HTML style code generated
Sylvain Gubian [email protected]
Generate javascript code based on general options and network data
getJSCode(dataJson, id, opts, toolParam)
getJSCode(dataJson, id, opts, toolParam)
dataJson |
|
id |
String for component identification |
opts |
|
toolParam |
|
String corresponding to JS code
Sylvain Gubian [email protected]
data.frame
from Adjacency matrix and properties
for specific nodesCreate Nodes data.frame
from Adjacency matrix and properties
for specific nodes
getNodesDataFrame(A, nGlobal = NULL, nProp = NULL)
getNodesDataFrame(A, nGlobal = NULL, nProp = NULL)
A |
signed weighted adjacency matrix |
nGlobal |
A |
nProp |
A |
A data.frame
Sylvain Gubian [email protected]
v <- c(0, 0, 1, 1, 0, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0) a <- matrix(v, 3, 5) colnames(a) <- LETTERS[1:5] rownames(a) <- LETTERS[1:3] nGlobal <- list(color="#dedeff") nProp <- data.frame(shape=c('triangle', 'lozenge')) rownames(nProp) <- c('C', 'E') getNodesDataFrame(A=a, nGlobal=nGlobal, nProp=nProp)
v <- c(0, 0, 1, 1, 0, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0) a <- matrix(v, 3, 5) colnames(a) <- LETTERS[1:5] rownames(a) <- LETTERS[1:3] nGlobal <- list(color="#dedeff") nProp <- data.frame(shape=c('triangle', 'lozenge')) rownames(nProp) <- c('C', 'E') getNodesDataFrame(A=a, nGlobal=nGlobal, nProp=nProp)
Function wich generates a UUID version 4
getUUID(seed = NULL)
getUUID(seed = NULL)
seed |
Integer for seeding the R random generator |
String corresponding to the UUID generated.
Generate the JSON code using D3js that draws A network from Adjacency matrix and edges, nodes properties.
graph2js(A, innerValues = NULL, innerColors = NULL, innerTexts = NULL, starplotValues = NULL, starplotColors = NULL, starplotLabels = NULL, starplotTooltips = NULL, starplotUrlLinks = NULL, starplotSectorStartedRad = NULL, starplotCircleFillColor = NULL, starplotCircleFillOpacity = NULL, nodesGlobal = NULL, nodesProp = NULL, edgesGlobal = NULL, edgesProp = NULL, outputDir = NULL, filename = NULL, opts = list(), userCssStyles = NULL, toolsPar = list(), id = getUUID())
graph2js(A, innerValues = NULL, innerColors = NULL, innerTexts = NULL, starplotValues = NULL, starplotColors = NULL, starplotLabels = NULL, starplotTooltips = NULL, starplotUrlLinks = NULL, starplotSectorStartedRad = NULL, starplotCircleFillColor = NULL, starplotCircleFillOpacity = NULL, nodesGlobal = NULL, nodesProp = NULL, edgesGlobal = NULL, edgesProp = NULL, outputDir = NULL, filename = NULL, opts = list(), userCssStyles = NULL, toolsPar = list(), id = getUUID())
A |
signed weighted adjacency |
innerValues |
A |
innerColors |
A |
innerTexts |
A |
starplotValues |
A |
starplotColors |
A |
starplotLabels |
A |
starplotTooltips |
A |
starplotUrlLinks |
A |
starplotSectorStartedRad |
A |
starplotCircleFillColor |
A |
starplotCircleFillOpacity |
A |
nodesGlobal |
A |
nodesProp |
A |
edgesGlobal |
A |
edgesProp |
A |
outputDir |
String that corresponds to the path to a folder or
file where js code and dependencies will be generated. If |
filename |
String the name of the result HTML file, a name will be automatically generated if not provided and by default. |
opts |
|
userCssStyles |
String containing user css styles. (See starplot demo) |
toolsPar |
|
id |
|
A list containing information of the generated js code.
v <- c(0, 0, 1, 1, 0, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0) a <- matrix(v, 3, 5) colnames(a) <- LETTERS[1:5] rownames(a) <- LETTERS[1:3] g <- graph2js(a)
v <- c(0, 0, 1, 1, 0, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0) a <- matrix(v, 3, 5) colnames(a) <- LETTERS[1:5] rownames(a) <- LETTERS[1:3] g <- graph2js(a)
Generates JSON string correponding the the graph description
graph2json(ndf, edf, innerValues = NULL, innerColors = NULL, innerTexts = NULL, starplotColors = NULL, starplotValues = NULL, starplotLabels = NULL, starplotTooltips = NULL, starplotUrlLinks = NULL, starplotSectorStartRad = NULL, starplotCircleFillColor = NULL, starplotCircleFillOpacity = NULL)
graph2json(ndf, edf, innerValues = NULL, innerColors = NULL, innerTexts = NULL, starplotColors = NULL, starplotValues = NULL, starplotLabels = NULL, starplotTooltips = NULL, starplotUrlLinks = NULL, starplotSectorStartRad = NULL, starplotCircleFillColor = NULL, starplotCircleFillOpacity = NULL)
ndf |
A |
edf |
A |
innerValues |
A |
innerColors |
A |
innerTexts |
A |
starplotColors |
A |
starplotValues |
A |
starplotLabels |
A |
starplotTooltips |
A |
starplotUrlLinks |
A |
starplotSectorStartRad |
A |
starplotCircleFillColor |
A |
starplotCircleFillOpacity |
A |
A JSON string with formatting
Sylvain Gubian [email protected]
v <- c(0, 0, 1, 1, 0, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0) a <- matrix(v, 3, 5) colnames(a) <- LETTERS[1:5] rownames(a) <- LETTERS[1:3] nGlobal <- list(color="#dedeff") nProp <- data.frame(shape=c('triangle', 'lozenge')) rownames(nProp) <- c('C', 'E') ndf <-getNodesDataFrame(A=a, nGlobal=nGlobal, nProp=nProp) eGlobal <- list(color="#5555ff") eProp <- data.frame(from=c('A','C'), to=c('B', 'A'), width=c(2,2)) edf <- getEdgesDataFrame(A=a, eGlobal=eGlobal, eProp=eProp) graph2json(ndf=ndf, edf=edf)
v <- c(0, 0, 1, 1, 0, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0) a <- matrix(v, 3, 5) colnames(a) <- LETTERS[1:5] rownames(a) <- LETTERS[1:3] nGlobal <- list(color="#dedeff") nProp <- data.frame(shape=c('triangle', 'lozenge')) rownames(nProp) <- c('C', 'E') ndf <-getNodesDataFrame(A=a, nGlobal=nGlobal, nProp=nProp) eGlobal <- list(color="#5555ff") eProp <- data.frame(from=c('A','C'), to=c('B', 'A'), width=c(2,2)) edf <- getEdgesDataFrame(A=a, eGlobal=eGlobal, eProp=eProp) graph2json(ndf=ndf, edf=edf)