%\VignetteIndexEntry{RGraph2js} %\VignettePackage{RGraph2js} %\VignetteEngine{utils::Sweave} \documentclass[a4paper]{article} <>= BiocStyle::latex() @ \newcommand{\exitem}[3] {\item \texttt{\textbackslash#1\{#2\}} #3 \csname#1\endcsname{#2}.} \title{RGraph2js: Usage from an R session} \author{Stephane Cano, Sylvain Gubian, Florian Martin} \begin{document} \maketitle \tableofcontents \newpage \section{Introduction} \Biocpkg{RGraph2js} provides a powerful HTML visualizer to navigate and manipulate graphs/networks. This package has been designed to display results from in-house algorithms on biological networks \cite{Martin2014BMC15238}, where it is required to associate a plot for each node \cite{Poussin02072015}. The package is not limited to this specific usage since it is a general tool to visualize various types of networks. \Biocpkg{RGraph2js} is highly customizable and offers a user-friendly interface. Included features are: \begin{itemize} \item Interactive visualization tool (pan, zoom) \item Customizable appearance \item Customizable graph layout \item Different node connection types support \item Tooltips support \item Node dragging \item Export as a Scalable Vector Graphics (SVG\footnote{\url{https://en.wikipedia.org/wiki/Scalable_Vector_Graphics}}) image \item Barplots and starplots displayable inside the nodes \item Compatibility with most platforms and browsers \item The generated interactive graph can be easily shared \end{itemize} \Biocpkg{RGraph2js} takes the description of a graph/network as input and generates an HTML page the user can open in any recent web browser with SVG (Scalable Vector Graphics) rendering support to visualize it and interact with it. \begin{figure}[!h] \begin{center} \includegraphics[width=0.9\textwidth]{input_output.png} \caption{Overview} \end{center} \end{figure} \subsection{Technology} The \software{D3js}\cite{2011-d3} (Data-Driven Documents) JavaScript library is used to render graphs/networks. \software{Raphael}\cite{2008-Raphael} is another JavaScript library used to render specific in-nodes plots like starplots. \software{JQuery}\cite{2015-jQuery} and \software{JQueryUI}\cite{2015-jQueryUI} are used for the graphical interface and the user interactions. \software{qTip2}\cite{2013-qTip2}, a \software{JQuery} plugin, is used to render advanced tooltips. A SVG (Scalable Vector Graphics) capable browser is required since both \software{D3js} and \software{Raphael} generate SVG code. \bioccomment{An Internet connection is required in order to use external third-party JavaScript libraries, further information is given in the next section} \subsection{External third-party libraries} \software{D3js}, \software{JQuery}, \software{JQueryUI}, \software{qTip2} and \software{Raphael} are used via \software{CDNJS}, the links are: \url{http://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.0/jquery.min.js} \url{http://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js} \url{http://cdnjs.cloudflare.com/ajax/libs/qtip2/2.2.0/basic/ jquery.qtip.min.js} \url{http://cdnjs.cloudflare.com/ajax/libs/qtip2/2.2.0/basic/ imagesloaded.pkg.min.js} \url{http://cdnjs.cloudflare.com/ajax/libs/d3/3.5.6/d3.min.js} \url{http://cdnjs.cloudflare.com/ajax/libs/raphael/2.1.4/raphael-min.js} \url{http://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.10.3/css/base/minified/ jquery-ui.min.css} \url{http://cdnjs.cloudflare.com/ajax/libs/qtip2/2.2.0/basic/ jquery.qtip.min.css} The above URLs are declared in the function \Rfunction{RGraph2js:::getDefaultToolParameters()}. \subsection{Input} The graph/network is defined with a signed and weighted adjacency matrix or with the following R objects from the \Biocpkg{graph} package: \begin{itemize} \item \Robject{graphAM} \item \Robject{graphBAM} \item \Robject{graphNEL} \item \Robject{clusterGraph} \end{itemize} Considering the matrix \Robject{a35}: <>= v <- c(0, 4, 1, 1, 0, 0, -1, 0, 0, 0, -2, 0, 0, 1, 0) a35 <- matrix(v, 3, 5) colnames(a35) <- LETTERS[1:5] rownames(a35) <- LETTERS[1:3] @ ... its graphical representation would be as follows: \begin{figure}[!h] \begin{center} \includegraphics[width=0.5\textwidth]{adjmatrix3x5network.png} \caption{Graph representation} \end{center} \end{figure} \newpage <>= library(xtable) print( xtable( a35, caption="3x5 Signed Weighted Adjacency Matrix", label="tab:one", display=c("d", "d", "d", "d", "d", "d") ), caption.placement="bottom" ) @ Reading the adjacency matrix by rows, gives the following links/edges: Line 1: [A $\rightarrow$ B], [A -$\bullet$ C] Line 2: [B $\rightarrow$ A], [B -$\bullet$ D], [B $\rightarrow$ E] Line 3: [C $\rightarrow$ A] In the adjacency matrix, a value of \begin{itemize} \item \emph{0} means "no connection" \item \emph{1} "$\rightarrow$" "arrow, directional connection" \item \emph{-1} "-|" "-$\bullet$" "dot, directional connection" \end{itemize} \bioccomment{Any bidirectional connection of the same type implies an undirected link marked as "--"} [A $\rightarrow$ B] and [B $\rightarrow$ A] $\Rightarrow$ [A -- B] \bioccomment{Any loop connection, when a node connects with itself, will not be graphically represented} \bioccomment{Edges weights can be directly specified in the adjacency matrix as real numbers} \subsection{Output} The result files will be made available in a temporary folder or in a specified folder of your choice. The folder will contain: \begin{itemize} \item A folder for the images \item The main HTML file \item A JavaScript library \end{itemize} \begin{figure}[!h] \begin{center} \includegraphics[width=0.5\textwidth]{outputFolderContent.png} \caption{Output folder content} \end{center} \end{figure} \newpage \section{Examples} \subsection{Simple Example} This example will show the basics, we will generate a simple network given an adjacency matrix. Define the adjacency matrix \Robject{a1515}: <>= library(RGraph2js) v <- c(1,1,1,0,0,0,0,0,0,0,0,0,0,0,0, 1,1,0,1,1,1,0,0,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,1,0,1,1,0,0,0,0,0,1,0,0,0,0, 0,1,0,1,1,0,0,0,1,0,0,0,0,0,0, 0,1,0,0,0,0,1,1,0,0,0,0,0,0,0, 0,0,0,0,0,1,1,0,0,0,0,0,0,0,0, 0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,1,1,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, 0,0,0,1,0,0,0,0,0,0,0,1,1,1,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,1, 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1 ) a1515 <- matrix(v, 15, 15) colnames(a1515) <- LETTERS[1:15] rownames(a1515) <- LETTERS[1:15] @ <>= library(xtable) print( xtable( a1515, caption="15x15 Adjacency matrix", label="tab:two", display=c("d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d") ), caption.placement="bottom" ) @ Define the output destination folder \Robject{outputDir} and generate the graph with the function \Rfunction{graph2js()} <<>= outputDir <- file.path(tempdir(), "RGraph2js_simpleExample") g <- graph2js(a1515, outputDir=outputDir) @ Open the \Robject{outputDir} in your browser and click on the html file. You should be able to see something similar to this: \begin{figure}[!h] \begin{center} \includegraphics[width=0.8\textwidth]{simpleExample.png} \caption{Simple example} \end{center} \end{figure} \newpage \subsection{Visual appearance} In the previous example, we only specified the adjacency matrix. This example will show how to customize the visual appearance of both nodes and links. The properties of edges (links) can be specified globally or for each edge. \Robject{edgesGlobal} below is applied to all edges, where \Robject{edgesProp} is only applied to the edges D to E, D to B and B to E. <>= edgesGlobal <- list(width=2, color="#0000ff") edgesProp <- data.frame(from=c("D", "D", "B"), to=c("E", "B", "E"), width=c(5, 5, 5)) @ We can also define \Robject{edgesProp} by starting with its default value returned by the function \Rfunction{getEdgesDataFrame()}. The first column is an automatically generated unique identifier, followed by the columns \emph{from}, \emph{to} and \emph{type} which are automatically set according to the given adjacency matrix \Robject{a1515}. \emph{color}, \emph{width}, \emph{link} and \emph{tooltip} have default values we can customize. \begin{itemize} \item \emph{color} : edge color formatted as hex RGB \item \emph{width} : edge tickness \item \emph{link} : URL associated with the edge \item \emph{tooltip} : tooltip content with HTML support \end{itemize} <>= getEdgesDataFrame(a1515) @ Similarly, node properties can be global or specific. <>= nodesGlobal <- list(color="#ebebeb") nodesProp <- data.frame(shape=c("triangle", "lozenge", "rect"), color=c("#ff0000", "#0000ff", "#ffff00")) rownames(nodesProp) <- c("C", "E", "G") @ Since \Robject{nodesProp} holds node specific properties, row names are mandatory. We can call the \Rfunction{getNodesDataFrame()} to define \Robject{nodesProp}. The returned data frame contains default values for each node. \begin{itemize} \item \emph{color} : color of t he node in hex RGB format \item \emph{shape} : the shape to use ("rect", "circle", "lozenge", "triangle") \item \emph{link} : URL associated with the node \item \emph{tooltip} : tooltip content with HTML support \end{itemize} <>= getNodesDataFrame(A=a1515, nGlobal=nodesGlobal, nProp=nodesProp) @ Call the \Rfunction{graph2js()} function as before and specify both nodes and edges properties. <<>= outputDir <- file.path(tempdir(), "RGraph2js_visualAppearance") g <- graph2js(a1515, nodesGlobal=nodesGlobal, edgesGlobal=edgesGlobal, nodesProp=nodesProp, edgesProp=edgesProp, outputDir=outputDir, file="index.html") @ \begin{center} \begin{figure}[!h] \includegraphics[width=0.8\textwidth]{visualAppearance.png} \caption{Appearance customized} \end{figure} \end{center} Going further, several options can be changed via the \Robject{opts} parameter of the function \Rfunction{graph2js()}. \Robject{opts} defaults to the value returned by the function \Rfunction{getDefaultOptions()}. Please check out the manual for further details. \newpage \subsection{Fixed node positons} We start from a simple adjacency matrix: <>= v <- c(0, 0, 1, 1, 0, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0) a35 <- matrix(v, 3, 5) colnames(a35) <- LETTERS[1:5] rownames(a35) <- LETTERS[1:3] @ Then, we specify node coordinates via the node properties. \Robject{x} and \Robject{y} represent the Cartesien coordinates, and \Robject{fixed} means they are immutable. <>= r <- 100 sector <- 2*pi/5 n.prop <- data.frame( x=c(r*cos(1*sector), r*cos(2*sector), r*cos(3*sector), r*cos(4*sector), r*cos(5*sector)), y=c(r*sin(1*sector), r*sin(2*sector), r*sin(3*sector), r*sin(4*sector), r*sin(5*sector)), fixed=c(TRUE,TRUE,TRUE,TRUE,TRUE) ) rownames(n.prop) <- c("A","B","C","D","E") @ Now, we render the graphics. <>= outputDir <- file.path(tempdir(), "RGraph2js_fixedNodes") g <- graph2js(a35, nodesProp=n.prop, outputDir=outputDir) @ \begin{figure}[!h] \begin{center} \includegraphics[width=0.5\textwidth]{fixedNodes.png} \caption{Fixed Node Coordinates Graph} \end{center} \end{figure} \newpage \subsection{Time data or categories} \Biocpkg{RGraph2js} implements a time-step functionality where, at each step, a different set of nodes can be highlighted with thicker borders and different colors. Each time-step is specified by an index starting at 1 and the highlighted nodes and their colors are specified by a dataframe as explained below. Take for instance the following graph definition: <>= v <- c(0, 0, 1, 1, 0, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0) a35 <- matrix(v, 3, 5) colnames(a35) <- LETTERS[1:5] rownames(a35) <- LETTERS[1:3] @ We specify 4 time-steps in the dataframe below using 2 prefixes: \begin{itemize} \item \Robject{leading.nodes.index} specifies the nodes to highlight with thicker border \item \Robject{highlight.index} specifies the colors for thoses leading nodes. \end{itemize} <>= numnodes <- 5 nodesProp <- data.frame(leading.nodes.1=rbinom(numnodes, 1, 1/2), leading.nodes.2=rbinom(numnodes, 1, 1/2), leading.nodes.3=rbinom(numnodes, 1, 1/2), leading.nodes.4=rbinom(numnodes, 1, 1/2), highlight.1=rainbow(numnodes), highlight.2=rainbow(numnodes), highlight.3=rainbow(numnodes), highlight.4=rainbow(numnodes)) rownames(nodesProp) <- LETTERS[1:5] @ Renderering the Graph leads to: <>= outputDir <- file.path(tempdir(), "RGraph2js_timeData") g <- graph2js(a35, nodesProp=nodesProp, outputDir=outputDir) @ \begin{figure}[!h] \begin{center} \includegraphics[width=0.5\textwidth]{timeData.png} \caption{4 Different states} \end{center} \end{figure} Clicking on the \includegraphics[width=10px]{leading_nodes.png} button will expand a new panel at the bottom containing a slider to navigate accross the time steps. \newpage \subsection{Rendering barplots inside nodes} <>= v <- c(0, 0, 1, 1, 0, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0) a35 <- matrix(v, 3, 5) colnames(a35) <- LETTERS[1:5] rownames(a35) <- LETTERS[1:3] @ The \Robject{innerValues} parameter allows us to specify a barplot for each node and \Robject{innerColors} represent the bar colors. The order in both parameters is important for the barplots rendering. <>= numnodes <- 5 innerValues <- matrix(runif(numnodes * 8), numnodes, 8) rownames(innerValues) <- LETTERS[1:5] innerColors <- matrix(rainbow(numnodes * 8), numnodes, 8) rownames(innerColors) <- LETTERS[1:5] @ <>= outputDir <- file.path(tempdir(), "RGraph2js_barplots") g <- graph2js(a35, innerValues=innerValues, innerColors=innerColors, outputDir=outputDir) @ After rendering, here is the result: \begin{figure}[!h] \begin{center} \includegraphics[width=0.5\textwidth]{barplots.png} \caption{Barplots inside nodes} \end{center} \end{figure} An alternate solution would be to display the barplot inside the node tooltips only, as shown below: <>= opts <- getDefaultOptions() opts$displayBarPlotsInsideNodes <- FALSE opts$barplotInNodeTooltips <- TRUE g <- graph2js(a35, opts=opts, innerValues=innerValues, innerColors=innerColors, outputDir=outputDir) @ \begin{figure}[!h] \begin{center} \includegraphics[width=0.5\textwidth]{barplotsInTooltipsOnly.png} \caption{Barplots in tooltips only} \end{center} \end{figure} \newpage \subsection{Rendering starplots inside nodes} <>= v <- c(0, 0, 1, 1, 0, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0) a35 <- matrix(v, 3, 5) colnames(a35) <- LETTERS[1:5] rownames(a35) <- LETTERS[1:3] @ Define a starplot for each node. Each starplot has several parameters: the value (which determines its radius), the opacity, the color, the label, a URL and a tooltip. Additionnaly, a color and opacity can be specified for the starplot background. <>= numnodes <- 5 starplotValues <- matrix(runif(numnodes * 8), numnodes, 8) rownames(starplotValues) <- LETTERS[1:5] starplotColors <- matrix(rainbow(numnodes * 8), numnodes, 8) rownames(starplotColors) <- LETTERS[1:5] labels <- c("Sector1", "Sector2", "Sector3", "Sector4", "Sector5", "Sector6", "Sector7", "Sector8") starplotLabels <- matrix(labels, numnodes, 8) rownames(starplotLabels) <- LETTERS[1:5] starplotTooltips <- matrix(labels, numnodes, 8) rownames(starplotTooltips) <- LETTERS[1:5] # add a url link for each sector urls <- c("http://d3js.org/", "http://jquery.com/", "http://jqueryui.com/", "http://qtip2.com/", "http://raphaeljs.com/", "http://www.bioconductor.org/", "http://cran.r-project.org", "http://journal.r-project.org") starplotUrlLinks <- matrix(urls, numnodes, 8) rownames(starplotUrlLinks) <- LETTERS[1:5] starplotCircleFillColor <- matrix(rainbow(numnodes), numnodes, 1) rownames(starplotCircleFillColor) <- LETTERS[1:5] starplotCircleFillOpacity <- matrix(runif(numnodes,0,1), numnodes, 1) rownames(starplotCircleFillOpacity) <- LETTERS[1:5] @ Render the Graph: <>= outputDir <- file.path(tempdir(), "RGraph2js_starplots") output.filename <- "test.html" g <- graph2js(A=a35, starplotColors=starplotColors, starplotLabels=starplotLabels, starplotValues=starplotValues, starplotTooltips=starplotTooltips, starplotUrlLinks=starplotUrlLinks, starplotCircleFillColor=starplotCircleFillColor, starplotCircleFillOpacity=starplotCircleFillOpacity, outputDir=outputDir, filename=output.filename) @ \begin{figure}[!h] \begin{center} \includegraphics[width=0.5\textwidth]{starplots.png} \caption{Starplots} \end{center} \end{figure} \bioccomment{Moving the mouse over the sectors will display a tooltip showing the sector name or label} \bioccomment{Clicking on a sector will open the associated URL} \newpage \subsection{Customizing the tooltip content} <>= v <- c(0, 0, 1, 1, 0, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0) a35 <- matrix(v, 3, 5) colnames(a35) <- LETTERS[1:5] rownames(a35) <- LETTERS[1:3] @ The content of the tooltip can be defined with the \Robject{nodesProperties} parameter which fully supports HTML content. \bioccomment{We can even add images like any other HTML content} <>= numnodes <- 5 someHtmlContent <- c(paste0("", "
Header 1Header 2", "Header 3
Text 1,1", "Text 1,2Text 1,3
", "Text 2,1Text 2,2Text 2,3", "
"), "This is another content", "Yet another one", paste0("", "
Header 1Header 2", "Header 3
Text 1,1", "Text 1,2Text 1,3
", "Text 2,1Text 2,2Text 2,3", "
"), "

Header 1

Header 2

") n.prop <- data.frame(tooltip=someHtmlContent) rownames(n.prop) <- LETTERS[1:5] @ Since we specified a custom style \emph{gridtable}, we can define it that way: <>= userCssStyles <- " " @ Renderer the Graph and provide custom styles with the \Robject{userCssStyles} parameter: <>= outputDir <- file.path(tempdir(), "RGraph2js_tooltipContent") g <- graph2js(a35, opts=opts, nodesProp=n.prop, userCssStyles=userCssStyles, outputDir=outputDir) @ The 5 tooltips will be rendered as follows: \begin{figure}[!h] \begin{center} \includegraphics[width=100px]{tooltipContentA.png} \includegraphics[width=100px]{tooltipContentB.png} \includegraphics[width=100px]{tooltipContentC.png} \includegraphics[width=100px]{tooltipContentD.png} \includegraphics[width=100px]{tooltipContentE.png} \caption{Custom Tooltips} \end{center} \end{figure} \newpage \subsection{Use the DOT description language} This example requires the \CRANpkg{sna}\cite{2003-statnet} package which allows us to easily get an adjacency matrix from a DOT \footnote{\url{http://www.graphviz.org/doc/info/lang.html}}\cite{2000-Graphviz} file. <>= library(sna) extdata.path <- file.path(path.package(package="RGraph2js"), "extdata") dot.file.path <- file.path(extdata.path, "nohosts.dot") adj.mat <- read.dot(dot.file.path) @ Since the graph is rather large, we can save computing resources by displaying the graph every 100 iterations only, with the option \Robject{displayNetworkEveryNLayoutIterations}. Setting it at "zero" would mean to display the graph upon completion only. <>= opts <- getDefaultOptions() opts$displayNetworkEveryNLayoutIterations <- 100 opts$displayNodeLabels <- FALSE opts$layout_forceCharge <- -2400 nodesGlobal <- list(color="#5544ff") outputDir <- file.path(tempdir(), "RGraph2js_dot") g <- graph2js(A=adj.mat, nodesGlobal=nodesGlobal, opts=opts, outputDir=outputDir) @ \begin{figure}[!h] \begin{center} \includegraphics[width=0.9\textwidth]{dot.png} \caption{Generate a network from a DOT file} \end{center} \end{figure} \newpage \subsection{Use a graph class} Instead of specifying an adjacency matrix, you can pass a \Biocpkg{graph} class. Here is an example with a \Robject{graphNEL} object \Robject{gnel}: <>= library(graph) nodes <- c("A", "B", "C", "D", "E") edges <- list( A=list(edges=c("A", "B"), weights=c(2, 2)), B=list(edges=c("A", "E"), weights=c(0.25, 0.25)), C=list(edges=c("A", "D"), weights=c(4, 4)), D=list(edges=c("E"), weights=c(6)), E=list(edges=c("A", "B"), weights=c(1, 1)) ) gnel <- new("graphNEL", nodes=nodes, edgeL=edges, edgemode="directed") @ The following shows how to graphically represent edges weigths with the \Biocpkg{Rgraphviz} package. As you can see, some extra steps are required. <>= ew <- as.character(unlist(edgeWeights(gnel))) ew <- ew[setdiff(seq(along = ew), removedEdges(gnel))] names(ew) <- edgeNames(gnel) eAttrs <- list() eAttrs$label <- ew plot(gnel, attrs=list( edge=list(arrowsize=0.5) ), edgeAttrs=eAttrs) @ Now, with \Biocpkg{RGraph2js}, edges weights are translated into edges width by default. This default behaviour can be redefined by specifying edges properties. <>= outputDir <- file.path(tempdir(), "RGraph2js_graphNELExample") g <- graph2js(A=gnel, outputDir=outputDir) @ Please note the following limitations: \begin{itemize} \item links/edges representations are only translatable into "$\rightarrow$" or "--" \item as mentioned earlier, loop connections are not rendered \end{itemize} \begin{figure}[!h] \begin{center} \includegraphics[width=0.7\textwidth]{graphNELComparison.png} \caption{Comparison of the original \Robject{graphNEL} (left) and the RGraph2js output (right)} \end{center} \end{figure} \newpage \section{Interactions} \subsection{Using the bottom panel buttons} All buttons are described in the next sections. \begin{figure}[!h] \begin{center} \includegraphics[width=0.9\textwidth]{buttonPanel.png} \caption{Buttons bottom panel} \end{center} \end{figure} \subsubsection{Search} The search field performs an incremental search on all node labels, highlighting matches with a tick red border. Clearing the search field cancels the search and resets the display. \begin{figure}[!h] \begin{center} \includegraphics[width=100px]{searchField.png} \caption{Search field} \end{center} \end{figure} \begin{figure}[!h] \begin{center} \includegraphics[width=0.8\textwidth]{search.png} \caption{Search feature in action} \end{center} \end{figure} \subsubsection{About dialog} \includegraphics[width=10px]{about.png} Gives information about the software and its version \subsubsection{Reload} \includegraphics[width=10px]{reload.png} Re-compute the layout \subsubsection{Layout settings} \includegraphics[width=10px]{settings.png} Toggle the sub-panel to customize the layout engine \begin{figure}[!h] \begin{center} \includegraphics[width=0.8\textwidth]{layoutSettings.png} \caption{Layout Settings} \end{center} \end{figure} The parameters the user can control with sliders are: \begin{itemize} \item Charge \item Link distance \end{itemize} More details about the force layout can be found on the D3js wiki \footnote{\url{https://github.com/mbostock/d3/wiki/Force-Layout}}. \subsubsection{Export} \includegraphics[width=10px]{export.png} Lets you export the graph and save it as an SVG image \begin{figure}[!h] \begin{center} \includegraphics[width=80px]{exportAs.png} \caption{"Export As" popup menu} \end{center} \end{figure} \subsubsection{Zoom} \includegraphics[width=10px]{zoomin.png} \includegraphics[width=10px]{zoomout.png} Zoom in/out without using the mouse wheel \subsubsection{Leading nodes} \includegraphics[width=10px]{leading_nodes.png} Expand a new panel at the bottom containing a slider to navigate accross the time steps. Please note this button is present only when such data exist. \begin{figure}[!h] \begin{center} \includegraphics[width=0.8\textwidth]{leading_nodes_panel.png} \caption{Layout Settings} \end{center} \end{figure} \newpage \subsubsection{Dragging nodes} \includegraphics[width=10px]{drag.png} Toggle the nodes dragging feature \begin{figure}[!h] \begin{center} \includegraphics[width=200px]{nodeDragging.png} \caption{Dragging a node} \end{center} \end{figure} \subsubsection{Node neighbors} \includegraphics[width=10px]{neighbors.png} Enable the highlight of the neighbors when hovering a node \begin{figure}[!h] \begin{center} \includegraphics[width=200px]{showNeighbors.png} \caption{Highlighting of the neighbors} \end{center} \end{figure} \newpage \subsubsection{Tooltips} \includegraphics[width=10px]{tooltip.png} Toggle the display of Tooltips when the mouse hovers a node or an edge Below is an example of a node tooltip containing the node name with a barplot\begin{figure}[!h] \begin{center} \includegraphics[width=0.8\textwidth]{tooltipExample.png} \caption{Tooltips} \end{center} \end{figure} \subsubsection{Magnify} \includegraphics[width=10px]{fullscreen.png} Magnify the view area to fit to the browser current window size \subsection{Using the Mouse} \begin{figure}[!h] \begin{center} \includegraphics[width=0.3\textwidth]{mouse_3b.png} \caption{Mouse Buttons} \end{center} \end{figure} Button (1) is used to drag the whole graph in the drawing area and to drag nodes when the corresponding mode \includegraphics[width=10px]{drag.png} is activated. Double-clicking performs a zoom in. Button (2) opens a popup menu when clicking a node. \begin{figure}[!h] \begin{center} \includegraphics[width=0.2\textwidth]{nodePopupMenu.png} \caption{Node Popup Menu} \end{center} \end{figure} Button (3), the mouse wheel allows to zoom in and out. \begin{thebibliography}{2} \bibitem{Martin2014BMC15238} Florian Martin, Alain Sewer, Marja Talikka, Yang Xiang, Julia Hoeng and Manuel C Peitsch, {\em Quantification of biological network perturbations for mechanistic insight and diagnostics using two-layer causal models}, BMC Bioinformatics 2014, 15:238. URL \url{http://www.biomedcentral.com/1471-2105/15/238} \bibitem{Poussin02072015} Poussin Carine, Laurent Alexandra, Peitsch Manuel C., Hoeng Julia and De Leon Hector {\em Systems Biology Reveals Cigarette Smoke-Induced Concentration-Dependent Direct and Indirect Mechanisms That Promote Monocyte-Endothelial Cell Adhesion.}, Toxicological Sciences Journal, 2015. Abstract: \url{http://toxsci.oxfordjournals.org/content/early/2015/08/20/toxsci.kfv137.abstract} Eprint: \url{http://toxsci.oxfordjournals.org/content/early/2015/08/20/toxsci.kfv137.full.pdf+html} \bibitem{2011-d3} Michael Bostock, Vadim Ogievetsky and Jeffrey Heer, {\em D3: Data-Driven Documents}, IEEE Trans. Visualization \& Comp. Graphics (Proc. InfoVis), 2011. URL \url{http://vis.stanford.edu/papers/d3} \bibitem{2015-jQuery} {\em jQuery}, URL \url{http://jquery.org/} \bibitem{2008-Raphael} {\em Raphael}, URL \url{http://raphaeljs.com/} \bibitem{2015-jQueryUI} {\em jQueryUI}, URL \url{http://jqueryui.com/} \bibitem{2013-qTip2} {\em qTip2}, URL \url{http://qtip2.com/} \bibitem{2003-statnet} Mark S. Handcock, David R. Hunter, Carter T. Butts, Steven M. Goodreau, and Martina Morris, {\em statnet: Software tools for the Statistical Modeling of Network Data.} URL \url{http://statnetproject.org} \bibitem{2000-Graphviz} Emden R. Gansner and Stephen C. North, {\em An open graph visualization system and its applications to software engineering.}, SOFTWARE - PRACTICE AND EXPERIENCE Journal, Volume 30 Number 11 pages 1203-1233, 2000. URL \url{http://www.graphviz.org} \bibitem{graph} R. Gentleman and Elizabeth Whalen and W. Huber and S. Falcon, {\em graph: A package to handle graph data structures}, URL \Biocpkg{graph} \end{thebibliography} \end{document}